From 829f2de0665d9e9b621d21a40e7d0317b130eb6a Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Fri, 28 Jun 2024 09:32:05 +0000 Subject: [PATCH] delete history --- dev/.documenter-siteinfo.json | 1 + dev/assets/documenter.js | 1050 +++ dev/assets/themes/documenter-dark.css | 7 + dev/assets/themes/documenter-light.css | 9 + dev/assets/themeswap.js | 84 + dev/assets/warner.js | 52 + dev/changelog/index.html | 2 + dev/contributing/index.html | 2 + dev/data/index.html | 13 + dev/examples/Bezier-curves/index.html | 68 + .../Difference-of-Convex-Benchmark/index.html | 165 + .../figure-commonmark/cell-18-output-1.svg | 46 + .../figure-commonmark/cell-21-output-1.svg | 48 + .../figure-commonmark/cell-22-output-1.svg | 78 + .../figure-commonmark/cell-8-output-1.svg | 38 + .../figure-commonmark/cell-9-output-1.svg | 38 + .../index.html | 216 + .../figure-commonmark/cell-23-output-1.svg | 53 + .../index.html | 339 + .../figure-commonmark/cell-22-output-1.svg | 48 + .../HyperparameterOptimization/index.html | 332 + dev/examples/RayleighQuotient/index.html | 235 + dev/examples/Riemannian-mean/index.html | 33 + dev/examples/Robust-PCA/index.html | 64 + .../figure-commonmark/fig-pca-output-1.svg | 91 + dev/examples/Rosenbrock/index.html | 59 + .../figure-commonmark/fig-pca-output-1.svg | 46 + dev/examples/Total-Variation/index.html | 107 + .../figure-commonmark/cell-10-output-1.svg | 1551 ++++ .../figure-commonmark/cell-6-output-1.svg | 1048 +++ dev/examples/img/bezier/Casteljau-illustr.png | Bin 0 -> 131251 bytes .../img/bezier/bezier-acceleration-orig.png | Bin 0 -> 263498 bytes .../img/bezier/bezier-acceleration-result.png | Bin 0 -> 147283 bytes dev/examples/index.html | 2 + dev/helpers/error_measures/index.html | 2 + dev/index.html | 2 + dev/objectives/index.html | 187 + dev/objects.inv | Bin 0 -> 4016 bytes dev/references.bib | 235 + dev/references/index.html | 2 + dev/search_index.js | 3 + dev/siteinfo.js | 1 + index.html | 2 + previews/PR10/assets/documenter.js | 331 + previews/PR10/assets/search.js | 267 + .../PR10/assets/themes/documenter-dark.css | 7 + .../PR10/assets/themes/documenter-light.css | 9 + previews/PR10/assets/themeswap.js | 66 + previews/PR10/assets/warner.js | 49 + previews/PR10/contributing/index.html | 2 + .../Difference-of-Convex-Benchmark/index.html | 178 + .../figure-commonmark/cell-18-output-1.svg | 46 + .../figure-commonmark/cell-21-output-1.svg | 46 + .../figure-commonmark/cell-22-output-1.svg | 80 + .../figure-commonmark/cell-8-output-1.svg | 38 + .../figure-commonmark/cell-9-output-1.svg | 38 + .../index.html | 224 + .../figure-commonmark/cell-23-output-1.svg | 53 + .../index.html | 337 + .../figure-commonmark/cell-22-output-1.svg | 48 + .../PR10/examples/RayleighQuotient/index.html | 142 + .../PR10/examples/Riemannian-mean/index.html | 33 + previews/PR10/examples/Robust-PCA/index.html | 64 + .../figure-commonmark/fig-pca-output-1.svg | 91 + previews/PR10/examples/Rosenbrock/index.html | 57 + .../figure-commonmark/fig-pca-output-1.svg | 46 + previews/PR10/examples/index.html | 2 + previews/PR10/index.html | 2 + previews/PR10/objectives/index.html | 42 + previews/PR10/references.bib | 46 + previews/PR10/references/index.html | 15 + previews/PR10/search/index.html | 2 + previews/PR10/search_index.js | 3 + previews/PR10/siteinfo.js | 1 + previews/PR11/assets/documenter.js | 331 + previews/PR11/assets/search.js | 267 + .../PR11/assets/themes/documenter-dark.css | 7 + .../PR11/assets/themes/documenter-light.css | 9 + previews/PR11/assets/themeswap.js | 66 + previews/PR11/assets/warner.js | 49 + previews/PR11/contributing/index.html | 2 + .../Difference-of-Convex-Benchmark/index.html | 178 + .../figure-commonmark/cell-18-output-1.svg | 48 + .../figure-commonmark/cell-21-output-1.svg | 46 + .../figure-commonmark/cell-22-output-1.svg | 80 + .../figure-commonmark/cell-8-output-1.svg | 38 + .../figure-commonmark/cell-9-output-1.svg | 38 + .../index.html | 221 + .../figure-commonmark/cell-23-output-1.svg | 53 + .../index.html | 337 + .../figure-commonmark/cell-22-output-1.svg | 48 + .../PR11/examples/RayleighQuotient/index.html | 142 + .../PR11/examples/Riemannian-mean/index.html | 33 + previews/PR11/examples/Robust-PCA/index.html | 64 + .../figure-commonmark/fig-pca-output-1.svg | 91 + previews/PR11/examples/Rosenbrock/index.html | 57 + .../figure-commonmark/fig-pca-output-1.svg | 46 + previews/PR11/examples/index.html | 2 + previews/PR11/index.html | 2 + previews/PR11/objectives/index.html | 42 + previews/PR11/references.bib | 46 + previews/PR11/references/index.html | 15 + previews/PR11/search/index.html | 2 + previews/PR11/search_index.js | 3 + previews/PR11/siteinfo.js | 1 + previews/PR3/assets/documenter.js | 331 + previews/PR3/assets/search.js | 267 + .../PR3/assets/themes/documenter-dark.css | 7702 ++++++++++++++++ .../PR3/assets/themes/documenter-light.css | 7738 +++++++++++++++++ previews/PR3/assets/themeswap.js | 66 + previews/PR3/assets/warner.js | 49 + previews/PR3/contributing/index.html | 2 + .../PR3/examples/Riemannian-mean/index.html | 32 + previews/PR3/examples/index.html | 2 + previews/PR3/index.html | 2 + previews/PR3/objectives/index.html | 10 + previews/PR3/search/index.html | 2 + previews/PR3/search_index.js | 3 + previews/PR3/siteinfo.js | 1 + previews/PR4/assets/documenter.js | 331 + previews/PR4/assets/search.js | 267 + .../PR4/assets/themes/documenter-dark.css | 7702 ++++++++++++++++ .../PR4/assets/themes/documenter-light.css | 7738 +++++++++++++++++ previews/PR4/assets/themeswap.js | 66 + previews/PR4/assets/warner.js | 49 + previews/PR4/contributing/index.html | 2 + .../PR4/examples/Riemannian-mean/index.html | 32 + previews/PR4/examples/index.html | 2 + previews/PR4/index.html | 2 + previews/PR4/objectives/index.html | 10 + previews/PR4/search/index.html | 2 + previews/PR4/search_index.js | 3 + previews/PR4/siteinfo.js | 1 + previews/PR6/assets/documenter.js | 331 + previews/PR6/assets/search.js | 267 + .../PR6/assets/themes/documenter-dark.css | 7702 ++++++++++++++++ .../PR6/assets/themes/documenter-light.css | 7738 +++++++++++++++++ previews/PR6/assets/themeswap.js | 66 + previews/PR6/assets/warner.js | 49 + previews/PR6/contributing/index.html | 2 + .../PR6/examples/Riemannian-mean/index.html | 32 + previews/PR6/examples/Robust-PCA/index.html | 63 + .../figure-commonmark/fig-pca-output-1.png | Bin 0 -> 33168 bytes previews/PR6/examples/Rosenbrock/index.html | 57 + .../figure-commonmark/fig-pca-output-1.png | Bin 0 -> 16964 bytes previews/PR6/examples/index.html | 2 + previews/PR6/index.html | 2 + previews/PR6/objectives/index.html | 17 + previews/PR6/search/index.html | 2 + previews/PR6/search_index.js | 3 + previews/PR6/siteinfo.js | 1 + stable | 1 + v0.1 | 1 + v0.1.0/assets/documenter.js | 331 + v0.1.0/assets/search.js | 267 + v0.1.0/assets/themes/documenter-dark.css | 7702 ++++++++++++++++ v0.1.0/assets/themes/documenter-light.css | 7738 +++++++++++++++++ v0.1.0/assets/themeswap.js | 66 + v0.1.0/assets/warner.js | 49 + v0.1.0/contributing/index.html | 2 + v0.1.0/examples/Riemannian-mean/index.html | 32 + v0.1.0/examples/Robust-PCA/index.html | 63 + .../figure-commonmark/fig-pca-output-1.png | Bin 0 -> 33168 bytes v0.1.0/examples/index.html | 2 + v0.1.0/index.html | 2 + v0.1.0/objectives/index.html | 13 + v0.1.0/search/index.html | 2 + v0.1.0/search_index.js | 3 + v0.1.0/siteinfo.js | 1 + v0.1.1/assets/documenter.js | 331 + v0.1.1/assets/search.js | 267 + v0.1.1/assets/themes/documenter-dark.css | 7702 ++++++++++++++++ v0.1.1/assets/themes/documenter-light.css | 7738 +++++++++++++++++ v0.1.1/assets/themeswap.js | 66 + v0.1.1/assets/warner.js | 49 + v0.1.1/contributing/index.html | 2 + v0.1.1/examples/Riemannian-mean/index.html | 32 + v0.1.1/examples/Robust-PCA/index.html | 63 + .../figure-commonmark/fig-pca-output-1.png | Bin 0 -> 33168 bytes v0.1.1/examples/Rosenbrock/index.html | 57 + .../figure-commonmark/fig-pca-output-1.png | Bin 0 -> 16964 bytes v0.1.1/examples/index.html | 2 + v0.1.1/index.html | 2 + v0.1.1/objectives/index.html | 17 + v0.1.1/search/index.html | 2 + v0.1.1/search_index.js | 3 + v0.1.1/siteinfo.js | 1 + v0.1.2/assets/documenter.js | 331 + v0.1.2/assets/search.js | 267 + v0.1.2/assets/themes/documenter-dark.css | 7702 ++++++++++++++++ v0.1.2/assets/themes/documenter-light.css | 7738 +++++++++++++++++ v0.1.2/assets/themeswap.js | 66 + v0.1.2/assets/warner.js | 49 + v0.1.2/contributing/index.html | 2 + .../Difference-of-Convex-Benchmark/index.html | 171 + .../figure-commonmark/cell-18-output-1.svg | 48 + .../figure-commonmark/cell-21-output-1.svg | 46 + .../figure-commonmark/cell-22-output-1.svg | 85 + .../figure-commonmark/cell-8-output-1.svg | 38 + .../figure-commonmark/cell-9-output-1.svg | 38 + .../index.html | 217 + .../figure-commonmark/cell-23-output-1.svg | 53 + .../index.html | 337 + .../figure-commonmark/cell-22-output-1.svg | 48 + v0.1.2/examples/Riemannian-mean/index.html | 33 + v0.1.2/examples/Robust-PCA/index.html | 64 + .../figure-commonmark/fig-pca-output-1.svg | 91 + v0.1.2/examples/Rosenbrock/index.html | 57 + .../figure-commonmark/fig-pca-output-1.svg | 46 + v0.1.2/examples/index.html | 2 + v0.1.2/index.html | 2 + v0.1.2/objectives/index.html | 38 + v0.1.2/search/index.html | 2 + v0.1.2/search_index.js | 3 + v0.1.2/siteinfo.js | 1 + v0.1.3/assets/documenter.js | 331 + v0.1.3/assets/search.js | 267 + v0.1.3/assets/themes/documenter-dark.css | 7 + v0.1.3/assets/themes/documenter-light.css | 9 + v0.1.3/assets/themeswap.js | 66 + v0.1.3/assets/warner.js | 49 + v0.1.3/contributing/index.html | 2 + .../Difference-of-Convex-Benchmark/index.html | 178 + .../figure-commonmark/cell-18-output-1.svg | 48 + .../figure-commonmark/cell-21-output-1.svg | 46 + .../figure-commonmark/cell-22-output-1.svg | 80 + .../figure-commonmark/cell-8-output-1.svg | 38 + .../figure-commonmark/cell-9-output-1.svg | 38 + .../index.html | 223 + .../figure-commonmark/cell-23-output-1.svg | 53 + .../index.html | 341 + .../figure-commonmark/cell-22-output-1.svg | 48 + v0.1.3/examples/RayleighQuotient/index.html | 143 + v0.1.3/examples/Riemannian-mean/index.html | 33 + v0.1.3/examples/Robust-PCA/index.html | 64 + .../figure-commonmark/fig-pca-output-1.svg | 91 + v0.1.3/examples/Rosenbrock/index.html | 57 + .../figure-commonmark/fig-pca-output-1.svg | 46 + v0.1.3/examples/index.html | 2 + v0.1.3/index.html | 2 + v0.1.3/objectives/index.html | 42 + v0.1.3/references.bib | 46 + v0.1.3/references/index.html | 15 + v0.1.3/search/index.html | 2 + v0.1.3/search_index.js | 3 + v0.1.3/siteinfo.js | 1 + v0.1.4/.documenter-siteinfo.json | 1 + v0.1.4/assets/documenter.js | 889 ++ v0.1.4/assets/themes/documenter-dark.css | 7 + v0.1.4/assets/themes/documenter-light.css | 9 + v0.1.4/assets/themeswap.js | 84 + v0.1.4/assets/warner.js | 52 + v0.1.4/changelog/index.html | 2 + v0.1.4/contributing/index.html | 2 + v0.1.4/data/index.html | 13 + v0.1.4/examples/Bezier-curves/index.html | 68 + .../Difference-of-Convex-Benchmark/index.html | 165 + .../figure-commonmark/cell-18-output-1.svg | 46 + .../figure-commonmark/cell-21-output-1.svg | 48 + .../figure-commonmark/cell-22-output-1.svg | 78 + .../figure-commonmark/cell-8-output-1.svg | 38 + .../figure-commonmark/cell-9-output-1.svg | 38 + .../index.html | 216 + .../figure-commonmark/cell-23-output-1.svg | 53 + .../index.html | 333 + .../figure-commonmark/cell-22-output-1.svg | 48 + v0.1.4/examples/RayleighQuotient/index.html | 234 + v0.1.4/examples/Riemannian-mean/index.html | 33 + v0.1.4/examples/Robust-PCA/index.html | 64 + .../figure-commonmark/fig-pca-output-1.svg | 91 + v0.1.4/examples/Rosenbrock/index.html | 57 + .../figure-commonmark/fig-pca-output-1.svg | 46 + v0.1.4/examples/Total-Variation/index.html | 104 + .../figure-commonmark/cell-10-output-1.svg | 1551 ++++ .../figure-commonmark/cell-6-output-1.svg | 1048 +++ .../examples/img/bezier/Casteljau-illustr.png | Bin 0 -> 131251 bytes .../img/bezier/bezier-acceleration-orig.png | Bin 0 -> 263498 bytes .../img/bezier/bezier-acceleration-result.png | Bin 0 -> 147283 bytes v0.1.4/examples/index.html | 2 + v0.1.4/helpers/error_measures/index.html | 2 + v0.1.4/index.html | 2 + v0.1.4/objectives/index.html | 187 + v0.1.4/references.bib | 226 + v0.1.4/references/index.html | 2 + v0.1.4/search_index.js | 3 + v0.1.4/siteinfo.js | 1 + v0.1.5/.documenter-siteinfo.json | 1 + v0.1.5/assets/documenter.js | 889 ++ v0.1.5/assets/themes/documenter-dark.css | 7 + v0.1.5/assets/themes/documenter-light.css | 9 + v0.1.5/assets/themeswap.js | 84 + v0.1.5/assets/warner.js | 52 + v0.1.5/changelog/index.html | 2 + v0.1.5/contributing/index.html | 2 + v0.1.5/data/index.html | 13 + v0.1.5/examples/Bezier-curves/index.html | 68 + .../Difference-of-Convex-Benchmark/index.html | 165 + .../figure-commonmark/cell-18-output-1.svg | 46 + .../figure-commonmark/cell-21-output-1.svg | 48 + .../figure-commonmark/cell-22-output-1.svg | 78 + .../figure-commonmark/cell-8-output-1.svg | 38 + .../figure-commonmark/cell-9-output-1.svg | 38 + .../index.html | 214 + .../figure-commonmark/cell-23-output-1.svg | 53 + .../index.html | 333 + .../figure-commonmark/cell-22-output-1.svg | 48 + v0.1.5/examples/RayleighQuotient/index.html | 234 + v0.1.5/examples/Riemannian-mean/index.html | 33 + v0.1.5/examples/Robust-PCA/index.html | 64 + .../figure-commonmark/fig-pca-output-1.svg | 91 + v0.1.5/examples/Rosenbrock/index.html | 57 + .../figure-commonmark/fig-pca-output-1.svg | 46 + v0.1.5/examples/Total-Variation/index.html | 105 + .../figure-commonmark/cell-10-output-1.svg | 1551 ++++ .../figure-commonmark/cell-6-output-1.svg | 1048 +++ .../examples/img/bezier/Casteljau-illustr.png | Bin 0 -> 131251 bytes .../img/bezier/bezier-acceleration-orig.png | Bin 0 -> 263498 bytes .../img/bezier/bezier-acceleration-result.png | Bin 0 -> 147283 bytes v0.1.5/examples/index.html | 2 + v0.1.5/helpers/error_measures/index.html | 2 + v0.1.5/index.html | 2 + v0.1.5/objectives/index.html | 187 + v0.1.5/references.bib | 226 + v0.1.5/references/index.html | 2 + v0.1.5/search_index.js | 3 + v0.1.5/siteinfo.js | 1 + v0.1.6/.documenter-siteinfo.json | 1 + v0.1.6/assets/documenter.js | 1050 +++ v0.1.6/assets/themes/documenter-dark.css | 7 + v0.1.6/assets/themes/documenter-light.css | 9 + v0.1.6/assets/themeswap.js | 84 + v0.1.6/assets/warner.js | 52 + v0.1.6/changelog/index.html | 2 + v0.1.6/contributing/index.html | 2 + v0.1.6/data/index.html | 13 + v0.1.6/examples/Bezier-curves/index.html | 68 + .../Difference-of-Convex-Benchmark/index.html | 165 + .../figure-commonmark/cell-18-output-1.svg | 46 + .../figure-commonmark/cell-21-output-1.svg | 48 + .../figure-commonmark/cell-22-output-1.svg | 78 + .../figure-commonmark/cell-8-output-1.svg | 38 + .../figure-commonmark/cell-9-output-1.svg | 38 + .../index.html | 216 + .../figure-commonmark/cell-23-output-1.svg | 53 + .../index.html | 339 + .../figure-commonmark/cell-22-output-1.svg | 48 + .../HyperparameterOptimization/index.html | 332 + v0.1.6/examples/RayleighQuotient/index.html | 235 + v0.1.6/examples/Riemannian-mean/index.html | 33 + v0.1.6/examples/Robust-PCA/index.html | 64 + .../figure-commonmark/fig-pca-output-1.svg | 91 + v0.1.6/examples/Rosenbrock/index.html | 59 + .../figure-commonmark/fig-pca-output-1.svg | 46 + v0.1.6/examples/Total-Variation/index.html | 107 + .../figure-commonmark/cell-10-output-1.svg | 1551 ++++ .../figure-commonmark/cell-6-output-1.svg | 1048 +++ .../examples/img/bezier/Casteljau-illustr.png | Bin 0 -> 131251 bytes .../img/bezier/bezier-acceleration-orig.png | Bin 0 -> 263498 bytes .../img/bezier/bezier-acceleration-result.png | Bin 0 -> 147283 bytes v0.1.6/examples/index.html | 2 + v0.1.6/helpers/error_measures/index.html | 2 + v0.1.6/index.html | 2 + v0.1.6/objectives/index.html | 187 + v0.1.6/objects.inv | Bin 0 -> 3988 bytes v0.1.6/references.bib | 235 + v0.1.6/references/index.html | 2 + v0.1.6/search_index.js | 3 + v0.1.6/siteinfo.js | 1 + v0.1.7/.documenter-siteinfo.json | 1 + v0.1.7/assets/documenter.js | 1050 +++ v0.1.7/assets/themes/documenter-dark.css | 7 + v0.1.7/assets/themes/documenter-light.css | 9 + v0.1.7/assets/themeswap.js | 84 + v0.1.7/assets/warner.js | 52 + v0.1.7/changelog/index.html | 2 + v0.1.7/contributing/index.html | 2 + v0.1.7/data/index.html | 13 + v0.1.7/examples/Bezier-curves/index.html | 68 + .../Difference-of-Convex-Benchmark/index.html | 165 + .../figure-commonmark/cell-18-output-1.svg | 46 + .../figure-commonmark/cell-21-output-1.svg | 48 + .../figure-commonmark/cell-22-output-1.svg | 78 + .../figure-commonmark/cell-8-output-1.svg | 38 + .../figure-commonmark/cell-9-output-1.svg | 38 + .../index.html | 216 + .../figure-commonmark/cell-23-output-1.svg | 53 + .../index.html | 339 + .../figure-commonmark/cell-22-output-1.svg | 48 + .../HyperparameterOptimization/index.html | 332 + v0.1.7/examples/RayleighQuotient/index.html | 235 + v0.1.7/examples/Riemannian-mean/index.html | 33 + v0.1.7/examples/Robust-PCA/index.html | 64 + .../figure-commonmark/fig-pca-output-1.svg | 91 + v0.1.7/examples/Rosenbrock/index.html | 59 + .../figure-commonmark/fig-pca-output-1.svg | 46 + v0.1.7/examples/Total-Variation/index.html | 107 + .../figure-commonmark/cell-10-output-1.svg | 1551 ++++ .../figure-commonmark/cell-6-output-1.svg | 1048 +++ .../examples/img/bezier/Casteljau-illustr.png | Bin 0 -> 131251 bytes .../img/bezier/bezier-acceleration-orig.png | Bin 0 -> 263498 bytes .../img/bezier/bezier-acceleration-result.png | Bin 0 -> 147283 bytes v0.1.7/examples/index.html | 2 + v0.1.7/helpers/error_measures/index.html | 2 + v0.1.7/index.html | 2 + v0.1.7/objectives/index.html | 187 + v0.1.7/objects.inv | Bin 0 -> 3999 bytes v0.1.7/references.bib | 235 + v0.1.7/references/index.html | 2 + v0.1.7/search_index.js | 3 + v0.1.7/siteinfo.js | 1 + v0.1.8/.documenter-siteinfo.json | 1 + v0.1.8/assets/documenter.js | 1050 +++ v0.1.8/assets/themes/documenter-dark.css | 7 + v0.1.8/assets/themes/documenter-light.css | 9 + v0.1.8/assets/themeswap.js | 84 + v0.1.8/assets/warner.js | 52 + v0.1.8/changelog/index.html | 2 + v0.1.8/contributing/index.html | 2 + v0.1.8/data/index.html | 13 + v0.1.8/examples/Bezier-curves/index.html | 68 + .../Difference-of-Convex-Benchmark/index.html | 165 + .../figure-commonmark/cell-18-output-1.svg | 46 + .../figure-commonmark/cell-21-output-1.svg | 48 + .../figure-commonmark/cell-22-output-1.svg | 78 + .../figure-commonmark/cell-8-output-1.svg | 38 + .../figure-commonmark/cell-9-output-1.svg | 38 + .../index.html | 216 + .../figure-commonmark/cell-23-output-1.svg | 53 + .../index.html | 339 + .../figure-commonmark/cell-22-output-1.svg | 48 + .../HyperparameterOptimization/index.html | 332 + v0.1.8/examples/RayleighQuotient/index.html | 235 + v0.1.8/examples/Riemannian-mean/index.html | 33 + v0.1.8/examples/Robust-PCA/index.html | 64 + .../figure-commonmark/fig-pca-output-1.svg | 91 + v0.1.8/examples/Rosenbrock/index.html | 59 + .../figure-commonmark/fig-pca-output-1.svg | 46 + v0.1.8/examples/Total-Variation/index.html | 107 + .../figure-commonmark/cell-10-output-1.svg | 1551 ++++ .../figure-commonmark/cell-6-output-1.svg | 1048 +++ .../examples/img/bezier/Casteljau-illustr.png | Bin 0 -> 131251 bytes .../img/bezier/bezier-acceleration-orig.png | Bin 0 -> 263498 bytes .../img/bezier/bezier-acceleration-result.png | Bin 0 -> 147283 bytes v0.1.8/examples/index.html | 2 + v0.1.8/helpers/error_measures/index.html | 2 + v0.1.8/index.html | 2 + v0.1.8/objectives/index.html | 187 + v0.1.8/objects.inv | Bin 0 -> 4016 bytes v0.1.8/references.bib | 235 + v0.1.8/references/index.html | 2 + v0.1.8/search_index.js | 3 + v0.1.8/siteinfo.js | 1 + versions.js | 7 + 453 files changed, 143154 insertions(+) create mode 100644 dev/.documenter-siteinfo.json create mode 100644 dev/assets/documenter.js create mode 100644 dev/assets/themes/documenter-dark.css create mode 100644 dev/assets/themes/documenter-light.css create mode 100644 dev/assets/themeswap.js create mode 100644 dev/assets/warner.js create mode 100644 dev/changelog/index.html create mode 100644 dev/contributing/index.html create mode 100644 dev/data/index.html create mode 100644 dev/examples/Bezier-curves/index.html create mode 100644 dev/examples/Difference-of-Convex-Benchmark/index.html create mode 100644 dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg create mode 100644 dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg create mode 100644 dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg create mode 100644 dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg create mode 100644 dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg create mode 100644 dev/examples/Difference-of-Convex-Frank-Wolfe/index.html create mode 100644 dev/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg create mode 100644 dev/examples/Difference-of-Convex-Rosenbrock/index.html create mode 100644 dev/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg create mode 100644 dev/examples/HyperparameterOptimization/index.html create mode 100644 dev/examples/RayleighQuotient/index.html create mode 100644 dev/examples/Riemannian-mean/index.html create mode 100644 dev/examples/Robust-PCA/index.html create mode 100644 dev/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 dev/examples/Rosenbrock/index.html create mode 100644 dev/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 dev/examples/Total-Variation/index.html create mode 100644 dev/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg create mode 100644 dev/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg create mode 100644 dev/examples/img/bezier/Casteljau-illustr.png create mode 100644 dev/examples/img/bezier/bezier-acceleration-orig.png create mode 100644 dev/examples/img/bezier/bezier-acceleration-result.png create mode 100644 dev/examples/index.html create mode 100644 dev/helpers/error_measures/index.html create mode 100644 dev/index.html create mode 100644 dev/objectives/index.html create mode 100644 dev/objects.inv create mode 100644 dev/references.bib create mode 100644 dev/references/index.html create mode 100644 dev/search_index.js create mode 100644 dev/siteinfo.js create mode 100644 index.html create mode 100644 previews/PR10/assets/documenter.js create mode 100644 previews/PR10/assets/search.js create mode 100644 previews/PR10/assets/themes/documenter-dark.css create mode 100644 previews/PR10/assets/themes/documenter-light.css create mode 100644 previews/PR10/assets/themeswap.js create mode 100644 previews/PR10/assets/warner.js create mode 100644 previews/PR10/contributing/index.html create mode 100644 previews/PR10/examples/Difference-of-Convex-Benchmark/index.html create mode 100644 previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg create mode 100644 previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg create mode 100644 previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg create mode 100644 previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg create mode 100644 previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg create mode 100644 previews/PR10/examples/Difference-of-Convex-Frank-Wolfe/index.html create mode 100644 previews/PR10/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg create mode 100644 previews/PR10/examples/Difference-of-Convex-Rosenbrock/index.html create mode 100644 previews/PR10/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg create mode 100644 previews/PR10/examples/RayleighQuotient/index.html create mode 100644 previews/PR10/examples/Riemannian-mean/index.html create mode 100644 previews/PR10/examples/Robust-PCA/index.html create mode 100644 previews/PR10/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 previews/PR10/examples/Rosenbrock/index.html create mode 100644 previews/PR10/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 previews/PR10/examples/index.html create mode 100644 previews/PR10/index.html create mode 100644 previews/PR10/objectives/index.html create mode 100644 previews/PR10/references.bib create mode 100644 previews/PR10/references/index.html create mode 100644 previews/PR10/search/index.html create mode 100644 previews/PR10/search_index.js create mode 100644 previews/PR10/siteinfo.js create mode 100644 previews/PR11/assets/documenter.js create mode 100644 previews/PR11/assets/search.js create mode 100644 previews/PR11/assets/themes/documenter-dark.css create mode 100644 previews/PR11/assets/themes/documenter-light.css create mode 100644 previews/PR11/assets/themeswap.js create mode 100644 previews/PR11/assets/warner.js create mode 100644 previews/PR11/contributing/index.html create mode 100644 previews/PR11/examples/Difference-of-Convex-Benchmark/index.html create mode 100644 previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg create mode 100644 previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg create mode 100644 previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg create mode 100644 previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg create mode 100644 previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg create mode 100644 previews/PR11/examples/Difference-of-Convex-Frank-Wolfe/index.html create mode 100644 previews/PR11/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg create mode 100644 previews/PR11/examples/Difference-of-Convex-Rosenbrock/index.html create mode 100644 previews/PR11/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg create mode 100644 previews/PR11/examples/RayleighQuotient/index.html create mode 100644 previews/PR11/examples/Riemannian-mean/index.html create mode 100644 previews/PR11/examples/Robust-PCA/index.html create mode 100644 previews/PR11/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 previews/PR11/examples/Rosenbrock/index.html create mode 100644 previews/PR11/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 previews/PR11/examples/index.html create mode 100644 previews/PR11/index.html create mode 100644 previews/PR11/objectives/index.html create mode 100644 previews/PR11/references.bib create mode 100644 previews/PR11/references/index.html create mode 100644 previews/PR11/search/index.html create mode 100644 previews/PR11/search_index.js create mode 100644 previews/PR11/siteinfo.js create mode 100644 previews/PR3/assets/documenter.js create mode 100644 previews/PR3/assets/search.js create mode 100644 previews/PR3/assets/themes/documenter-dark.css create mode 100644 previews/PR3/assets/themes/documenter-light.css create mode 100644 previews/PR3/assets/themeswap.js create mode 100644 previews/PR3/assets/warner.js create mode 100644 previews/PR3/contributing/index.html create mode 100644 previews/PR3/examples/Riemannian-mean/index.html create mode 100644 previews/PR3/examples/index.html create mode 100644 previews/PR3/index.html create mode 100644 previews/PR3/objectives/index.html create mode 100644 previews/PR3/search/index.html create mode 100644 previews/PR3/search_index.js create mode 100644 previews/PR3/siteinfo.js create mode 100644 previews/PR4/assets/documenter.js create mode 100644 previews/PR4/assets/search.js create mode 100644 previews/PR4/assets/themes/documenter-dark.css create mode 100644 previews/PR4/assets/themes/documenter-light.css create mode 100644 previews/PR4/assets/themeswap.js create mode 100644 previews/PR4/assets/warner.js create mode 100644 previews/PR4/contributing/index.html create mode 100644 previews/PR4/examples/Riemannian-mean/index.html create mode 100644 previews/PR4/examples/index.html create mode 100644 previews/PR4/index.html create mode 100644 previews/PR4/objectives/index.html create mode 100644 previews/PR4/search/index.html create mode 100644 previews/PR4/search_index.js create mode 100644 previews/PR4/siteinfo.js create mode 100644 previews/PR6/assets/documenter.js create mode 100644 previews/PR6/assets/search.js create mode 100644 previews/PR6/assets/themes/documenter-dark.css create mode 100644 previews/PR6/assets/themes/documenter-light.css create mode 100644 previews/PR6/assets/themeswap.js create mode 100644 previews/PR6/assets/warner.js create mode 100644 previews/PR6/contributing/index.html create mode 100644 previews/PR6/examples/Riemannian-mean/index.html create mode 100644 previews/PR6/examples/Robust-PCA/index.html create mode 100644 previews/PR6/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.png create mode 100644 previews/PR6/examples/Rosenbrock/index.html create mode 100644 previews/PR6/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.png create mode 100644 previews/PR6/examples/index.html create mode 100644 previews/PR6/index.html create mode 100644 previews/PR6/objectives/index.html create mode 100644 previews/PR6/search/index.html create mode 100644 previews/PR6/search_index.js create mode 100644 previews/PR6/siteinfo.js create mode 120000 stable create mode 120000 v0.1 create mode 100644 v0.1.0/assets/documenter.js create mode 100644 v0.1.0/assets/search.js create mode 100644 v0.1.0/assets/themes/documenter-dark.css create mode 100644 v0.1.0/assets/themes/documenter-light.css create mode 100644 v0.1.0/assets/themeswap.js create mode 100644 v0.1.0/assets/warner.js create mode 100644 v0.1.0/contributing/index.html create mode 100644 v0.1.0/examples/Riemannian-mean/index.html create mode 100644 v0.1.0/examples/Robust-PCA/index.html create mode 100644 v0.1.0/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.png create mode 100644 v0.1.0/examples/index.html create mode 100644 v0.1.0/index.html create mode 100644 v0.1.0/objectives/index.html create mode 100644 v0.1.0/search/index.html create mode 100644 v0.1.0/search_index.js create mode 100644 v0.1.0/siteinfo.js create mode 100644 v0.1.1/assets/documenter.js create mode 100644 v0.1.1/assets/search.js create mode 100644 v0.1.1/assets/themes/documenter-dark.css create mode 100644 v0.1.1/assets/themes/documenter-light.css create mode 100644 v0.1.1/assets/themeswap.js create mode 100644 v0.1.1/assets/warner.js create mode 100644 v0.1.1/contributing/index.html create mode 100644 v0.1.1/examples/Riemannian-mean/index.html create mode 100644 v0.1.1/examples/Robust-PCA/index.html create mode 100644 v0.1.1/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.png create mode 100644 v0.1.1/examples/Rosenbrock/index.html create mode 100644 v0.1.1/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.png create mode 100644 v0.1.1/examples/index.html create mode 100644 v0.1.1/index.html create mode 100644 v0.1.1/objectives/index.html create mode 100644 v0.1.1/search/index.html create mode 100644 v0.1.1/search_index.js create mode 100644 v0.1.1/siteinfo.js create mode 100644 v0.1.2/assets/documenter.js create mode 100644 v0.1.2/assets/search.js create mode 100644 v0.1.2/assets/themes/documenter-dark.css create mode 100644 v0.1.2/assets/themes/documenter-light.css create mode 100644 v0.1.2/assets/themeswap.js create mode 100644 v0.1.2/assets/warner.js create mode 100644 v0.1.2/contributing/index.html create mode 100644 v0.1.2/examples/Difference-of-Convex-Benchmark/index.html create mode 100644 v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg create mode 100644 v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg create mode 100644 v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg create mode 100644 v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg create mode 100644 v0.1.2/examples/Difference-of-Convex-Frank-Wolfe/index.html create mode 100644 v0.1.2/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg create mode 100644 v0.1.2/examples/Difference-of-Convex-Rosenbrock/index.html create mode 100644 v0.1.2/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.2/examples/Riemannian-mean/index.html create mode 100644 v0.1.2/examples/Robust-PCA/index.html create mode 100644 v0.1.2/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.2/examples/Rosenbrock/index.html create mode 100644 v0.1.2/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.2/examples/index.html create mode 100644 v0.1.2/index.html create mode 100644 v0.1.2/objectives/index.html create mode 100644 v0.1.2/search/index.html create mode 100644 v0.1.2/search_index.js create mode 100644 v0.1.2/siteinfo.js create mode 100644 v0.1.3/assets/documenter.js create mode 100644 v0.1.3/assets/search.js create mode 100644 v0.1.3/assets/themes/documenter-dark.css create mode 100644 v0.1.3/assets/themes/documenter-light.css create mode 100644 v0.1.3/assets/themeswap.js create mode 100644 v0.1.3/assets/warner.js create mode 100644 v0.1.3/contributing/index.html create mode 100644 v0.1.3/examples/Difference-of-Convex-Benchmark/index.html create mode 100644 v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg create mode 100644 v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg create mode 100644 v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg create mode 100644 v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg create mode 100644 v0.1.3/examples/Difference-of-Convex-Frank-Wolfe/index.html create mode 100644 v0.1.3/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg create mode 100644 v0.1.3/examples/Difference-of-Convex-Rosenbrock/index.html create mode 100644 v0.1.3/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.3/examples/RayleighQuotient/index.html create mode 100644 v0.1.3/examples/Riemannian-mean/index.html create mode 100644 v0.1.3/examples/Robust-PCA/index.html create mode 100644 v0.1.3/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.3/examples/Rosenbrock/index.html create mode 100644 v0.1.3/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.3/examples/index.html create mode 100644 v0.1.3/index.html create mode 100644 v0.1.3/objectives/index.html create mode 100644 v0.1.3/references.bib create mode 100644 v0.1.3/references/index.html create mode 100644 v0.1.3/search/index.html create mode 100644 v0.1.3/search_index.js create mode 100644 v0.1.3/siteinfo.js create mode 100644 v0.1.4/.documenter-siteinfo.json create mode 100644 v0.1.4/assets/documenter.js create mode 100644 v0.1.4/assets/themes/documenter-dark.css create mode 100644 v0.1.4/assets/themes/documenter-light.css create mode 100644 v0.1.4/assets/themeswap.js create mode 100644 v0.1.4/assets/warner.js create mode 100644 v0.1.4/changelog/index.html create mode 100644 v0.1.4/contributing/index.html create mode 100644 v0.1.4/data/index.html create mode 100644 v0.1.4/examples/Bezier-curves/index.html create mode 100644 v0.1.4/examples/Difference-of-Convex-Benchmark/index.html create mode 100644 v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg create mode 100644 v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg create mode 100644 v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg create mode 100644 v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg create mode 100644 v0.1.4/examples/Difference-of-Convex-Frank-Wolfe/index.html create mode 100644 v0.1.4/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg create mode 100644 v0.1.4/examples/Difference-of-Convex-Rosenbrock/index.html create mode 100644 v0.1.4/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.4/examples/RayleighQuotient/index.html create mode 100644 v0.1.4/examples/Riemannian-mean/index.html create mode 100644 v0.1.4/examples/Robust-PCA/index.html create mode 100644 v0.1.4/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.4/examples/Rosenbrock/index.html create mode 100644 v0.1.4/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.4/examples/Total-Variation/index.html create mode 100644 v0.1.4/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg create mode 100644 v0.1.4/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg create mode 100644 v0.1.4/examples/img/bezier/Casteljau-illustr.png create mode 100644 v0.1.4/examples/img/bezier/bezier-acceleration-orig.png create mode 100644 v0.1.4/examples/img/bezier/bezier-acceleration-result.png create mode 100644 v0.1.4/examples/index.html create mode 100644 v0.1.4/helpers/error_measures/index.html create mode 100644 v0.1.4/index.html create mode 100644 v0.1.4/objectives/index.html create mode 100644 v0.1.4/references.bib create mode 100644 v0.1.4/references/index.html create mode 100644 v0.1.4/search_index.js create mode 100644 v0.1.4/siteinfo.js create mode 100644 v0.1.5/.documenter-siteinfo.json create mode 100644 v0.1.5/assets/documenter.js create mode 100644 v0.1.5/assets/themes/documenter-dark.css create mode 100644 v0.1.5/assets/themes/documenter-light.css create mode 100644 v0.1.5/assets/themeswap.js create mode 100644 v0.1.5/assets/warner.js create mode 100644 v0.1.5/changelog/index.html create mode 100644 v0.1.5/contributing/index.html create mode 100644 v0.1.5/data/index.html create mode 100644 v0.1.5/examples/Bezier-curves/index.html create mode 100644 v0.1.5/examples/Difference-of-Convex-Benchmark/index.html create mode 100644 v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg create mode 100644 v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg create mode 100644 v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg create mode 100644 v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg create mode 100644 v0.1.5/examples/Difference-of-Convex-Frank-Wolfe/index.html create mode 100644 v0.1.5/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg create mode 100644 v0.1.5/examples/Difference-of-Convex-Rosenbrock/index.html create mode 100644 v0.1.5/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.5/examples/RayleighQuotient/index.html create mode 100644 v0.1.5/examples/Riemannian-mean/index.html create mode 100644 v0.1.5/examples/Robust-PCA/index.html create mode 100644 v0.1.5/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.5/examples/Rosenbrock/index.html create mode 100644 v0.1.5/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.5/examples/Total-Variation/index.html create mode 100644 v0.1.5/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg create mode 100644 v0.1.5/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg create mode 100644 v0.1.5/examples/img/bezier/Casteljau-illustr.png create mode 100644 v0.1.5/examples/img/bezier/bezier-acceleration-orig.png create mode 100644 v0.1.5/examples/img/bezier/bezier-acceleration-result.png create mode 100644 v0.1.5/examples/index.html create mode 100644 v0.1.5/helpers/error_measures/index.html create mode 100644 v0.1.5/index.html create mode 100644 v0.1.5/objectives/index.html create mode 100644 v0.1.5/references.bib create mode 100644 v0.1.5/references/index.html create mode 100644 v0.1.5/search_index.js create mode 100644 v0.1.5/siteinfo.js create mode 100644 v0.1.6/.documenter-siteinfo.json create mode 100644 v0.1.6/assets/documenter.js create mode 100644 v0.1.6/assets/themes/documenter-dark.css create mode 100644 v0.1.6/assets/themes/documenter-light.css create mode 100644 v0.1.6/assets/themeswap.js create mode 100644 v0.1.6/assets/warner.js create mode 100644 v0.1.6/changelog/index.html create mode 100644 v0.1.6/contributing/index.html create mode 100644 v0.1.6/data/index.html create mode 100644 v0.1.6/examples/Bezier-curves/index.html create mode 100644 v0.1.6/examples/Difference-of-Convex-Benchmark/index.html create mode 100644 v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg create mode 100644 v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg create mode 100644 v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg create mode 100644 v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg create mode 100644 v0.1.6/examples/Difference-of-Convex-Frank-Wolfe/index.html create mode 100644 v0.1.6/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg create mode 100644 v0.1.6/examples/Difference-of-Convex-Rosenbrock/index.html create mode 100644 v0.1.6/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.6/examples/HyperparameterOptimization/index.html create mode 100644 v0.1.6/examples/RayleighQuotient/index.html create mode 100644 v0.1.6/examples/Riemannian-mean/index.html create mode 100644 v0.1.6/examples/Robust-PCA/index.html create mode 100644 v0.1.6/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.6/examples/Rosenbrock/index.html create mode 100644 v0.1.6/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.6/examples/Total-Variation/index.html create mode 100644 v0.1.6/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg create mode 100644 v0.1.6/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg create mode 100644 v0.1.6/examples/img/bezier/Casteljau-illustr.png create mode 100644 v0.1.6/examples/img/bezier/bezier-acceleration-orig.png create mode 100644 v0.1.6/examples/img/bezier/bezier-acceleration-result.png create mode 100644 v0.1.6/examples/index.html create mode 100644 v0.1.6/helpers/error_measures/index.html create mode 100644 v0.1.6/index.html create mode 100644 v0.1.6/objectives/index.html create mode 100644 v0.1.6/objects.inv create mode 100644 v0.1.6/references.bib create mode 100644 v0.1.6/references/index.html create mode 100644 v0.1.6/search_index.js create mode 100644 v0.1.6/siteinfo.js create mode 100644 v0.1.7/.documenter-siteinfo.json create mode 100644 v0.1.7/assets/documenter.js create mode 100644 v0.1.7/assets/themes/documenter-dark.css create mode 100644 v0.1.7/assets/themes/documenter-light.css create mode 100644 v0.1.7/assets/themeswap.js create mode 100644 v0.1.7/assets/warner.js create mode 100644 v0.1.7/changelog/index.html create mode 100644 v0.1.7/contributing/index.html create mode 100644 v0.1.7/data/index.html create mode 100644 v0.1.7/examples/Bezier-curves/index.html create mode 100644 v0.1.7/examples/Difference-of-Convex-Benchmark/index.html create mode 100644 v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg create mode 100644 v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg create mode 100644 v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg create mode 100644 v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg create mode 100644 v0.1.7/examples/Difference-of-Convex-Frank-Wolfe/index.html create mode 100644 v0.1.7/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg create mode 100644 v0.1.7/examples/Difference-of-Convex-Rosenbrock/index.html create mode 100644 v0.1.7/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.7/examples/HyperparameterOptimization/index.html create mode 100644 v0.1.7/examples/RayleighQuotient/index.html create mode 100644 v0.1.7/examples/Riemannian-mean/index.html create mode 100644 v0.1.7/examples/Robust-PCA/index.html create mode 100644 v0.1.7/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.7/examples/Rosenbrock/index.html create mode 100644 v0.1.7/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.7/examples/Total-Variation/index.html create mode 100644 v0.1.7/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg create mode 100644 v0.1.7/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg create mode 100644 v0.1.7/examples/img/bezier/Casteljau-illustr.png create mode 100644 v0.1.7/examples/img/bezier/bezier-acceleration-orig.png create mode 100644 v0.1.7/examples/img/bezier/bezier-acceleration-result.png create mode 100644 v0.1.7/examples/index.html create mode 100644 v0.1.7/helpers/error_measures/index.html create mode 100644 v0.1.7/index.html create mode 100644 v0.1.7/objectives/index.html create mode 100644 v0.1.7/objects.inv create mode 100644 v0.1.7/references.bib create mode 100644 v0.1.7/references/index.html create mode 100644 v0.1.7/search_index.js create mode 100644 v0.1.7/siteinfo.js create mode 100644 v0.1.8/.documenter-siteinfo.json create mode 100644 v0.1.8/assets/documenter.js create mode 100644 v0.1.8/assets/themes/documenter-dark.css create mode 100644 v0.1.8/assets/themes/documenter-light.css create mode 100644 v0.1.8/assets/themeswap.js create mode 100644 v0.1.8/assets/warner.js create mode 100644 v0.1.8/changelog/index.html create mode 100644 v0.1.8/contributing/index.html create mode 100644 v0.1.8/data/index.html create mode 100644 v0.1.8/examples/Bezier-curves/index.html create mode 100644 v0.1.8/examples/Difference-of-Convex-Benchmark/index.html create mode 100644 v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg create mode 100644 v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg create mode 100644 v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg create mode 100644 v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg create mode 100644 v0.1.8/examples/Difference-of-Convex-Frank-Wolfe/index.html create mode 100644 v0.1.8/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg create mode 100644 v0.1.8/examples/Difference-of-Convex-Rosenbrock/index.html create mode 100644 v0.1.8/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg create mode 100644 v0.1.8/examples/HyperparameterOptimization/index.html create mode 100644 v0.1.8/examples/RayleighQuotient/index.html create mode 100644 v0.1.8/examples/Riemannian-mean/index.html create mode 100644 v0.1.8/examples/Robust-PCA/index.html create mode 100644 v0.1.8/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.8/examples/Rosenbrock/index.html create mode 100644 v0.1.8/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg create mode 100644 v0.1.8/examples/Total-Variation/index.html create mode 100644 v0.1.8/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg create mode 100644 v0.1.8/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg create mode 100644 v0.1.8/examples/img/bezier/Casteljau-illustr.png create mode 100644 v0.1.8/examples/img/bezier/bezier-acceleration-orig.png create mode 100644 v0.1.8/examples/img/bezier/bezier-acceleration-result.png create mode 100644 v0.1.8/examples/index.html create mode 100644 v0.1.8/helpers/error_measures/index.html create mode 100644 v0.1.8/index.html create mode 100644 v0.1.8/objectives/index.html create mode 100644 v0.1.8/objects.inv create mode 100644 v0.1.8/references.bib create mode 100644 v0.1.8/references/index.html create mode 100644 v0.1.8/search_index.js create mode 100644 v0.1.8/siteinfo.js create mode 100644 versions.js diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json new file mode 100644 index 0000000..6e6660c --- /dev/null +++ b/dev/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-06-12T12:28:22","documenter_version":"1.4.1"}} \ No newline at end of file diff --git a/dev/assets/documenter.js b/dev/assets/documenter.js new file mode 100644 index 0000000..c6562b5 --- /dev/null +++ b/dev/assets/documenter.js @@ -0,0 +1,1050 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let timer = 0; +var isExpanded = true; + +$(document).on("click", ".docstring header", function () { + let articleToggleTitle = "Expand docstring"; + + debounce(() => { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function (event) { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + let animationSpeed = event.noToggleAnimation ? 0 : 400; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(animationSpeed); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(animationSpeed); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let meta = $("div[data-docstringscollapsed]").data(); + + if (meta?.docstringscollapsed) { + $("#documenter-article-toggle-button").trigger({ + type: "click", + noToggleAnimation: true, + }); + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +/* +To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +PSEUDOCODE: + +Searching happens automatically as the user types or adjusts the selected filters. +To preserve responsiveness, as much as possible of the slow parts of the search are done +in a web worker. Searching and result generation are done in the worker, and filtering and +DOM updates are done in the main thread. The filters are in the main thread as they should +be very quick to apply. This lets filters be changed without re-searching with minisearch +(which is possible even if filtering is on the worker thread) and also lets filters be +changed _while_ the worker is searching and without message passing (neither of which are +possible if filtering is on the worker thread) + +SEARCH WORKER: + +Import minisearch + +Build index + +On message from main thread + run search + find the first 200 unique results from each category, and compute their divs for display + note that this is necessary and sufficient information for the main thread to find the + first 200 unique results from any given filter set + post results to main thread + +MAIN: + +Launch worker + +Declare nonconstant globals (worker_is_running, last_search_text, unfiltered_results) + +On text update + if worker is not running, launch_search() + +launch_search + set worker_is_running to true, set last_search_text to the search text + post the search query to worker + +on message from worker + if last_search_text is not the same as the text in the search field, + the latest search result is not reflective of the latest search query, so update again + launch_search() + otherwise + set worker_is_running to false + + regardless, display the new search results to the user + save the unfiltered_results as a global + update_search() + +on filter click + adjust the filter selection + update_search() + +update_search + apply search filters by looping through the unfiltered_results and finding the first 200 + unique results that match the filters + + Update the DOM +*/ + +/////// SEARCH WORKER /////// + +function worker_function(documenterSearchIndex, documenterBaseURL, filters) { + importScripts( + "https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js" + ); + + let data = documenterSearchIndex.map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; + }); + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", + ]); + + let index = new MiniSearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + + word = word.toLowerCase(); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not + // find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + prefix: true, + boost: { title: 100 }, + fuzzy: 2, + }, + }); + + index.addAll(data); + + /** + * Used to map characters to HTML entities. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const htmlEscapes = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + }; + + /** + * Used to match HTML entities and HTML characters. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const reUnescapedHtml = /[&<>"']/g; + const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** + * Escape function from lodash + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + function escape(string) { + return string && reHasUnescapedHtml.test(string) + ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) + : string || ""; + } + + /** + * Make the result component given a minisearch result data object and the value + * of the search input as queryString. To view the result object structure, refer: + * https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ + function make_search_result(result, querystring) { + let search_divider = `
`; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + + let textindex = new RegExp(`${querystring}`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + text = text.length ? escape(text) : ""; + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`${escape(querystring)}`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
+
${escape(result.title)}
+
${result.category}
+
+

+ ${display_result} +

+
+ ${display_link} +
+
+ ${search_divider} + `; + + return result_div; + } + + self.onmessage = function (e) { + let query = e.data; + let results = index.search(query, { + filter: (result) => { + // Only return relevant results + return result.score >= 1; + }, + }); + + // Pre-filter to deduplicate and limit to 200 per category to the extent + // possible without knowing what the filters are. + let filtered_results = []; + let counts = {}; + for (let filter of filters) { + counts[filter] = 0; + } + let present = {}; + + for (let result of results) { + cat = result.category; + cnt = counts[cat]; + if (cnt < 200) { + id = cat + "---" + result.location; + if (present[id]) { + continue; + } + present[id] = true; + filtered_results.push({ + location: result.location, + category: cat, + div: make_search_result(result, query), + }); + } + } + + postMessage(filtered_results); + }; +} + +// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! +const filters = [ + ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), +]; +const worker_str = + "(" + + worker_function.toString() + + ")(" + + JSON.stringify(documenterSearchIndex["docs"]) + + "," + + JSON.stringify(documenterBaseURL) + + "," + + JSON.stringify(filters) + + ")"; +const worker_blob = new Blob([worker_str], { type: "text/javascript" }); +const worker = new Worker(URL.createObjectURL(worker_blob)); + +/////// SEARCH MAIN /////// + +// Whether the worker is currently handling a search. This is a boolean +// as the worker only ever handles 1 or 0 searches at a time. +var worker_is_running = false; + +// The last search text that was sent to the worker. This is used to determine +// if the worker should be launched again when it reports back results. +var last_search_text = ""; + +// The results of the last search. This, in combination with the state of the filters +// in the DOM, is used compute the results to display on calls to update_search. +var unfiltered_results = []; + +// Which filter is currently selected +var selected_filter = ""; + +$(document).on("input", ".documenter-search-input", function (event) { + if (!worker_is_running) { + launch_search(); + } +}); + +function launch_search() { + worker_is_running = true; + last_search_text = $(".documenter-search-input").val(); + worker.postMessage(last_search_text); +} + +worker.onmessage = function (e) { + if (last_search_text !== $(".documenter-search-input").val()) { + launch_search(); + } else { + worker_is_running = false; + } + + unfiltered_results = e.data; + update_search(); +}; + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + selected_filter = ""; + } else { + selected_filter = $(this).text().toLowerCase(); + } + + // This updates search results and toggles classes for UI: + update_search(); +}); + +/** + * Make/Update the search component + */ +function update_search() { + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + if (selected_filter == "") { + results = unfiltered_results; + } else { + results = unfiltered_results.filter((result) => { + return selected_filter == result.category.toLowerCase(); + }); + } + + let search_result_container = ``; + let modal_filters = make_modal_body_filters(); + let search_divider = `
`; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + for (var i = 0, n = results.length; i < n && count < 200; ++i) { + let result = results[i]; + if (result.location && !links.includes(result.location)) { + search_results += result.div; + count++; + links.push(result.location); + } + } + + if (count == 1) { + count_str = "1 result"; + } else if (count == 200) { + count_str = "200+ results"; + } else { + count_str = count + " results"; + } + let result_count = `
${count_str}
`; + + search_result_container = ` +
+ ${modal_filters} + ${search_divider} + ${result_count} +
+ ${search_results} +
+
+ `; + } else { + search_result_container = ` +
+ ${modal_filters} + ${search_divider} +
0 result(s)
+
+
No result found!
+ `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(` +
Type something to get started!
+ `); + } +} + +/** + * Make the modal filter html + * + * @returns string + */ +function make_modal_body_filters() { + let str = filters + .map((val) => { + if (selected_filter == val.toLowerCase()) { + return `${val}`; + } else { + return `${val}`; + } + }) + .join(""); + + return ` +
+ Filters: + ${str} +
`; +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let search_modal_header = ` + + `; + + let initial_search_body = ` +
Type something to get started!
+ `; + + let search_modal_footer = ` + + `; + + $(document.body).append( + ` + + ` + ); + + document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); + }); + + document + .querySelector(".close-search-modal") + .addEventListener("click", () => { + closeModal(); + }); + + $(document).on("click", ".search-result-link", function () { + closeModal(); + }); + + document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; + }); + + // Functions to open and close a modal + function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); + } + + function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
Type something to get started!
+ `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); + } + + document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "" + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "" + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/dev/assets/themes/documenter-dark.css b/dev/assets/themes/documenter-dark.css new file mode 100644 index 0000000..1d71701 --- /dev/null +++ b/dev/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-info-light{color:#ebf7ff !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#b9e2fe !important}.has-background-info-light{background-color:#ebf7ff !important}.has-text-info-dark{color:#0e9dfb !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#40b1fc !important}.has-background-info-dark{background-color:#0e9dfb !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-success-light{color:#ebfff3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#b8ffd6 !important}.has-background-success-light{background-color:#ebfff3 !important}.has-text-success-dark{color:#00eb64 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#1fff7e !important}.has-background-success-dark{background-color:#00eb64 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-warning-light{color:#fffaeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#ffedb8 !important}.has-background-warning-light{background-color:#fffaeb !important}.has-text-warning-dark{color:#d19c00 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffbf05 !important}.has-background-warning-dark{background-color:#d19c00 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-danger-light{color:#fdeeec !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fac3bd !important}.has-background-danger-light{background-color:#fdeeec !important}.has-text-danger-dark{color:#ec311d !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f05c4c !important}.has-background-danger-dark{background-color:#ec311d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:#024c7d;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#def2fe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#d2edfe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:#008438;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#deffec;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#d1ffe5;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:#ad8100;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fff7de;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fff3d1;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#fce3e0;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#fcd8d5;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#ebf7ff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#0e9dfb}html.theme--documenter-dark .message.is-success{background-color:#ebfff3}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#00eb64}html.theme--documenter-dark .message.is-warning{background-color:#fffaeb}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#d19c00}html.theme--documenter-dark .message.is-danger{background-color:#fdeeec}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#ec311d}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#024c7d;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#024c7d}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#024c7d}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#008438;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#008438}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#008438}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#ad8100;color:#fff}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ad8100}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#ad8100}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#9e1b0d}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#9e1b0d}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#024c7d !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#008438 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#ad8100 !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#9e1b0d !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;overflow:auto}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content a:hover code{color:#1dd2af}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/dev/assets/themes/documenter-light.css b/dev/assets/themes/documenter-light.css new file mode 100644 index 0000000..07f9d08 --- /dev/null +++ b/dev/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-info-light{color:#ecf7fe !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#bde2fa !important}.has-background-info-light{background-color:#ecf7fe !important}.has-text-info-dark{color:#0e72b4 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#1190e3 !important}.has-background-info-dark{background-color:#0e72b4 !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-success-light{color:#eefcf3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c2f4d4 !important}.has-background-success-light{background-color:#eefcf3 !important}.has-text-success-dark{color:#198f43 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#21bb57 !important}.has-background-success-dark{background-color:#198f43 !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#947600 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#c79f00 !important}.has-background-warning-dark{background-color:#947600 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-danger-light{color:#ffeceb !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#ffbbb8 !important}.has-background-danger-light{background-color:#ffeceb !important}.has-text-danger-dark{color:#f50c00 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#ff3429 !important}.has-background-danger-dark{background-color:#f50c00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:#209cee;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e0f1fd;border-color:transparent;color:#0e72b4}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#d4ecfc;border-color:transparent;color:#0e72b4}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:#22c35b;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#eefcf3;color:#198f43}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e3faeb;border-color:transparent;color:#198f43}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#d8f8e3;border-color:transparent;color:#198f43}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:#ffdd57;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:#da0b00;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#ffe0de;border-color:transparent;color:#f50c00}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#ffd3d1;border-color:transparent;color:#f50c00}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-success.is-light{background-color:#eefcf3;color:#198f43}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#da0b00;color:#fff}.notification.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ecf7fe;color:#0e72b4}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#eefcf3;color:#198f43}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#947600}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#ffeceb;color:#f50c00}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#ecf7fe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#0e72b4}.message.is-success{background-color:#eefcf3}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#198f43}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#ffeceb}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#f50c00}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#209cee;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#209cee}.panel.is-info .panel-block.is-active .panel-icon{color:#209cee}.panel.is-success .panel-heading{background-color:#22c35b;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#22c35b}.panel.is-success .panel-block.is-active .panel-icon{color:#22c35b}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#da0b00;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#da0b00}.panel.is-danger .panel-block.is-active .panel-icon{color:#da0b00}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#209cee !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#22c35b !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#ffdd57 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#da0b00 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;overflow:auto}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content a:hover code{color:#363636}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/dev/assets/themeswap.js b/dev/assets/themeswap.js new file mode 100644 index 0000000..9f5eebe --- /dev/null +++ b/dev/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/dev/assets/warner.js b/dev/assets/warner.js new file mode 100644 index 0000000..3f6f5d0 --- /dev/null +++ b/dev/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/dev/changelog/index.html b/dev/changelog/index.html new file mode 100644 index 0000000..4bf321a --- /dev/null +++ b/dev/changelog/index.html @@ -0,0 +1,2 @@ + +Changelog · ManoptExamples.jl

Changelog

All notable changes to this Julia package will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.1.8] – 12/06/2024

Changed

  • use range compatible with Julia 1.6 and hence lower the compatibility entry for Julia again.

[0.1.7] – 07/06/2024

Changed

  • make Manopt.jl a weak dependency and load functions that require parts of it only load as an extension. This makes it easier to use the examples in the tests of Manopt itself.

[0.1.6] – 22/03/2024

Added

  • Hyperparameter optimization example.

[0.1.3] – 11/12/2023

Added

  • Total variation Minimization cost, proxes, and an example
  • Bézier curve cost, gradients, and an example.

[0.1.3] – 16/09/2023

Added

  • Rayleigh Quotient functions added
  • an example illustrating Euclidean gradient/HEssian conversion
  • Add Literature with DocumenterCitations

[0.1.2] – 13/06/2023

Added

  • Update examples to use Quarto
  • Add DC examples

[0.1.1] – 01/03/2023

Added

  • Rosenbrock function and examples

[0.1.0] – 18/02/2023

Added

  • Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested
  • Setup Documentation to provide one example Quarto file for every example objective to illustrate how to use them.
diff --git a/dev/contributing/index.html b/dev/contributing/index.html new file mode 100644 index 0000000..7410140 --- /dev/null +++ b/dev/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

Contributing to Manopt.jl

First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

The following is a set of guidelines to ManoptExamples.jl.

Table of Contents

I just have a question

The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

How can I file an issue?

If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

How can I contribute?

Add an objective

The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

  • cost functions are always of the form cost_ and a fitting name
  • gradient functions are always of the gradient_ and a fitting name, followed by an !

for in-place gradients and by !! if it is a struct that can provide both.

It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

Add an example

If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

Code style

We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

We also follow a few internal conventions:

  • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
  • within a file the structs should come first and functions second. The only exception are constructors for the structs
  • within both blocks an alphabetical order is preferable.
  • The above implies that the mutating variant of a function follows the non-mutating variant.
  • There should be no dangling = signs.
  • Always add a newline between things of different types (struct/method/const).
  • Always add a newline between methods for different functions (including in-place/non-mutating variants).
  • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
  • All import/using/include should be in the main module file.
  • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
  • the Quarto Markdown files are excluded from this formatting.
diff --git a/dev/data/index.html b/dev/data/index.html new file mode 100644 index 0000000..ea9ab9d --- /dev/null +++ b/dev/data/index.html @@ -0,0 +1,13 @@ + +Data · ManoptExamples.jl

Data sets

Signals on manifolds

ManoptExamples.LemniscateMethod
Lemniscate(t::Float; kwargs...)
+Lemniscate(n::integer; interval=[0.0, 2π], kwargs...)

generate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.

To be precise on the manifold M we use the tangent space at p and generate the curve

\[γ(t) \frac{a}{}\sin^2(t) + 1 \begin{pmatrix} \cos(t) \\ \cos(t)\sin(t) \end{pmatrix}\]

in the plane spanned by X and Y in the tangent space. Note that this curve is $2π$-periodic and a is the half-width of the curve.

To reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.

THe second variant generates n points equispaced in ìnterval` and calls the first variant.

Keywords

  • manifold - (Sphere(2)) the manifold to build the lemniscate on
  • p - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate
  • a – (π/2.0) half-width of the Lemniscate
  • X – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.
  • Y – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.
source
ManoptExamples.artificial_S1_signalFunction
artificial_S1_signal([pts=500])

generate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to ``[BLSW14].

Optional

  • pts: (500) number of points to sample the function
source
ManoptExamples.artificial_S1_signalMethod
artificial_S1_signal(x)

evaluate the example signal $f(x), x ∈ [0,1]$, of phase-valued data introduces in Sec. 5.1 of [BLSW14] for values outside that interval, this Signal is missing.

source
ManoptExamples.artificial_S1_slope_signalFunction
artificial_S1_slope_signal([pts=500, slope=4.])

Creates a Signal of (phase-valued) data represented on the Circle with increasing slope.

Optional

  • pts: (500) number of points to sample the function.
  • slope: (4.0) initial slope that gets increased afterwards

This data set was introduced for the numerical examples in [BLSW14]

source
ManoptExamples.artificial_S2_composite_Bezier_curveMethod
artificial_S2_composite_Bezier_curve()

Generate a composite Bézier curve on the [BG18].

It consists of 4 egments connecting the points

\[\mathbf d_0 = \begin{pmatrix} 0\\0\\1\end{pmatrix},\quad +\mathbf d_1 = \begin{pmatrix} 0\\-1\\0\end{pmatrix},\quad +\mathbf d_2 = \begin{pmatrix} -1\\0\\0\end{pmatrix},\text{ and } +\mathbf d_3 = \begin{pmatrix} 0\\0\\-1\end{pmatrix}.\]

where instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be $C^1$.

We define

\[X_0 = \frac{π}{8\sqrt{2}}\begin{pmatrix}1\\-1\\0\end{pmatrix},\quad +X_1 = \frac{π}{4\sqrt{2}}\begin{pmatrix}1\\0\\1\end{pmatrix},\quad +X_2 = \frac{π}{4\sqrt{2}}\begin{pmatrix}0\\1\\-1\end{pmatrix},\text{ and } +X_3 = \frac{π}{8\sqrt{2}}\begin{pmatrix}-1\\1\\0\end{pmatrix},\]

where we defined each $X_i \in T_{d_i}\mathbb S^2$. We defined three BezierSegments

of cubic Bézier curves as follows

\[\begin{align*} +b_{0,0} &= d_0, \quad & b_{1,0} &= \exp_{d_0}X_0, \quad & b_{2,0} &= \exp_{d_1}X_1, \quad & b_{3,0} &= d_1\\ +b_{0,1} &= d_1, \quad & b_{1,1} &= \exp_{d_1}(-X_1), \quad & b_{2,1} &= \exp_{d_2}X_2, \quad & b_{3,1} &= d_2\\ +b_{0,2} &= d_2, \quad & b_{1,1} &= \exp_{d_2}(-X_2), \quad & b_{2,2} &= \exp_{d_3}X_3, \quad & b_{3,2} &= d_3. +\end{align*}\]

source

images on manifolds

ManoptExamples.artificial_S2_rotation_imageFunction
artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])

Create an image with a rotation on each axis as a parametrization.

Optional Parameters

  • pts: (64) number of pixels along one dimension
  • rotations: ((.5,.5)) number of total rotations performed on the axes.

This dataset was used in the numerical example of Section 5.1 of [BBSW16].

source
ManoptExamples.artificial_SPD_imageFunction
artificial_SPD_image([pts=64, stepsize=1.5])

create an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.

This dataset was used in the numerical example of Section 5.2 of [BBSW16].

source
ManoptExamples.artificial_SPD_image2Function
artificial_SPD_image2([pts=64, fraction=.66])

create an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.

This data set was introduced in the numerical examples of Section of [BPS16]

source

Literature

[BBSW16]
M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
[BG18]
R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
[BLSW14]
R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
[BPS16]
R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
[LNPS17]
F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
diff --git a/dev/examples/Bezier-curves/index.html b/dev/examples/Bezier-curves/index.html new file mode 100644 index 0000000..5e62c7a --- /dev/null +++ b/dev/examples/Bezier-curves/index.html @@ -0,0 +1,68 @@ + +Minimizing the Acceleration of Bézier Curves on the Sphere · ManoptExamples.jl

Minimizing the Acceleration of Bézier Curves on the Sphere

Ronny Bergmann 2023-06-06

using Manifolds, Manopt, ManoptExamples

Introduction

Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as

function bezier(M::AbstractManifold, t, pts::NTuple)
+    p = bezier(M, t, pts[1:(end - 1)])
+    q = bezier(M, t, pts[2:end])
+    return shortest_geodesic(M, p, q, t)
+end
+function bezier(M::AbstractManifold, t, pts::NTuple{2})
+    return shortest_geodesic(M, pts[1], pts[2], t)
+end

which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.

In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].

using ManoptExamples:
+    artificial_S2_composite_Bezier_curve,
+    BezierSegment,
+    de_Casteljau,
+    get_Bezier_degrees,
+    get_Bezier_inner_points,
+    get_Bezier_junctions,
+    get_Bezier_junction_tangent_vectors,
+    get_Bezier_points,
+    get_Bezier_segments,
+    grad_L2_acceleration_Bezier,
+    L2_acceleration_Bezier

This notebook reproduces the example form Section 5.2 in [BG18].

The following image illustrates how the de-Casteljau algorithm works for one segment.

A Bezier segment and illustration of the de-Casteljau algorithm

Approximating data by a curve with minimal accelartion

We first load our example data

M = Sphere(2)
+B = artificial_S2_composite_Bezier_curve()
+data_points = get_Bezier_junctions(M, B)

Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.

The original curve

We continue to recude the points, since we “know” sme points due to the $C^1$ property: the second to last control point of the first segment $b_{0,2}$, the joint junction point connecting both segments $b_{0,3}=b_{1,0}$ and the second control point $b_{1,1}$ of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.

We can use this reduced form as the variable to optimize and the one from the data as our initial point.

pB = get_Bezier_points(M, B, :differentiable)
+N = PowerManifold(M, NestedPowerRepresentation(), length(pB))
PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)

And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the $λ=10$

curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient
+λ = 10.0
+function f(M, pB)
+    return L2_acceleration_Bezier(
+        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
+    )
+end
+function grad_f(M, pB)
+    return grad_L2_acceleration_Bezier(
+        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
+    )
+end
grad_f (generic function with 1 method)

Then we can optimize

x0 = pB
+pB_opt = gradient_descent(
+    N,
+    f,
+    grad_f,
+    x0;
+    stepsize=ArmijoLinesearch(N;
+        initial_stepsize=1.0,
+        retraction_method=ExponentialRetraction(),
+        contraction_factor=0.5,
+        sufficient_decrease=0.001,
+    ),
+    stopping_criterion=StopWhenChangeLess(1e-5) |
+                       StopWhenGradientNormLess(1e-7) |
+                       StopAfterIteration(300),
+    debug=[
+        :Iteration,
+        " | ",
+        :Cost,
+        " | ",
+        DebugGradientNorm(),
+        " | ",
+        DebugStepsize(),
+        " | ",
+        :Change,
+        "\n",
+        25,
+        :Stop,
+    ],
+);
Initial  | f(x): 10.647244 |  |  | 
+# 25     | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281
+# 50     | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780
+# 75     | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590
+# 100    | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745
+The algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.

And we can again look at the result

The result looks as

The resulting curve

where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.

[ABBR23]
S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
[BG18]
R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
[PN07]
T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
diff --git a/dev/examples/Difference-of-Convex-Benchmark/index.html b/dev/examples/Difference-of-Convex-Benchmark/index.html new file mode 100644 index 0000000..a38f9a2 --- /dev/null +++ b/dev/examples/Difference-of-Convex-Benchmark/index.html @@ -0,0 +1,165 @@ + +A Benchmark · ManoptExamples.jl

Benchmark of the Difference of Convex Algorithms

Ronny Bergmann 2023-06-06

Introduction

In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.

\[\operatorname*{arg\,min}_{p\in\mathcal M}\ \ g(p) - h(p)\]

where $g,h\colon \mathcal M \to \mathbb R$ are geodesically convex function on the Riemannian manifold $\mathcal M$.

using LinearAlgebra, Random, Statistics, BenchmarkTools
+using Manifolds, Manopt, ManoptExamples
+using NamedColors, Plots
+Random.seed!(42)

and we load a few nice colors

paul_tol = load_paul_tol()
+indigo = paul_tol["mutedindigo"]
+teal = paul_tol["mutedteal"]

The DC Problem

We start with defining the two convex functions $g,h$ and their gradients as well as the DC problem $f$ and its gradient for the problem

\[ \operatorname*{arg\,min}_{p\in\mathcal M}\ \ \bigl( \log\bigr(\det(p)\bigr)\bigr)^4 - \bigl(\log \det(p) \bigr)^2.\]

where the critical points obtain a functional value of $-\frac{1}{4}$.

where $\mathcal M$ is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.

We first define the corresponding functions

g(M, p) = log(det(p))^4
+h(M, p) = log(det(p))^2
+f(M, p) = g(M, p) - h(M, p)

and their gradients

grad_g(M, p) = 4 * (log(det(p)))^3 * p
+grad_h(M, p) = 2 * log(det(p)) * p
+grad_f(M, p) = grad_g(M, p) - grad_h(M, p)

which we can use to verify that the gradients of $g$ and $h$ are correct. We use for that

n = 6
+M = SymmetricPositiveDefinite(n)
+p0 = log(n) * Matrix{Float64}(I, n, n);
+X0 = 1 / n * Matrix{Float64}(I, n, n);

to tall both checks

check_gradient(M, g, grad_g, p0, X0; plot=true)

and

check_gradient(M, h, grad_h, p0, X0; plot=true)

which both pass the test. We continue to define their inplace variants

function grad_g!(M, X, p)
+    copyto!(M, X, p)
+    X .*= 4 * (log(det(p)))^3
+    return X
+end
+function grad_h!(M, X, p)
+    copyto!(M, X, p)
+    X .*= 2 * (log(det(p)))
+    return X
+end
+function grad_f!(M, X, p)
+    grad_g!(M, X, p)
+    Y = copy(M, p, X)
+    grad_h!(M, Y, p)
+    X .-= Y
+    return X
+end

And compare times for both algorithms, with a bit of debug output.

@time p_min_dca = difference_of_convex_algorithm(
+    M,
+    f,
+    g,
+    grad_h!,
+    p0;
+    grad_g=grad_g!,
+    gradient=grad_f!,
+    evaluation=InplaceEvaluation(),
+    debug=[
+        :Iteration,
+        (:Cost, "f(p): %1.9f"),
+        (:GradientNorm, " |grad_f(p)|: %1.9f"),
+        (:Change, " |δp|: %1.9f"),
+        :Stop,
+        5,
+        "\n",
+    ],
+    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
+    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
+);
Initial f(p): 137.679053470
+# 5     f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127
+# 10    f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103
+# 15    f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574
+# 20    f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011
+The algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.
+  3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)

The cost is

f(M, p_min_dca)
-0.25000000000000006

Similarly the DCPPA performs

@time p_min_dcppa = difference_of_convex_proximal_point(
+    M,
+    grad_h!,
+    p0;
+    g=g,
+    grad_g=grad_g!,
+    λ=i -> 1 / (2 * n),
+    cost=f,
+    gradient=grad_f!,
+    debug=[
+        :Iteration,
+        (:Cost, "f(p): %1.9f"),
+        " ",
+        (:GradientNorm, "|grad_f(p)|: %1.10f"),
+        (:Change, "|δp|: %1.10f"),
+        :Stop,
+        5,
+        "\n",
+    ],
+    evaluation=InplaceEvaluation(),
+    stepsize=ConstantStepsize(1.0),
+    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
+    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
+);
Initial f(p): 137.679053470 
+# 5     f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692
+# 10    f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316
+# 15    f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676
+# 20    f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968
+# 25    f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530
+# 30    f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048
+# 35    f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001
+The algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.
+  1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)

It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost

f(M, p_min_dcppa)
-0.25

Benchmark I: Time comparison

We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test

dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()
+dcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()
+N_max=14
+N = 2:N_max

and run a benchmark for both algorithms

for n in N
+    Mn = SymmetricPositiveDefinite(n)
+    pn = log(n) * Matrix{Float64}(I, n, n)
+    bdca = @benchmark difference_of_convex_algorithm(
+        $Mn,
+        $f,
+        $g,
+        $grad_h!,
+        $pn;
+        grad_g=$grad_g!,
+        gradient=$grad_f!,
+        evaluation=InplaceEvaluation(),
+        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
+        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
+    )
+    dca_benchmarks[n] = bdca
+    bdcppa = @benchmark difference_of_convex_proximal_point(
+        $Mn,
+        $grad_h!,
+        $pn;
+        g=$g,
+        grad_g=$grad_g!,
+        λ=i -> 1 / (2 * n),
+        cost=f,
+        gradient=grad_f!,
+        evaluation=InplaceEvaluation(),
+        stepsize=ConstantStepsize(1.0),
+        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
+        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
+    )
+    dcppa_benchmarks[n] = bdcppa
+end

Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds

dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]
+dca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]
+dcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]
plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Time (sec.)")
+plot!(dims, dca_times; label="DCA", color=indigo, linewidth=2)
+plot!(dims, dcppa_times; label="DCPPA", color=teal, linewidth=2)

Benchmark II: Iterations and cost.

As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.

N2 = [5,10,20,40,80]
+dims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]
+dca_iterations = Dict{Int,Int}()
+dca_costs = Dict{Int,Vector{Float64}}()
+dcppa_iterations = Dict{Int,Int}()
+dcppa_costs = Dict{Int,Vector{Float64}}()
@time for n in N2
+    println(n)
+    Mn = SymmetricPositiveDefinite(n)
+    pn = log(n) * Matrix{Float64}(I,n,n);
+    @time dca_st = difference_of_convex_algorithm(
+        Mn, f, g, grad_h!, pn;
+        grad_g=grad_g!,
+        gradient=grad_f!,
+        evaluation = InplaceEvaluation(),
+        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
+        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
+        record = [:Iteration, :Cost],
+        return_state = true,
+    );
+    dca_costs[n] = get_record(dca_st, :Iteration, :Cost)
+    dca_iterations[n] = length(dca_costs[n])
+    @time dcppa_st = difference_of_convex_proximal_point(
+        Mn, grad_h!, pn;
+        g=g,
+        grad_g=grad_g!,
+        λ = i -> 1/(2*n),
+        cost = f,
+        gradient= grad_f!,
+        evaluation = InplaceEvaluation(),
+        stepsize = ConstantStepsize(1.0),
+        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
+        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
+        record = [:Iteration, :Cost],
+        return_state = true,
+    );
+    dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)
+    dcppa_iterations[n] = length(dcppa_costs[n])
+end

The iterations are like

plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Iterations")
+plot!(dims2, [values(dca_iterations)...]; label="DCA", color=indigo, linewidth=2)
+plot!(dims2, [values(dcppa_iterations)...]; label="DCPPA", color=teal, linewidth=2)

And for the developtment of the cost

where we can see that the DCA needs less iterations than the DCPPA.

Literature

[BFSS23]
R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
[SO15]
J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
diff --git a/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg b/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg new file mode 100644 index 0000000..ca2e758 --- /dev/null +++ b/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg b/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg new file mode 100644 index 0000000..7baeb82 --- /dev/null +++ b/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg b/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..2131b9f --- /dev/null +++ b/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg b/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg new file mode 100644 index 0000000..d51a3c6 --- /dev/null +++ b/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg b/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..3c244f5 --- /dev/null +++ b/dev/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/Difference-of-Convex-Frank-Wolfe/index.html b/dev/examples/Difference-of-Convex-Frank-Wolfe/index.html new file mode 100644 index 0000000..519dc4c --- /dev/null +++ b/dev/examples/Difference-of-Convex-Frank-Wolfe/index.html @@ -0,0 +1,216 @@ + +Frank Wolfe comparison · ManoptExamples.jl

A comparison of the Difference of Convex and Frank Wolfe Algorithm

Ronny Bergmann 2023-11-06

Introduction

In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.

using LinearAlgebra, Random, Statistics, BenchmarkTools
+using ManifoldsBase, Manifolds, Manopt, ManoptExamples
+using NamedColors, Plots

and we load a few nice colors

paul_tol = load_paul_tol()
+indigo = paul_tol["mutedindigo"]
+teal = paul_tol["mutedteal"]

We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices $\mathcal P(n)$ with the affine invariant metric. Let $q_1,\ldots,q_m \in \mathcal P(n)$ be a set of points and $\mu_1,\ldots,\mu_m$ be a set of weights, such that they sum to one. We consider then

\[\operatorname*{arg\,max}_{p\in\mathcal C}\ \ h(p)\]

with

\[h(p) = +\sum_{j=1}^m \mu_j d^2(p,q_i), +\quad \text{ where } +d^2(p,q_i) = \operatorname{tr}\bigl( + \log^2(p^{-\frac{1}{2}}q_jp^{-\frac{1}{2}}) +\big) +\qquad\text{and}\qquad +\mathcal C = \{ p\in {\mathcal M}\ |\ \bar L\preceq p \preceq \bar U \},\]

for a lower bound $L$ and an upper bound $U$ for the matrices in the positive definite sense $A \preceq B \Leftrightarrow (B-A)$ is positive semi-definite

When every one of the weights ${\mu}_1, \ldots {\mu}_m$ are equal, this function $h$ is known as the of the set $\{q_1, \dots, q_m\}$.

And for our example we set

Random.seed!(42)
+n = 20
+m = 100
+M = SymmetricPositiveDefinite(n)
+q = [rand(M) for _ in 1:m];
+w = rand(m)
+w ./=sum(w)

We use as lower and upper bound the arithmetic and geometric mean $L$ and $U$, respectively.

L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )
+U = sum( wi * qi for (wi, qi) in zip(w,q) )

As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use

p0 = (L+U)/2

And we can check that it is feasible

Common Functions

Given $p \in \mathcal M$, $X \in T_p\mathcal M$ on the symmetric positive definite matrices M, this method computes the closed form solution to

\[\operatorname*{arg\,min}_{q\in {\mathcal C}}\ \langle X, \log_p q\rangle + = \operatorname*{arg\,min}_{q\in {\mathcal C}}\ \operatorname{tr}(S\log(YqY))\]

where $\mathcal C = \{ q | L \preceq q \preceq U \}$, $S = p^{-1/2}Xp^{-1/2}$, and $Y=p^{-1/2}$.

The solution is given by $Z=X^{-1}Q\bigl( P^{\mathrm{T}}[-\operatorname{sgn}(D)]_{+}P+\hat{L}\bigr)Q^{\mathrm{T}}X^{-1}$,@ where $S=QDQ^{\mathrm{T}}$ is a diagonalization of $S$, $\hat{U}-\hat{L}=P^{\mathrm{T}}P$ with $\hat{L}=Q^{\mathrm{T}}XLXQ$ and $\hat{U}=Q^{\mathrm{T}}XUXQ$, where $[-\mbox{sgn}(D)]_{+}$ is the diagonal matrix

\[\operatorname{diag}\bigl( + [-\operatorname{sgn}(d_{11})]_{+}, \ldots, [-\operatorname{sgn}(d_{nn})]_{+} +\bigr)\]

and $D=(d_{ij})$.

@doc raw"""
+    closed_form_solution!(M, q, L, U, p X)
+
+Compute the closeed form solution of the constraint sub problem in place of ``q``.
+"""
+function closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)
+    # extract p^1/2 and p^{-1/2}
+    (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)
+    # Compute D & Q
+    e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk  = QDQ'
+    D = Diagonal(1.0 .* (e2.values .< 0))
+    Q = e2.vectors
+    #println(p)
+    Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q
+    Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q
+    P = cholesky(Hermitian(Uprime - Lprime))
+    z = P.U' * D * P.U + Lprime
+    copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)
+    return q
+end

The Difference of Convex Formulation

We use $g(p) = \iota_{\mathcal C}(p)$ as the indicator funtion of the set $\mathcal C$. We use

function is_pos_def(p; atol=5e-13)
+    e = eigen(Symmetric(p))
+    return all((e.values .+ atol) .> 0)
+end
+function g(p, L, U)
+    return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf
+end
+h(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )

So we can first check that p0 is feasible

g(p0,L,U) == 0.0
true

Now setting

\[\operatorname*{arg\,min}_{p\in\mathcal M}\ g(p) - h(p)\]

We look for a maximum of $h$, where $g$ is minimal, i.e. $g(p)$ is zero or in other words $p \in \mathcal C$.

The gradient of $h$ can also be implemented in closed form as

grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))
+function grad_h!(M, X, p, w, q)
+    Y = copy(M, p, X)
+    zero_vector!(M, X, p)
+    for (wi, qi) in zip(w,q)
+        log!(M, Y, p, qi)
+        Y .*= - 2.0*wi
+        X .+= Y
+    end
+    return X
+end

And we can further define the cost, which will just be $+\infty$ outside of $\mathcal C$. We define

f_dc(M, p) = g(p, L, U) - h(M, p, w, q)
+grad_h!(M, X, p) = grad_h!(M, X, p, w, q)
+function grad_f_dc!(M,X, p)
+    grad_h!(M, X, p, w, q)
+    X .*= -1.0
+    return X
+end

Here we can omit the gradient of $g$ in the definition of $\operatorname{grad} f$, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of $\mathcal C$.

As the last step, we can provide the closed form solver for the DC sub problem given at iteration $k$ by

\[\operatorname*{arg\,min}_{p\in \mathcal C}\ + \big\langle -\operatorname{grad} h(p^{(k)}), \exp^{-1}_{p^{(k)}}p\big\rangle.\]

Which we con compute

function dc_sub_solution!(M, q, p, X)
+    closed_form_solution!(M, q, L, U, p, -X)
+    return q
+end

For safety, we might want to avoid ending up at the boundary of $\mathcal C$. That is we reduce the distance we walk towards the solution $q$ a bit.

function dc_sub_solution_safe!(M, q, p, X)
+    p_last = copy(M,p) # since p=q might be in place
+    closed_form_solution!(M, q, L, U, p, -X)
+    q_orig = copy(M,q) # since we do the following in place of q
+    a = minimum(real.(eigen(q-L).values))
+    b = minimum(real.(eigen(U-q).values))
+    s = 1.0
+    d = distance(M, p_last, q_orig);
+    # if we are close to zero, we reduce faster.
+    α = d < 1/(n^2) ? 0.66 : 0.9995;
+    i=0
+    while (a < 0) || (b < 0)
+        s *= α
+        shortest_geodesic!(M, q, p_last, q_orig, s)
+        a = minimum(real.(eigen(q-L).values))
+        b = minimum(real.(eigen(U-q).values))
+        #println("$i a: $a, b = $b with s=$s")
+        i=i+1
+        if (i>100) # safety fallback
+            #@warn " $i steps where not enough $s ($α)\n$a $b\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs"
+            qe = eigen(q)
+            if a < 0
+                qe.values .+= min(1e-8, n*abs(min(a,b)))
+            else
+                qe.values .-= min(1e-8, n*abs(min(a,b)))
+            end
+            q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'
+            a = minimum(real.(eigen(q-L).values))
+            b = minimum(real.(eigen(U-q).values))
+            return q
+        end
+    end
+    return q
+end

The DoC solver run

Let’s compare both methods when they have the same stopping criteria

@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;
+    gradient=grad_f_dc!,
+    sub_problem=dc_sub_solution_safe!,
+    evaluation=InplaceEvaluation(),
+    stopping_criterion = StopAfterIteration(300) |
+        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
+    debug = [
+        (:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "),
+        (:GradientNorm, " |grad f(p)|: %0.8f "),
+        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
+        30, :Stop, "\n"],
+    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
+    return_state=true,
+)
Initial F(p): -0.77661458292831
+At iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.
+ 16.161776 seconds (17.17 M allocations: 1.670 GiB, 1.83% gc time, 93.45% compilation time)
+
+# Solver state for `Manopt.jl`s Difference of Convex Algorithm
+After 23 iterations
+
+## Parameters
+* sub solver state:
+    | InplaceEvaluation()
+
+## Stopping criterion
+
+Stop When _one_ of the following are fulfilled:
+    Max Iteration 300:  not reached
+    |Δp| < 1.0e-14: not reached
+    |Δgrad f| < 1.0e-9: reached
+Overall: reached
+This indicates convergence: No
+
+## Debug
+    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 30]
+    :Stop = :Stop
+
+## Record
+(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

Let’s extract the final point and look at its cost

p1_dc = get_solver_result(state1_dc);
+f_dc(M, p1_dc)
-0.784425242474807

As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.

[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]
2-element Vector{Tuple{Float64, Float64}}:
+ (1.1886583723800445e-12, 0.06669240322431051)
+ (1.3411042178831775e-5, 0.0671353506908023)

For the statistics we extract the recordings from the state

Define the Frank-Wolfe functions

For Frank wolfe, the cost is just defined as $-h(p)$ but the minimisation is constraint to $\mathcal C$, which is enfored by the oracle.

f_fw(M, p) = -h(M, p, w, q)
+function grad_f_fw!(M,X, p)
+    grad_h!(M, X, p, w, q)
+    X .*= -1.0
+    return X
+end
+oracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)

The FW Solver Run

Similarly we can run the Frank-Wolfe algorithm with

@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;
+    sub_problem=oracle_fw!,
+    evaluation=InplaceEvaluation(),
+    stopping_criterion = StopAfterIteration(10^4) |
+        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
+    debug = [
+        (:Iteration, "# %-8d "), :Cost, (:Change, " |Δp|: %0.14f "),
+        (:GradientNorm, " |grad f(p)|: %0.8f "),
+        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
+        2*10^3, :Stop, "\n"],
+    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
+    return_state=true,
+)
Initial f(x): -0.776615
+# 2000     f(x): -0.784420 |Δp|: 0.04611942377596  |grad f(p)|: 0.17693408  |Δgrad f(p)|: 0.17555618
+# 4000     f(x): -0.784421 |Δp|: 0.00372201632005  |grad f(p)|: 0.17694619  |Δgrad f(p)|: 0.00749427
+# 6000     f(x): -0.784422 |Δp|: 0.00205683506784  |grad f(p)|: 0.17695204  |Δgrad f(p)|: 0.00414088
+# 8000     f(x): -0.784422 |Δp|: 0.00140675676260  |grad f(p)|: 0.17695565  |Δgrad f(p)|: 0.00283200
+# 10000    f(x): -0.784422 |Δp|: 0.00106177438611  |grad f(p)|: 0.17695815  |Δgrad f(p)|: 0.00213746
+The algorithm reached its maximal number of iterations (10000).
+152.781466 seconds (55.53 M allocations: 94.006 GiB, 2.12% gc time, 0.57% compilation time)
+
+# Solver state for `Manopt.jl`s Frank Wolfe Method
+After 10000 iterations
+
+## Parameters
+* inverse retraction method: LogarithmicInverseRetraction()
+* retraction method: ExponentialRetraction()
+* sub solver state:
+    | InplaceEvaluation()
+
+## Stepsize
+DecreasingStepsize(; length=2.0,  factor=1.0,  subtrahend=0.0,  shift=2)
+
+## Stopping criterion
+
+Stop When _one_ of the following are fulfilled:
+    Max Iteration 10000:    reached
+    |Δp| < 1.0e-14: not reached
+    |Δgrad f| < 1.0e-9: not reached
+Overall: reached
+This indicates convergence: No
+
+## Debug
+    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "f(x): %f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 2000]
+    :Stop = :Stop
+
+## Record
+(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

And we take a look at this result as well

p1_fw = get_solver_result(state1_fw);
+f_dc(M, p1_fw)
-0.7844220281765162

And its feasibility

[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]
2-element Vector{Tuple{Float64, Float64}}:
+ (4.904818928410655e-10, 0.06659173821656107)
+ (3.245654983213335e-5, 0.06713970236096602)

Statistics

We extract the recorded values

# DoC
+iter1_dc = get_record(state1_dc, :Iteration, :Iteration)
+pk_dc = get_record(state1_dc,:Iteration,:Iterate)
+costs1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))
+dc_min = minimum(costs1_dc)
+# FW
+iter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]
+pk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]
+costs1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))

And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.

fig = plot(;
+    legend=:topright,
+    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x_k)-f^*$ (log. scale)",
+    yaxis=:log,
+    ylims=(1e-8, 10^-2),
+    xaxis=:log,
+    xlims=(1,10^4),
+)
+plot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label="Difference of Convex")
+plot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label="Frank-Wolfe")

This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.

On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.

Literature

[BFSS23]
R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
[WS22]
M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
diff --git a/dev/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg b/dev/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg new file mode 100644 index 0000000..85998a9 --- /dev/null +++ b/dev/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/Difference-of-Convex-Rosenbrock/index.html b/dev/examples/Difference-of-Convex-Rosenbrock/index.html new file mode 100644 index 0000000..108fb69 --- /dev/null +++ b/dev/examples/Difference-of-Convex-Rosenbrock/index.html @@ -0,0 +1,339 @@ + +Rosenbrock Metric · ManoptExamples.jl

Solving Rosenbrock with the Difference of Convex Algorithm

Ronny Bergmann 2023-06-06

Introduction

This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.

Both the Rosenbrock problem

\[ \operatorname*{argmin}_{x\in ℝ^2} a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2,\]

where $a,b>0$ and usually $b=1$ and $a \gg b$, we know the minimizer $x^* = (b,b^2)^\mathrm{T}$, and also the (Euclidean) gradient

\[\nabla f(x) = + \begin{pmatrix} + 4a(x_1^2-x_2)\\ -2a(x_1^2-x_2) + \end{pmatrix} + + + \begin{pmatrix} + 2(x_1-b)\\ 0 + \end{pmatrix}.\]

They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.

Furthermore, the RosenbrockMetric can be used on $ℝ^2$, that is

\[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix},\]

In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.

  1. The Euclidean Gradient
  2. The Riemannian gradient descent with respect to the RosenbrockMetric
  3. The Euclidean Difference of Convex Algorithm
  4. The Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric

Where we obtain a difference of convex problem by writing

\[f(x) = a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2 + = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 - \bigl(x_1-b\bigr)^2\]

that is

\[g(x) = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 \quad\text{ and }\quad h(x) = \bigl(x_1-b\bigr)^2\]

using LinearAlgebra, Random, Statistics
+using Manifolds, Manopt, ManoptExamples
+using NamedColors, Plots
+import Manopt: set_manopt_parameter!
+Random.seed!(42)
paul_tol = load_paul_tol()
+indigo = paul_tol["mutedindigo"]
+green = paul_tol["mutedgreen"]
+sand = paul_tol["mutedsand"]
+teal = paul_tol["mutedteal"]
+grey = paul_tol["mutedgrey"]

To emphasize the effect, we choose a quite large value of a.

a = 2*10^5
+b = 1

and use the starting point and a direction to check gradients

p0 = [0.1, 0.2]

The Euclidean Gradient Descent.

For the Euclidean gradient we can just use the same approach as in the Rosenbrock example

M = ℝ^2
+f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
+∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)

define a common debug vector

debug_vec = [
+        (:Iteration, "# %-8d "),
+        (:Cost, "F(x): %1.4e"),
+        " ",
+        (:Change, "|δp|: %1.4e | "),
+        (:GradientNorm, "|grad f|: %1.6e"),
+        :Stop,
+        "\n",
+    ]

and call the gradient descent algorithm

Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;
+    evaluation=InplaceEvaluation(),
+    debug=[debug_vec...,10^7],
+    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
+    record=[:Iteration, :Cost],
+    return_state=true,
+)
Initial F(x): 7.2208e+03 
+# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03
+# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04
+# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06
+# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08
+# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10
+The algorithm performed a step with a change (0.0) less than 1.0e-16.
+
+# Solver state for `Manopt.jl`s Gradient Descent
+After 53073227 iterations
+
+## Parameters
+* retraction method: ExponentialRetraction()
+
+## Stepsize
+ArmijoLinesearch() with keyword parameters
+  * initial_stepsize    = 1.0
+  * retraction_method   = ExponentialRetraction()
+  * contraction_factor  = 0.95
+  * sufficient_decrease = 0.1
+
+## Stopping criterion
+
+Stop When _one_ of the following are fulfilled:
+    Max Iteration 100000000:    not reached
+    |Δp| < 1.0e-16: reached
+Overall: reached
+This indicates convergence: Yes
+
+## Debug
+    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000000]
+    :Stop = :Stop
+
+## Record
+(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

The Riemannian Gradient Descent.

For the Riemannian case, we define

M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())
MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())

and the gradient is now adopted to the new metric

function grad_f!(M, X, p)
+    ∇f!!(M, X, p)
+    riemannian_gradient!(M, X, p, X)
+    return X
+end
+function grad_f(M, p)
+    X = zero_vector(M, p)
+    return grad_f!(M, X, p)
+end
R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;
+    evaluation=InplaceEvaluation(),
+    debug=[debug_vec...,10^6],
+    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
+    record=[:Iteration, :Cost],
+    return_state=true,
+)
Initial F(x): 7.2208e+03 
+# 1000000  F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04
+# 2000000  F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09
+The algorithm performed a step with a change (0.0) less than 1.0e-16.
+
+# Solver state for `Manopt.jl`s Gradient Descent
+After 2443750 iterations
+
+## Parameters
+* retraction method: ExponentialRetraction()
+
+## Stepsize
+ArmijoLinesearch() with keyword parameters
+  * initial_stepsize    = 1.0
+  * retraction_method   = ExponentialRetraction()
+  * contraction_factor  = 0.95
+  * sufficient_decrease = 0.1
+
+## Stopping criterion
+
+Stop When _one_ of the following are fulfilled:
+    Max Iteration 100000000:    not reached
+    |Δp| < 1.0e-16: reached
+Overall: reached
+This indicates convergence: Yes
+
+## Debug
+    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
+    :Stop = :Stop
+
+## Record
+(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

The Euclidean Difference of Convex

For the convex case, we have to first introduce the two parts of the cost.

f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;
+f2(M, p; a=100, b=1) = (p[1] - b[1])^2;
+g(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)
+h(M, p; a=100, b=1) = f2(M, p; a=a, b=b)

and their (Euclidan) gradients

function ∇h!(M, X, p; a=100, b=1)
+    X[1] = 2*(p[1]-b)
+    X[2] = 0
+    return X
+end
+function ∇h(M, p; a=100, b=1)
+    X = zero(p)
+    ∇h!(M, X, p; a=a, b=b)
+    return X
+end
+function ∇g!(M, X, p; a=100, b=1)
+    X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)
+    X[2] = -2*a*(p[1]^2-p[2])
+    return X
+end
+function ∇g(M, p; a=100, b=1)
+    X = zero(p)
+    ∇g!(M, X, p; a=a, b=b)
+    return X
+end

and we define for convenience

docE_g(M, p) = g(M, p; a=a, b=b)
+docE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)
+docE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)
+docE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)
+function docE_∇f!(M, X, p)
+  Y = zero_vector(M, p)
+  docE_∇g!(M, X, p)
+  docE_∇h!(M, Y, p)
+  X .-= Y
+  return X
+end

Then we call the difference of convex algorithm on Eucldiean space $ℝ^2$.

E_doc_state = difference_of_convex_algorithm(
+    M, docE_f, docE_g, docE_∇h!, p0;
+    gradient=docE_∇f!,
+    grad_g = docE_∇g!,
+    debug=[debug_vec..., 10^4],
+    evaluation=InplaceEvaluation(),
+    record=[:Iteration, :Cost],
+    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
+    sub_hess=nothing, # Use gradient descent
+    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
+    return_state=true,
+)
Initial F(x): 7.2208e+03 
+# 10000    F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04
+# 20000    F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08
+The algorithm performed a step with a change (0.0) less than 1.0e-16.
+
+# Solver state for `Manopt.jl`s Difference of Convex Algorithm
+After 26549 iterations
+
+## Parameters
+* sub solver state:
+    | # Solver state for `Manopt.jl`s Gradient Descent
+    | After 2000 iterations
+    | 
+    | ## Parameters
+    | * retraction method: ExponentialRetraction()
+    | 
+    | ## Stepsize
+    | ArmijoLinesearch() with keyword parameters
+    |   * initial_stepsize    = 1.0
+    |   * retraction_method   = ExponentialRetraction()
+    |   * contraction_factor  = 0.95
+    |   * sufficient_decrease = 0.1
+    | 
+    | ## Stopping criterion
+    | 
+    | Stop When _one_ of the following are fulfilled:
+    |     Max Iteration 2000:   reached
+    |     |grad f| < 1.0e-16: not reached
+    | Overall: reached
+    | This indicates convergence: No
+
+## Stopping criterion
+
+Stop When _one_ of the following are fulfilled:
+    Max Iteration 100000000:    not reached
+    |Δp| < 1.0e-16: reached
+Overall: reached
+This indicates convergence: Yes
+
+## Debug
+    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000]
+    :Stop = :Stop
+
+## Record
+(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

The Riemannian Difference of Convex

We first have to again defined the gradients with respect to the new metric

function grad_h!(M, X, p; a=100, b=1)
+    ∇h!(M, X, p; a=a, b=b)
+    riemannian_gradient!(M, X, p, X)
+    return X
+end
+function grad_h(M, p; a=100, b=1)
+    X = zero(p)
+    grad_h!(M, X, p; a=a, b=b)
+    return X
+end
+function grad_g!(M, X, p; a=100, b=1)
+    ∇g!(M, X, p; a=a,b=b)
+    riemannian_gradient!(M, X, p, X)
+    return X
+end
+function grad_g(M, p; a=100, b=1)
+    X = zero(p)
+    grad_g!(M, X, p; a=a, b=b)
+    return X
+end

While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For $X \in ∂h(p^{(k)})$ the sunproblem top determine $p^{(k+1)}$ reads

\[\operatorname*{argmin}_{p\in\mathcal M} g(p) - \langle X, \log_{p^{(k)}}p\rangle\]

for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with $X = \operatorname{grad} h(p^{(k)})$ that

\[\phi(p) = g(p) - \langle X, \log_{p^{(k)}}p\rangle += a\bigl( p_{1}^2-p_{2}\bigr)^2 + + 2\bigl(p_{1}-b\bigr)^2 - 2(p^{(k)}_1-b)p_1 + 2(p^{(k)}_1-b)p^{(k)}_1,\]

its Euclidean gradient reads

\[\operatorname{grad}\phi(p) = + \nabla \varphi(p) + = \begin{pmatrix} + 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^{(k)}_1-b)\\ + -2a(p_1^2-p_2) + \end{pmatrix}\]

where we can again employ the gradient conversion from before to obtain the Riemannian gradient.

mutable struct SubGrad{P,T,V}
+    pk::P
+    Xk::T
+    a::V
+    b::V
+end
+function (ϕ::SubGrad)(M, p)
+    X = zero_vector(M, p)
+    ϕ(M, X, p)
+    return X
+end
+function (ϕ::SubGrad)(M, X, p)
+    X .= [
+        4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),
+        -2 * ϕ.a * (p[1]^2 - p[2]),
+    ]
+    riemannian_gradient!(M, X, p, X) # convert
+    return X
+end

And in orer to update the subsolvers gradient correctly, we have to overwrite

set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)
+set_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)

And we again introduce for ease of use

docR_g(M, p) = g(M, p; a=a, b=b)
+docR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)
+docR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)
+docR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)
+function docR_grad_f!(M, X, p)
+    Y = zero_vector(M, p)
+    docR_grad_g!(M, X, p)
+    docR_grad_h!(M, Y, p)
+    X .-= Y
+    return X
+end
+docR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)

Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.

R_doc_state = difference_of_convex_algorithm(
+    M_rb, docR_f, docR_g, docR_grad_h!, p0;
+    gradient=docR_grad_f!,
+    grad_g = docR_grad_g!,
+    debug=[debug_vec..., 10^6],
+    evaluation=InplaceEvaluation(),
+    record=[:Iteration, :Cost],
+    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
+    sub_grad=docR_sub_grad,
+    sub_hess = nothing, # Use gradient descent
+    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
+    return_state=true,
+)
Initial F(x): 7.2208e+03 
+The algorithm performed a step with a change (0.0) less than 1.0e-16.
+
+# Solver state for `Manopt.jl`s Difference of Convex Algorithm
+After 1235 iterations
+
+## Parameters
+* sub solver state:
+    | # Solver state for `Manopt.jl`s Gradient Descent
+    | After 2000 iterations
+    | 
+    | ## Parameters
+    | * retraction method: ExponentialRetraction()
+    | 
+    | ## Stepsize
+    | ArmijoLinesearch() with keyword parameters
+    |   * initial_stepsize    = 1.0
+    |   * retraction_method   = ExponentialRetraction()
+    |   * contraction_factor  = 0.95
+    |   * sufficient_decrease = 0.1
+    | 
+    | ## Stopping criterion
+    | 
+    | Stop When _one_ of the following are fulfilled:
+    |     Max Iteration 2000:   reached
+    |     |grad f| < 1.0e-16: not reached
+    | Overall: reached
+    | This indicates convergence: No
+
+## Stopping criterion
+
+Stop When _one_ of the following are fulfilled:
+    Max Iteration 100000000:    not reached
+    |Δp| < 1.0e-16: reached
+Overall: reached
+This indicates convergence: Yes
+
+## Debug
+    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
+    :Stop = :Stop
+
+## Record
+(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

Comparison in Iterations

fig = plot(;
+    legend=:topright,
+    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x)$ (log. scale)",
+    yaxis=:log,
+    ylims=(1e-16, 5*1e5),
+    xaxis=:log,
+    xlims=(1,10^8),
+)
+scatter!(fig, [1,], [f(M,p0),], label=raw"$f(p_0)$", markercolor=grey)
+egi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries
+egc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries
+plot!(fig, egi, egc, color=teal, label="Euclidean GD")
+#
+rgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries
+rgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries
+plot!(fig, rgi, rgc, color=indigo, label="Riemannian GD")
+#
+edi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries
+edc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries
+plot!(fig, edi, edc, color=sand, label="Euclidean DoC")
+#
+rdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries
+rdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries
+plot!(fig, rdi, rdc, color=green, label="Riemannian DoC")

And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.

Literature

[BFSS23]
R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
diff --git a/dev/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg b/dev/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..9417ba6 --- /dev/null +++ b/dev/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/HyperparameterOptimization/index.html b/dev/examples/HyperparameterOptimization/index.html new file mode 100644 index 0000000..d4ae009 --- /dev/null +++ b/dev/examples/HyperparameterOptimization/index.html @@ -0,0 +1,332 @@ + +Hyperparameter optimziation · ManoptExamples.jl

Hyperparameter optimization

Mateusz Baran 2024-08-03

Introduction

This example shows how to automatically select the best values of hyperparameters of optimization procedures such as retraction, vector transport, size of memory in L-BFGS or line search coefficients. Hyperparameter optimization relies on the Optuna [ASY+19] Python library because it is much more advanced than similar Julia projects, offering Bayesian optimization with conditional hyperparameters and early stopping.

General definitions

Here are some general definitions that you will most likely be able to directly use for your problem without any changes. Just remember to install optuna, for example using CondaPkg Julia library.

using Manifolds, Manopt
+using PythonCall
+using BenchmarkTools
+using LineSearches
+
+# This script requires optuna to be available through PythonCall
+# You can install it for example using
+# using CondaPkg
+# ]conda add optuna
+
+optuna = pyimport("optuna")
+
+norm_inf(M::AbstractManifold, p, X) = norm(X, Inf)
+
+# TTsuggest_ structs collect data from a calibrating optimization run
+# that is handled by compute_pruning_losses function
+
+struct TTsuggest_int
+    suggestions::Dict{String,Int}
+end
+function (s::TTsuggest_int)(name::String, a, b)
+    return s.suggestions[name]
+end
+struct TTsuggest_float
+    suggestions::Dict{String,Float64}
+end
+function (s::TTsuggest_float)(name::String, a, b; log::Bool=false)
+    return s.suggestions[name]
+end
+struct TTsuggest_categorical
+    suggestions::Dict{String,Any}
+end
+function (s::TTsuggest_categorical)(name::String, vals)
+    return s.suggestions[name]
+end
+struct TTreport
+    reported_vals::Vector{Float64}
+end
+function (r::TTreport)(val, i)
+    return push!(r.reported_vals, val)
+end
+struct TTshould_prune end
+(::TTshould_prune)() = Py(false)
+struct TracingTrial
+    suggest_int::TTsuggest_int
+    suggest_float::TTsuggest_float
+    suggest_categorical::TTsuggest_categorical
+    report::TTreport
+    should_prune::TTshould_prune
+end
+
+function compute_pruning_losses(
+    od,
+    int_suggestions::Dict{String,Int},
+    float_suggestions::Dict{String,Float64},
+    categorical_suggestions::Dict{String,Int},
+)
+    tt = TracingTrial(
+        TTsuggest_int(int_suggestions),
+        TTsuggest_float(float_suggestions),
+        TTsuggest_categorical(categorical_suggestions),
+        TTreport(Float64[]),
+        TTshould_prune(),
+    )
+    od(tt)
+    return tt.report.reported_vals
+end

The next part is your hyperparameter optimization objective. The ObjectiveData struct contains all relevant information about the sequence of specific problems. The outermost key part is the N_range field. Early stopping requires a series of progressively more complex problems. They will be attempted from the most simple one to the most complex one, and are specified by the values of N in that vector.

mutable struct ObjectiveData{TObj,TGrad}
+    obj::TObj
+    grad::TGrad
+    N_range::Vector{Int}
+    gtol::Float64
+    vts::Vector{AbstractVectorTransportMethod}
+    retrs::Vector{AbstractRetractionMethod}
+    manifold_constructors::Vector{Tuple{String,Any}}
+    pruning_losses::Vector{Float64}
+    manopt_stepsize::Vector{Tuple{String,Any}}
+    obj_loss_coeff::Float64
+end

In the example below we optimize hyperparameters on a sequence of Rosenbrock-type problems restricted to spheres:

\[\arg\min_{p \in S^{N-1}} \sum_{i=1}^{N/2} (1-p_{2i})^2 + 100 (p_{2i+1} - p_{2i}^2)^2,\]

where $N \in [2, 16, 128, 1024, 8192, 65536]$.

obj and grad are the objective and gradient, here defined as below. Note that gradient works in-place and variants without manifolds are also provided for easier comparison with other libraries like Optim.jl. It is easiest when problems for different values N can be distinguished by being defined on successively larger manifolds but the script could be modified so that it’s not necessary.

pruning_losses and compute_pruning_losses are related to early pruning used in Optuna and you shouldn’t have to modify them.

function f_rosenbrock(x)
+    result = 0.0
+    for i in 1:2:length(x)
+        result += (1.0 - x[i])^2 + 100.0 * (x[i + 1] - x[i]^2)^2
+    end
+    return result
+end
+function f_rosenbrock(::AbstractManifold, x)
+    return f_rosenbrock(x)
+end
+
+function g_rosenbrock!(storage, x)
+    for i in 1:2:length(x)
+        storage[i] = -2.0 * (1.0 - x[i]) - 400.0 * (x[i + 1] - x[i]^2) * x[i]
+        storage[i + 1] = 200.0 * (x[i + 1] - x[i]^2)
+    end
+    return storage
+end
+function g_rosenbrock!(M::AbstractManifold, storage, x)
+    g_rosenbrock!(storage, x)
+    riemannian_gradient!(M, storage, x, storage)
+    return storage
+end

Next, gtol is the tolerance used for the stopping criterion in optimization. vts and retrs are, respectively, vector transports and retraction methods selected through hyperparameter optimization. Some items need to be different for different values of N, for example the manifold over which the problem is defined. This is handled by manifold_constructors which is then defined as Tuple{String,Any}[("Sphere", N -> Manifolds.Sphere(N - 1))], where the string "Sphere" is used to identify the manifold family and the next element is a function that transforms the value of N to the manifold for the problem of size N.

Similarly, different stepsize selection methods may be considered. This is handled by the field manopt_stepsize. It will be easiest to see how it works by looking at how it is initialized:

Tuple{String,Any}[
+    ("LS-HZ", M -> Manopt.LineSearchesStepsize(ls_hz)),
+    ("Wolfe-Powell", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),
+]

We have a string that identifies the line search method name and a constructor of the line search which takes relevant arguments like the manifold or a numerical parameter.

The next part is the trial evaluation procedure. This is one of the more important places which need to be customized to your problem. This is the point where we tell Optuna about the relevant optimization hyperparameters and use them to define specific problems. The hyperparameter optimization is a multiobjective problem: we want as good problem objectives as possible and as low times as possible. As Optuna doesn’t currently support multicriteria pruning, which is important for obtaining a solution in a reasonable amount of time, we use a linear combination of sub-objectives to turn the problem into a single-criterion optimization. The hyperparameter optimization objective is a linear combination of achieved objectives the relative weight is controlled by objective.obj_loss_coeff.

function (objective::ObjectiveData)(trial)
+    # Here we use optuna to select memory length for L-BFGS -- an integer in the range between 2 and 30, referenced by name "mem_len"
+    mem_len = trial.suggest_int("mem_len", 2, 30)
+
+    # Here we select a vector transport and retraction methods, one of those specified in the `ObjectiveData`.
+    vt = objective.vts[pyconvert(
+        Int,
+        trial.suggest_categorical(
+            "vector_transport_method", Vector(eachindex(objective.vts))
+        ),
+    )]
+    retr = objective.retrs[pyconvert(
+        Int,
+        trial.suggest_categorical("retraction_method", Vector(eachindex(objective.retrs))),
+    )]
+
+    # Here we select the manifold constructor, in case we want to try different manifolds for our problem. For example one could try defining a problem with orthogonality constraints on Stiefel, Grassmann or flag manifold.
+    manifold_name, manifold_constructor = objective.manifold_constructors[pyconvert(
+        Int,
+        trial.suggest_categorical(
+            "manifold", Vector(eachindex(objective.manifold_constructors))
+        ),
+    )]
+
+    # Here the stepsize selection method type is selected.
+    manopt_stepsize_name, manopt_stepsize_constructor = objective.manopt_stepsize[pyconvert(
+        Int,
+        trial.suggest_categorical(
+            "manopt_stepsize", Vector(eachindex(objective.manopt_stepsize))
+        ),
+    )]
+
+    # This parametrizes stepsize selection methods with relevant numerical parameters.
+    local c1_val, c2_val, hz_sigma
+    if manopt_stepsize_name == "Wolfe-Powell"
+        c1_val = pyconvert(
+            Float64, trial.suggest_float("Wolfe-Powell c1", 1e-5, 1e-2; log=true)
+        )
+        c2_val =
+            1.0 - pyconvert(
+                Float64, trial.suggest_float("Wolfe-Powell 1-c2", 1e-4, 1e-2; log=true)
+            )
+    elseif manopt_stepsize_name == "Improved HZ"
+        hz_sigma = pyconvert(Float64, trial.suggest_float("Improved HZ sigma", 0.1, 0.9))
+    end
+
+    # The current loss estimate, taking into account estimated loss values for larger, not-yet-evaluated values of `N`.
+    loss = sum(objective.pruning_losses)
+
+    # Here iterate over problems we want to optimize for
+    # from smallest to largest; pruning should stop the iteration early
+    # if the hyperparameter set is not promising
+    cur_i = 0
+    for N in objective.N_range
+        # Here we define the initial point for the optimization procedure
+        p0 = zeros(N)
+        p0[1] = 1
+        M = manifold_constructor(N)
+        # Here we construct the specific line search to be used
+        local ls
+        if manopt_stepsize_name == "Wolfe-Powell"
+            ls = manopt_stepsize_constructor(M, c1_val, c2_val)
+        elseif manopt_stepsize_name == "Improved HZ"
+            ls = manopt_stepsize_constructor(M, hz_sigma)
+        else
+            ls = manopt_stepsize_constructor(M)
+        end
+        manopt_time, manopt_iters, manopt_obj = benchmark_time_state(
+            ManoptQN(),
+            M,
+            N,
+            objective.obj,
+            objective.grad,
+            p0,
+            ls,
+            pyconvert(Int, mem_len),
+            objective.gtol;
+            vector_transport_method=vt,
+            retraction_method=retr,
+        )
+        # TODO: turn this into multi-criteria optimization when Optuna starts supporting
+        # pruning in such problems
+        loss -= objective.pruning_losses[cur_i + 1]
+        loss += manopt_time + objective.obj_loss_coeff * manopt_obj
+        trial.report(loss, cur_i)
+        if pyconvert(Bool, trial.should_prune().__bool__())
+            throw(PyException(optuna.TrialPruned()))
+        end
+        cur_i += 1
+    end
+    return loss
+end

In the following benchmarking code you will most likely have to adapt solver parameters. This is designed around quasi_Newton but can be adapted to any solver as needed. The example below performs a small number of trials for quick rendering but in practice you should aim for at least a few thousand trials (the n_trials parameter).

# An abstract type in case we want to try different optimization packages.
+abstract type AbstractOptimConfig end
+struct ManoptQN <: AbstractOptimConfig end
+
+# Benchmark that evaluates hyperparameters. Returns time to reach the solution, number of iterations and final value of the objective.
+function benchmark_time_state(
+    ::ManoptQN,
+    M::AbstractManifold,
+    N,
+    f,
+    g!,
+    p0,
+    stepsize::Manopt.Stepsize,
+    mem_len::Int,
+    gtol::Real;
+    kwargs...,
+)
+    manopt_sc = StopWhenGradientNormLess(gtol; norm=norm_inf) | StopAfterIteration(1000)
+    mem_len = min(mem_len, manifold_dimension(M))
+    manopt_state = quasi_Newton(
+        M,
+        f,
+        g!,
+        p0;
+        stepsize=stepsize,
+        evaluation=InplaceEvaluation(),
+        return_state=true,
+        memory_size=mem_len,
+        stopping_criterion=manopt_sc,
+        debug=[],
+        kwargs...,
+    )
+    bench_manopt = @benchmark quasi_Newton(
+        $M,
+        $f,
+        $g!,
+        $p0;
+        stepsize=$(stepsize),
+        evaluation=$(InplaceEvaluation()),
+        memory_size=$mem_len,
+        stopping_criterion=$(manopt_sc),
+        debug=[],
+        $kwargs...,
+    )
+    iters = get_count(manopt_state, :Iterations)
+    final_val = f(M, manopt_state.p)
+    return median(bench_manopt.times) / 1000, iters, final_val
+end
+
+"""
+    lbfgs_study(; pruning_coeff::Float64=0.95)
+
+Set up the example hyperparameter optimization study.
+"""
+function lbfgs_study(; pruning_coeff::Float64=0.95)
+    Ns = [2^n for n in 1:3:12]
+    ls_hz = LineSearches.HagerZhang()
+    od = ObjectiveData(
+        f_rosenbrock,
+        g_rosenbrock!,
+        Ns,
+        1e-5,
+        AbstractVectorTransportMethod[ParallelTransport(), ProjectionTransport()],
+        [ExponentialRetraction(), ProjectionRetraction()],
+        Tuple{String,Any}[("Sphere", N -> Manifolds.Sphere(N - 1))],
+        zeros(Float64, eachindex(Ns)),
+        Tuple{String,Any}[
+            ("LS-HZ", M -> Manopt.LineSearchesStepsize(ls_hz)),
+            #("Improved HZ", (M, sigma) -> HagerZhangLinesearch(M; sigma=sigma)),
+            ("Wolfe-Powell", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),
+        ],
+        10.0,
+    )
+
+    # Here you need to define baseline values of all hyperparameters
+    baseline_pruning_losses = compute_pruning_losses(
+        od,
+        Dict("mem_len" => 4),
+        Dict(
+            "Wolfe-Powell c1" => 1e-4,
+            "Wolfe-Powell 1-c2" => 1e-3,
+            "Improved HZ sigma" => 0.9,
+        ),
+        Dict(
+            "vector_transport_method" => 1,
+            "retraction_method" => 1,
+            "manifold" => 1,
+            "manopt_stepsize" => 1,
+        ),
+    )
+    od.pruning_losses = pruning_coeff * baseline_pruning_losses
+
+    study = optuna.create_study(; study_name="L-BFGS")
+    # Here you can specify number of trials and timeout (in seconds).
+    study.optimize(od; n_trials=1000, timeout=500)
+    println("Best params is $(study.best_params) with value $(study.best_value)")
+    selected_manifold = od.manifold_constructors[pyconvert(Int, study.best_params["manifold"])][1]
+    selected_retraction_method = od.retrs[pyconvert(Int, study.best_params["retraction_method"])]
+    selected_vector_transport = od.vts[pyconvert(Int, study.best_params["vector_transport_method"])]
+    println("Selected manifold: $(selected_manifold)")
+    println("Selected retraction method: $(selected_retraction_method)")
+    println("Selected vector transport method: $(selected_vector_transport)")
+    return study
+end
+
+lbfgs_study()
Best params is {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093} with value 5510.963227438757
+Selected manifold: Sphere
+Selected retraction method: ExponentialRetraction()
+Selected vector transport method: ProjectionTransport()
+
+[I 2024-03-16 18:04:17,965] A new study created in memory with name: L-BFGS
+[I 2024-03-16 18:04:45,996] Trial 0 finished with value: 5639.789870295856 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00027288064367948073, 'Wolfe-Powell 1-c2': 0.00026503788892114045}. Best is trial 0 with value: 5639.789870295856.
+[I 2024-03-16 18:05:11,860] Trial 1 finished with value: 5635.936370295855 and parameters: {'mem_len': 11, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.002743250060163298, 'Wolfe-Powell 1-c2': 0.00037986521186922096}. Best is trial 1 with value: 5635.936370295855.
+[I 2024-03-16 18:05:39,386] Trial 2 finished with value: 5673.101441724422 and parameters: {'mem_len': 26, 'vector_transport_method': 2, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00043339485784312605, 'Wolfe-Powell 1-c2': 0.0027302649933974173}. Best is trial 1 with value: 5635.936370295855.
+[I 2024-03-16 18:06:10,279] Trial 3 finished with value: 7410.818084581564 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.
+[I 2024-03-16 18:06:37,995] Trial 4 finished with value: 5756.566226449636 and parameters: {'mem_len': 25, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.
+[I 2024-03-16 18:06:42,755] Trial 5 pruned. 
+[I 2024-03-16 18:06:58,577] Trial 6 pruned. 
+[I 2024-03-16 18:07:15,366] Trial 7 pruned. 
+[I 2024-03-16 18:07:40,605] Trial 8 finished with value: 5581.7437274386975 and parameters: {'mem_len': 7, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0010567355712112379, 'Wolfe-Powell 1-c2': 0.003948002490203636}. Best is trial 8 with value: 5581.7437274386975.
+[I 2024-03-16 18:07:46,021] Trial 9 pruned. 
+[I 2024-03-16 18:08:11,512] Trial 10 finished with value: 5510.963227438757 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093}. Best is trial 10 with value: 5510.963227438757.
+[I 2024-03-16 18:08:35,914] Trial 11 finished with value: 5521.388656010121 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006738829952322474, 'Wolfe-Powell 1-c2': 0.0010639659137420014}. Best is trial 10 with value: 5510.963227438757.
+[I 2024-03-16 18:09:00,317] Trial 12 finished with value: 5521.36958458155 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00010975606104676191, 'Wolfe-Powell 1-c2': 0.0007663843095951679}. Best is trial 10 with value: 5510.963227438757.
+[I 2024-03-16 18:09:24,680] Trial 13 finished with value: 5520.7020845815505 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 6.743450835567536e-05, 'Wolfe-Powell 1-c2': 0.0008779759729737719}. Best is trial 10 with value: 5510.963227438757.
+[I 2024-03-16 18:09:50,268] Trial 14 pruned. 
+[I 2024-03-16 18:10:15,494] Trial 15 finished with value: 5595.119584581556 and parameters: {'mem_len': 6, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 8.147444451747575e-05, 'Wolfe-Powell 1-c2': 0.00012268601197923553}. Best is trial 10 with value: 5510.963227438757.
+[I 2024-03-16 18:10:25,264] Trial 16 pruned. 
+[I 2024-03-16 18:10:50,209] Trial 17 finished with value: 5572.474513153012 and parameters: {'mem_len': 5, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0015998473664092935, 'Wolfe-Powell 1-c2': 0.0005109172020536229}. Best is trial 10 with value: 5510.963227438757.
+[I 2024-03-16 18:10:54,772] Trial 18 pruned. 
+[I 2024-03-16 18:11:04,534] Trial 19 pruned. 
+[I 2024-03-16 18:11:28,873] Trial 20 finished with value: 5512.3824417244705 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.1581668103921961e-05, 'Wolfe-Powell 1-c2': 0.0002691056199427656}. Best is trial 10 with value: 5510.963227438757.
+[I 2024-03-16 18:11:53,327] Trial 21 finished with value: 5529.088227438692 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.3645031886009879e-05, 'Wolfe-Powell 1-c2': 0.0001863385753491203}. Best is trial 10 with value: 5510.963227438757.
+[I 2024-03-16 18:12:17,911] Trial 22 finished with value: 5522.041370295835 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.0030173525937465e-05, 'Wolfe-Powell 1-c2': 0.000543991948003312}. Best is trial 10 with value: 5510.963227438757.
+[I 2024-03-16 18:12:27,645] Trial 23 pruned. 
+[I 2024-03-16 18:12:52,163] Trial 24 finished with value: 5528.840941724406 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.000245400433292576, 'Wolfe-Powell 1-c2': 0.000133639324295565}. Best is trial 10 with value: 5510.963227438757.
+
+Python: <optuna.study.study.Study object at 0x70dd985d9b50>

Summary

We’ve shown how to automatically select the best hyperparameter values for your optimization problem.

Literature

[ASY+19]
T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.
diff --git a/dev/examples/RayleighQuotient/index.html b/dev/examples/RayleighQuotient/index.html new file mode 100644 index 0000000..edacd55 --- /dev/null +++ b/dev/examples/RayleighQuotient/index.html @@ -0,0 +1,235 @@ + +The Rayleigh Quotient · ManoptExamples.jl

The Rayleigh Quotient

Ronny Bergmann 2024-03-09

Introduction

This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.

For a symmetric matrix $A \in \mathbb R^{n\times n}$ we consider the 📖 Rayleigh Quotient

\[\operatorname*{arg\,min}_{x \in \mathbb R^n \backslash \{0\}} +\frac{x^{\mathrm{T}}Ax}{\lVert x \rVert^2}.\]

On the sphere we can omit the denominator and obtain

\[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

which by itself we can again continue in the embedding as

\[\tilde f(x) = x^{\mathrm{T}}Ax,\qquad x \in \mathbb R^n.\]

This cost has the nice feature that at the minimizer $p^*\in\mathbb S^{n-1}$ the function falue $f(p^*)$ is the smalles eigenvalue of $A$.

For the embedded function $\tilde f$ the gradient and Hessian can be computed with classical methods as

\[\begin{align*} +∇\tilde f(x) &= 2Ax, \qquad x ∈ ℝ^n, +\\ +∇^2\tilde f(x)[V] &= 2AV, \qquad x, V ∈ ℝ^n. +\end{align*}\]

Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold $\mathcal M = \mathbb S^{n-1}$ are given by

\[\begin{align*} +\operatorname{grad} f(p) &= 2Ap - 2(p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1}, +\\ +\operatorname{Hess} f(p)[X] &= 2AX - 2(p^{\mathrm{T}}AX)p - 2(p^{\mathrm{T}}Ap)X,\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1} +\end{align*}\]

Let’s first generate an example martrx $A$.

using Pkg;
+cd(@__DIR__)
+Pkg.activate("."); # use the example environment,
using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random
+Random.seed!(42)
+n = 500
+A = Symmetric(randn(n, n) / n)

And the manifolds

M = Sphere(n-1)
Sphere(499, ℝ)
E = get_embedding(M)
Euclidean(500; field=ℝ)

Setup the corresponding functions

Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute $f$ is called with M as their first argument and $\tilde f$ if called with E.

We instantiate

f = ManoptExamples.RayleighQuotientCost(A)
+grad_f = ManoptExamples.RayleighQuotientGrad!!(A)
+Hess_f = ManoptExamples.RayleighQuotientHess!!(A)

the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory

p0 = [1.0, zeros(n-1)...]
+X = zero_vector(M, p0)

we can both call

Y = grad_f(M, p0)  # Allocates memory
+grad_f(M, X, p0)    # Computes in place of X and returns the result in X.
+norm(M, p0, X-Y)
0.0

Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.

First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute

λ = min(eigvals(A)...)
-0.08967721009388108

A Solver based on gradient information

Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient $\nabla \tilde f$. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].

But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent

s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,
+    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
+    return_state=true,
+)
+q1 = get_solver_result(s)
+s
Initial f(x): -0.000727
+# 50    f(x): -0.088415|grad f(p)|:0.004530500043902619
+# 100   f(x): -0.089097|grad f(p)|:0.004589417101266096
+# 150   f(x): -0.089530|grad f(p)|:0.0026028331895358247
+# 200   f(x): -0.089650|grad f(p)|:0.0012359084298719039
+
+# Solver state for `Manopt.jl`s Gradient Descent
+After 200 iterations
+
+## Parameters
+* retraction method: ExponentialRetraction()
+
+## Stepsize
+ArmijoLinesearch() with keyword parameters
+  * initial_stepsize    = 1.0
+  * retraction_method   = ExponentialRetraction()
+  * contraction_factor  = 0.95
+  * sufficient_decrease = 0.1
+
+## Stopping criterion
+
+Stop When _one_ of the following are fulfilled:
+    Max Iteration 200:  reached
+    |grad f| < 1.0e-8: not reached
+Overall: reached
+This indicates convergence: No
+
+## Debug
+    :Iteration = [(:Iteration, "# %-6d"), (:Cost, "f(x): %f"), (:GradientNorm, "|grad f(p)|:%s"), "\n", 50]

From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.

And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.

q2 = gradient_descent(M, f, grad_f, p0;
+    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
+)
+#Test that both are the same
+isapprox(M, q1,q2)
Initial f(x): -0.000727
+# 50    f(x): -0.088415|grad f(p)|:0.004530500043902567
+# 100   f(x): -0.089097|grad f(p)|:0.004589417101266063
+# 150   f(x): -0.089530|grad f(p)|:0.002602833189535808
+# 200   f(x): -0.089650|grad f(p)|:0.0012359084298719097
+
+true

We can also benchmark both

@benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)
BenchmarkTools.Trial: 23 samples with 1 evaluation.
+ Range (min … max):  217.668 ms … 268.332 ms  ┊ GC (min … max): 3.21% … 3.98%
+ Time  (median):     219.032 ms               ┊ GC (median):    3.24%
+ Time  (mean ± σ):   222.029 ms ±  10.351 ms  ┊ GC (mean ± σ):  3.33% ± 0.26%
+
+   █                                                             
+  ▆█▆▃▁▃▁▃▁▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃ ▁
+  218 ms           Histogram: frequency by time          268 ms <
+
+ Memory estimate: 1.13 GiB, allocs estimate: 3613.
@benchmark gradient_descent($M, $f, $grad_f, $p0)
BenchmarkTools.Trial: 149 samples with 1 evaluation.
+ Range (min … max):  31.006 ms … 163.769 ms  ┊ GC (min … max): 0.00% … 79.63%
+ Time  (median):     31.330 ms               ┊ GC (median):    0.00%
+ Time  (mean ± σ):   33.701 ms ±  11.067 ms  ┊ GC (mean ± σ):  3.40% ±  7.06%
+
+  █▃ ▂ ▁              ▃                                         
+  ██▄█▇██▆▄▁▄▄▁▇▁▁▆▁▄▆█▇▁▁▄▁▄▄▁▁▁▁▁▁▁▁▁▄▁▁▁▄▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▁▁▄ ▄
+  31 ms         Histogram: log(frequency) by time        47 ms <
+
+ Memory estimate: 11.38 MiB, allocs estimate: 3006.

From these results we see, that the conversion from the Euclidean to the Riemannian gradient does require a small amount of effort and hence reduces the performance slighly. Still, if the Euclidean Gradient is easier to compute or already available, this is in terms of coding the faster way. Finally this is a tradeoff between derivation and implementation efforts for the Riemannian gradient and a slight performance reduction when using the Euclidean one.

A Solver based (also) on (approximate) Hessian information

To also involve the Hessian, we consider the trust regions solver with three cases:

  1. Euclidean, approximating the Hessian
  2. Euclidean, providing the Hessian
  3. Riemannian, providing the Hessian but also using in-place evaluations.
q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,
+    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
+);
Initial f(x): -0.000727
+# 10    f(x): -0.088106|grad f(p)|:0.01903913659588686
+# 20    f(x): -0.089023|grad f(p)|:0.007792334296299116
+# 30    f(x): -0.089501|grad f(p)|:0.008034300330026467
+# 40    f(x): -0.089842|grad f(p)|:0.008125526728200166
+# 50    f(x): -0.089890|grad f(p)|:0.0031244752821335416
+# 60    f(x): -0.089925|grad f(p)|:0.0029682862637714163
+# 70    f(x): -0.089962|grad f(p)|:0.002811722437216778
+# 80    f(x): -0.089997|grad f(p)|:0.0026658493010157363
+# 90    f(x): -0.090032|grad f(p)|:0.0025418974797659266
+# 100   f(x): -0.090067|grad f(p)|:0.0024485809550738955
+# 110   f(x): -0.090108|grad f(p)|:0.0023894008071780747
+# 120   f(x): -0.090155|grad f(p)|:0.002362317662908117
+# 130   f(x): -0.090208|grad f(p)|:0.0023611301647631484
+# 140   f(x): -0.090262|grad f(p)|:0.00237797866404072
+# 150   f(x): -0.090314|grad f(p)|:0.002405563029627607
+# 160   f(x): -0.090362|grad f(p)|:0.002438250821406204
+# 170   f(x): -0.090404|grad f(p)|:0.002472221074327323
+# 180   f(x): -0.090441|grad f(p)|:0.0025051377726827166
+# 190   f(x): -0.090472|grad f(p)|:0.002535721310831389
+# 200   f(x): -0.090498|grad f(p)|:0.0025633813700434637
+# 210   f(x): -0.090513|grad f(p)|:0.0025832821804127513
+# 220   f(x): -0.090513|grad f(p)|:0.0025832821804127513
+# 230   f(x): -0.090513|grad f(p)|:0.0025832821792817493
+# 240   f(x): -0.090513|grad f(p)|:0.0025832821770197098
+# 250   f(x): -0.090513|grad f(p)|:0.0025832821747576924
+# 260   f(x): -0.090513|grad f(p)|:0.002583282172495683
+# 270   f(x): -0.090513|grad f(p)|:0.0025832821702336567
+# 280   f(x): -0.090513|grad f(p)|:0.002583282167971658
+# 290   f(x): -0.090513|grad f(p)|:0.002583282165709656
+# 300   f(x): -0.090513|grad f(p)|:0.002583282163447637
+# 310   f(x): -0.090513|grad f(p)|:0.0025832821611855928
+# 320   f(x): -0.090513|grad f(p)|:0.0025832821589235814
+# 330   f(x): -0.090513|grad f(p)|:0.002583282156661572
+# 340   f(x): -0.090513|grad f(p)|:0.0025832821543995727
+# 350   f(x): -0.090513|grad f(p)|:0.002583282152137569
+# 360   f(x): -0.090513|grad f(p)|:0.0025832821498755487
+# 370   f(x): -0.090513|grad f(p)|:0.0025832821476135036
+# 380   f(x): -0.090513|grad f(p)|:0.0025832821453515035
+# 390   f(x): -0.090513|grad f(p)|:0.0025832821430894675
+# 400   f(x): -0.090513|grad f(p)|:0.0025832821408274405
+# 410   f(x): -0.090513|grad f(p)|:0.002583282138565445
+# 420   f(x): -0.090513|grad f(p)|:0.002583282136303441
+# 430   f(x): -0.090513|grad f(p)|:0.00258328213404143
+# 440   f(x): -0.090513|grad f(p)|:0.002583282131779385
+# 450   f(x): -0.090513|grad f(p)|:0.0025832821295174104
+# 460   f(x): -0.090513|grad f(p)|:0.002583282127255372
+# 470   f(x): -0.090513|grad f(p)|:0.002583282124993372
+# 480   f(x): -0.090513|grad f(p)|:0.0025832821227313313
+# 490   f(x): -0.090513|grad f(p)|:0.0025832821204693065
+# 500   f(x): -0.090513|grad f(p)|:0.002583282118207321
+# 510   f(x): -0.090513|grad f(p)|:0.0025832821159453034
+# 520   f(x): -0.090513|grad f(p)|:0.0025832821136832665
+# 530   f(x): -0.090513|grad f(p)|:0.0025832821114212673
+# 540   f(x): -0.090513|grad f(p)|:0.002583282109159243
+# 550   f(x): -0.090513|grad f(p)|:0.002583282106897217
+# 560   f(x): -0.090513|grad f(p)|:0.002583282104635213
+# 570   f(x): -0.090513|grad f(p)|:0.0025832821023731955
+# 580   f(x): -0.090513|grad f(p)|:0.0025832821001112094
+# 590   f(x): -0.090513|grad f(p)|:0.002583282097849167
+# 600   f(x): -0.090513|grad f(p)|:0.0025832820955871503
+# 610   f(x): -0.090513|grad f(p)|:0.0025832820933251325
+# 620   f(x): -0.090513|grad f(p)|:0.002583282091063122
+# 630   f(x): -0.090513|grad f(p)|:0.0025832820888010873
+# 640   f(x): -0.090513|grad f(p)|:0.0025832820865390785
+# 650   f(x): -0.090513|grad f(p)|:0.0025832820842770442
+# 660   f(x): -0.090513|grad f(p)|:0.0025832820820150576
+# 670   f(x): -0.090513|grad f(p)|:0.0025832820797530767
+# 680   f(x): -0.090513|grad f(p)|:0.0025832820774910523
+# 690   f(x): -0.090513|grad f(p)|:0.0025832820752290362
+# 700   f(x): -0.090513|grad f(p)|:0.002583282072966992
+# 710   f(x): -0.090513|grad f(p)|:0.002583282070704973
+# 720   f(x): -0.090513|grad f(p)|:0.0025832820684429532
+# 730   f(x): -0.090513|grad f(p)|:0.002583282066180946
+# 740   f(x): -0.090513|grad f(p)|:0.0025832820639189306
+# 750   f(x): -0.090513|grad f(p)|:0.0025832820616569214
+# 760   f(x): -0.090513|grad f(p)|:0.00258328205939488
+# 770   f(x): -0.090513|grad f(p)|:0.002583282057132884
+# 780   f(x): -0.090513|grad f(p)|:0.0025832820548708406
+# 790   f(x): -0.090513|grad f(p)|:0.002583282052608873
+# 800   f(x): -0.090513|grad f(p)|:0.002583282050346837
+# 810   f(x): -0.090513|grad f(p)|:0.0025832820480848214
+# 820   f(x): -0.090513|grad f(p)|:0.0025832820458228205
+# 830   f(x): -0.090513|grad f(p)|:0.0025832820435608087
+# 840   f(x): -0.090513|grad f(p)|:0.0025832820412987944
+# 850   f(x): -0.090513|grad f(p)|:0.0025832820390367726
+# 860   f(x): -0.090513|grad f(p)|:0.002583282036774768
+# 870   f(x): -0.090513|grad f(p)|:0.002583282034512706
+# 880   f(x): -0.090513|grad f(p)|:0.002583282032250709
+# 890   f(x): -0.090513|grad f(p)|:0.0025832820299886896
+# 900   f(x): -0.090513|grad f(p)|:0.002583282027726701
+# 910   f(x): -0.090513|grad f(p)|:0.002583282025464682
+# 920   f(x): -0.090513|grad f(p)|:0.0025832820232026517
+# 930   f(x): -0.090513|grad f(p)|:0.002583282020940619
+# 940   f(x): -0.090513|grad f(p)|:0.0025832820186786334
+# 950   f(x): -0.090513|grad f(p)|:0.002583282016416595
+# 960   f(x): -0.090513|grad f(p)|:0.0025832820141545986
+# 970   f(x): -0.090513|grad f(p)|:0.0025832820118925717
+# 980   f(x): -0.090513|grad f(p)|:0.0025832820096305525
+# 990   f(x): -0.090513|grad f(p)|:0.002583282007368543
+# 1000  f(x): -0.090513|grad f(p)|:0.0025832820051065217

To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.

q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,
+    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
+);
Initial f(x): -0.000727
+# 10    f(x): -0.089673|grad f(p)|:0.0033633987039373655
q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;
+    evaluation=InplaceEvaluation(),
+    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
+);
Initial f(x): -0.000727
+# 10    f(x): -0.089673|grad f(p)|:0.00336339870393737

Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.

@benchmark trust_regions($M, $f, $grad_f, $p0;
+  objective_type=:Euclidean,
+  evaluation=InplaceEvaluation(),
+)
BenchmarkTools.Trial: 10 samples with 1 evaluation.
+ Range (min … max):  488.560 ms … 542.951 ms  ┊ GC (min … max): 3.26% … 3.55%
+ Time  (median):     498.677 ms               ┊ GC (median):    3.22%
+ Time  (mean ± σ):   503.851 ms ±  17.951 ms  ┊ GC (mean ± σ):  3.27% ± 0.11%
+
+  █ ▁ ▁▁           ▁▁▁                      ▁                 ▁  
+  █▁█▁██▁▁▁▁▁▁▁▁▁▁▁███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
+  489 ms           Histogram: frequency by time          543 ms <
+
+ Memory estimate: 1.97 GiB, allocs estimate: 40408.
@benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;
+  evaluation=InplaceEvaluation(),
+  objective_type=:Euclidean
+)
BenchmarkTools.Trial: 294 samples with 1 evaluation.
+ Range (min … max):  12.991 ms … 148.108 ms  ┊ GC (min … max): 0.00% … 87.36%
+ Time  (median):     15.369 ms               ┊ GC (median):    3.17%
+ Time  (mean ± σ):   17.014 ms ±   8.238 ms  ┊ GC (mean ± σ):  7.16% ±  7.03%
+
+       ▁  █  ▂                                                  
+  ▆▁▁▇▅█▃▆█▇▅█▄▁▆▃▂▂▁▁▂▅▂▃▅▂▁▃▃▄▂▃▅▃▁▁▁▁▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▃▁▂▃ ▃
+  13 ms           Histogram: frequency by time         28.6 ms <
+
+ Memory estimate: 37.43 MiB, allocs estimate: 2920.
@benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;
+    evaluation=InplaceEvaluation(),
+)
BenchmarkTools.Trial: 506 samples with 1 evaluation.
+ Range (min … max):  8.717 ms … 152.718 ms  ┊ GC (min … max): 0.00% … 90.61%
+ Time  (median):     8.884 ms               ┊ GC (median):    0.00%
+ Time  (mean ± σ):   9.881 ms ±   6.537 ms  ┊ GC (mean ± σ):  4.94% ±  5.90%
+
+  ▆█▂     ▂▃    ▁                                              
+  ███▄▁▁▆▆██▇▄▆██▆▇▄▅▇▄▄▁▁▆▄▇▄▆▁▅▅▆▁▅▅▄▁▁▄▅▅▁▆▇▇▇▄▄▄▄▁▁▁▁▁▁▄▄ ▇
+  8.72 ms      Histogram: log(frequency) by time      14.7 ms <
+
+ Memory estimate: 10.77 MiB, allocs estimate: 2899.

We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.

Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.

[distance(M, q1, q) for q ∈ [q2,q3] ]
2-element Vector{Float64}:
+ 4.471485799821605e-15
+ 0.048047538209352994
[distance(M, q3, q) for q ∈ [q4,q5] ]
2-element Vector{Float64}:
+ 0.08269488012454579
+ 0.08269488012454579

Which we can also see in the final cost, comparing it to the Eigenvalue

[f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]
5-element Vector{Float64}:
+  2.76900562450888e-5
+  2.769005624428389e-5
+ -0.000836208332542443
+  3.191891195797325e-16
+  3.191891195797325e-16

Summary

We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.

Literature

diff --git a/dev/examples/Riemannian-mean/index.html b/dev/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..8784b66 --- /dev/null +++ b/dev/examples/Riemannian-mean/index.html @@ -0,0 +1,33 @@ + +Riemannian Mean · ManoptExamples.jl

The Riemannian Center of Mass (mean)

Ronny Bergmann 2023-07-02

Preliminary Notes

Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

For this first example, the objective is a very common one, for example also used in the Get started: optimize! tutorial of Manopt.jl.

The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

using Pkg;
+cd(@__DIR__)
+Pkg.activate("."); # use the example environment,

Loading packages and defining data

Loading the necessary packages and defining a data set on a manifold

using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
+Random.seed!(42)
+M = Sphere(2)
+n = 100
+σ = π / 8
+p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
+data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

Variant 1: Using the functions

We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get started: optimize!.

f = ManoptExamples.RiemannianMeanCost(data)
+grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

Then we can for example directly call a gradient descent as

x1 = gradient_descent(M, f, grad_f, first(data))
3-element Vector{Float64}:
+ 0.6868392794567202
+ 0.006531600696673591
+ 0.7267799821044285

Variant 2: Using the objective

A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do in-place-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

rmo = ManoptExamples.Riemannian_mean_objective(
+    M, data,
+    evaluation=InplaceEvaluation(),
+)

Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

rmp = DefaultManoptProblem(M, rmo)

This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

s1 = GradientDescentState(M, copy(M, first(data)))
+solve!(rmp, s1)
+x2 = get_solver_result(s1)
3-element Vector{Float64}:
+ 0.6868392794567202
+ 0.006531600696673591
+ 0.7267799821044285

but we can easily use a conjugate gradient instead

s2 = ConjugateGradientDescentState(
+    M,
+    copy(M, first(data)),
+    StopAfterIteration(100),
+    ArmijoLinesearch(M),
+    FletcherReevesCoefficient(),
+)
+solve!(rmp, s2)
+x3 = get_solver_result(s2)
3-element Vector{Float64}:
+ 0.6868393613136017
+ 0.006531541407458413
+ 0.7267799052788726
diff --git a/dev/examples/Robust-PCA/index.html b/dev/examples/Robust-PCA/index.html new file mode 100644 index 0000000..e5a5e8e --- /dev/null +++ b/dev/examples/Robust-PCA/index.html @@ -0,0 +1,64 @@ + +Robust PCA · ManoptExamples.jl

The Robust PCA computed on the Grassmann manifold

Ronny BergmannLaura Weigl 2023-07-02

For this example we first load the necessary packages.

using Pkg;
+cd(@__DIR__)
+Pkg.activate("."); # use the example environment,
using LinearAlgebra, Random, Statistics
+using Manifolds, Manopt, ManoptExamples
+using Plots
+Random.seed!(42)

Computing a Robust PCA

For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

\[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

\[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

n = 40
+d = 2
+outliers = 15
+data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
+# Outliers:
+permute = shuffle(1:size(data, 2))'
+data[:, permute[1:outliers]] = 30 * randn(2, outliers)
+# We are looking for a line here so we set
+m = 1

We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

M = Grassmann(d,m);

For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

ε = 1.0
+iterations = 6
+reduction = 0.5
+U, S, V = svd(data);
+p0 = U[:, 1:m]
2×1 Matrix{Float64}:
+ -0.7494248652139397
+  0.6620893983436593

Let’s generate the cost and gradient we aim to use here

f = ManoptExamples.RobustPCACost(M, data, ε)
+grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

and check the initial cost

f(M, p0)
9.430690947905521

Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

q = copy(M, p0)
+εi = ε
+for i in 1:iterations
+    f.ε = εi
+    grad_f.ε = εi
+    global q = trust_regions(
+        M,
+        f,
+        grad_f,
+        ApproxHessianFiniteDifference(
+            M, q, f;
+            vector_transport_method=ProjectionTransport(),
+            retraction_method=PolarRetraction(),
+        ),
+        q;
+        (project!)=project!,
+    )
+    global εi *= reduction
+end

When finally setting ε we can investigate the final cost

f.ε = 0.0
+f(M, q)
9.412961981726742

Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
+plot!(
+    fig,
+    q[1] * [-1, 1] * 100,
+    q[2] * [-1, 1] * 100;
+    linecolor=:red,
+    linewidth=2,
+    label="Robust PCA",
+);
+plot!(
+    fig,
+    p0[1] * [-1, 1] * 100,
+    p0[2] * [-1, 1] * 100;
+    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
+    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
+    linewidth=2,
+    linecolor=:black,
+    label="Standard SVD",
+)

Figure 1: The result of the robust PCA vs. SVD

diff --git a/dev/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg b/dev/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..e695072 --- /dev/null +++ b/dev/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/Rosenbrock/index.html b/dev/examples/Rosenbrock/index.html new file mode 100644 index 0000000..e97c888 --- /dev/null +++ b/dev/examples/Rosenbrock/index.html @@ -0,0 +1,59 @@ + +Rosenbrock · ManoptExamples.jl

The Rosenbrock Function

Ronny Bergmann 2023-01-03

After loading the necessary packages

using Pkg;
+cd(@__DIR__)
+Pkg.activate("."); # use the example environment,
using Manifolds, Manopt, ManoptExamples
+using Plots

We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).

a = 100.0
+b = 1.0
+p0 = [1/10, 2/10]

which is defined on $\mathbb R^2$, so we need

M = ℝ^2
Euclidean(2; field=ℝ)

and can then generate both the cost and the gradient

f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
+grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

For comparison, we look at the initial cost

f(M, p0)
4.42

And to illustrate, we run two small solvers with their default settings as a comparison.

Gradient Descent

We start with the gradient descent solver.

Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
# Solver state for `Manopt.jl`s Gradient Descent
+After 200 iterations
+
+## Parameters
+* retraction method: ExponentialRetraction()
+
+## Stepsize
+ArmijoLinesearch() with keyword parameters
+  * initial_stepsize    = 1.0
+  * retraction_method   = ExponentialRetraction()
+  * contraction_factor  = 0.95
+  * sufficient_decrease = 0.1
+
+## Stopping criterion
+
+Stop When _one_ of the following are fulfilled:
+    Max Iteration 200:  reached
+    |grad f| < 1.0e-8: not reached
+Overall: reached
+This indicates convergence: No
+
+## Record
+(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

gd_x = get_record(gd_state, :Iteration, :Iteration)
+gd_y =  get_record(gd_state, :Iteration, :Cost)
+f(M, get_solver_result(gd_state))
0.10562873187751265

Quasi Newton

We can improve this using the quasi Newton algorithm

qn_state = quasi_Newton(M, f, grad_f, p0;
+    record = [:Iteration, :Cost], return_state=true
+)
# Solver state for `Manopt.jl`s Quasi Newton Method
+After 26 iterations
+
+## Parameters
+* direction update:        limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.
+* retraction method:       ExponentialRetraction()
+* vector transport method: ParallelTransport()
+
+## Stepsize
+WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
+  * retraction_method = ExponentialRetraction()
+  * vector_transport_method = ParallelTransport()
+
+## Stopping criterion
+
+Stop When _one_ of the following are fulfilled:
+    Max Iteration 1000: not reached
+    |grad f| < 1.0e-6: reached
+Overall: reached
+This indicates convergence: Yes
+
+## Record
+(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

qn_x = get_record(qn_state, :Iteration, :Iteration)
+qn_y =  get_record(qn_state, :Iteration, :Cost)
+f(M, get_solver_result(qn_state))
1.4404666436813376e-18

and see that the final value is close to the one of the minimizer

f(M, ManoptExamples.minimizer(f))
0.0

which we also see if we plot the recorded cost.

fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
+plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

Figure 1: The result of the robust PCA vs. SVD

diff --git a/dev/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg b/dev/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..67f8e6f --- /dev/null +++ b/dev/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/Total-Variation/index.html b/dev/examples/Total-Variation/index.html new file mode 100644 index 0000000..b93d9d5 --- /dev/null +++ b/dev/examples/Total-Variation/index.html @@ -0,0 +1,107 @@ + +Total Variation · ManoptExamples.jl

Total Variation Minimization

Ronny Bergmann 2023-06-06

Introduction

Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].

This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.

The manifold-valued ROF model

Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold $s = (s_i)_{i=1}^N \in \mathbb M^n$ of length $n \in \mathbb N$, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term $D(p,s)$ to “stay close to” $s$ and a regularizer $R(p)$. For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain

\[\operatorname*{arg\,min}_{p\in\mathcal M^n} +f(p), +\qquad +f(p) = D(p,s) + α R(p) = \sum_{i=1}^n d_{\mathcal M}^2(s_i,p_i) + α\sum_{i=1}^{n-1} d_{\mathcal M}(p_i,p_{i+1}),\]

where $α > 0$ is a weight parameter.

The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost $f(p)$ to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any $p_i=p_{i+1}$. So we have to use another technique.

The Cyclic Proximal Point algorithm

If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the Cyclic Proximal Point Algorithm [Bac14].

Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.

The Optimsation

using Manifolds, Manopt, ManoptExamples, ManifoldDiff
+using ManifoldDiff: prox_distance
+using ManoptExamples: prox_Total_Variation
+n = 500 #Signal length
+σ = 0.2 # amount of noise
+α = 0.5# in the TV model

We define a few colors

using Colors, NamedColors, ColorSchemes, Plots, Random
+data_color = RGBA{Float64}(colorant"black")
+light_color = RGBA{Float64}(colorant"brightgrey")
+recon_color = RGBA{Float64}(colorant"vibrantorange")
+noisy_color = RGBA{Float64}(colorant"vibrantteal")

And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.

Random.seed!(23)
+M = Circle()
+N = PowerManifold(M, n)
+data = ManoptExamples.artificial_S1_signal(n)
+s = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]
+t = range(0.0, 1.0; length=n)
+scene = scatter(
+    t,
+    data;
+    markercolor=data_color,
+    markerstrokecolor=data_color,
+    markersize=2,
+    lab="original",
+)
+scatter!(
+    scene,
+    t,
+    s;
+    markersize=2,
+    markercolor=noisy_color,
+    markerstrokecolor=noisy_color,
+    lab="noisy",
+)
+yticks!(
+    [-π, -π / 2, 0, π / 2, π],
+    [raw"$-\pi$", raw"$-\frac{\pi}{2}$", raw"$0$", raw"$\frac{\pi}{2}$", raw"$\pi$"],
+)

As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.

Defining cost and the proximal maps, which are actually 3 proxes to be precise.

f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)
+proxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_Total_Variation(N, α * λ, p))

We run the algorithm

o = cyclic_proximal_point(
+    N,
+    f,
+    proxes_f,
+    s;
+    λ=i -> π / (2 * i),
+    debug=[
+        :Iteration,
+        " | ",
+        DebugProximalParameter(),
+        " | ",
+        :Cost,
+        " | ",
+        :Change,
+        "\n",
+        1000,
+        :Stop,
+    ],
+    record=[:Iteration, :Cost, :Change, :Iterate],
+    return_state=true,
+);
Initial  |  | f(x): 59.187445 | 
+# 1000   | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283
+# 2000   | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678
+# 3000   | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907
+# 4000   | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957
+# 5000   | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175
+The algorithm reached its maximal number of iterations (5000).

We can see that the cost reduces nicely. Let’s extract the result an the recorded values

recon = get_solver_result(o)
+record = get_record(o)

We get

scene = scatter(
+    t,
+    data;
+    markercolor=data_color,
+    markerstrokecolor=data_color,
+    markersize=2,
+    lab="original",
+)
+scatter!(
+    scene,
+    t,
+    s;
+    markersize=2,
+    markercolor=light_color,
+    markerstrokecolor=light_color,
+    lab="noisy",
+)
+scatter!(
+    scene,
+    t,
+    recon;
+    markersize=2,
+    markercolor=recon_color,
+    markerstrokecolor=recon_color,
+    lab="reconstruction",
+)

Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”

Outlook

We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the $\operatorname{TV}_2$ yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.

Another extension for both first and second order TV is to apply this for manifold-valued images $S = (S_{i,j})_{i,j=1}^{m,n} \in \mathcal M^{m,n}$, where the distances in the regularizer are then used in both the first dimension $i$ and the second dimension $j$ in the data.

Technical details

This version of the example was generated with the following package versions.

Pkg.status()
Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`
+  [6e4b80f9] BenchmarkTools v1.5.0
+  [35d6a980] ColorSchemes v3.25.0
+  [5ae59095] Colors v0.12.11
+  [7073ff75] IJulia v1.24.2
+  [8ac3fa9e] LRUCache v1.6.1
+  [d3d80556] LineSearches v7.2.0
+  [af67fdf4] ManifoldDiff v0.3.10
+  [1cead3c2] Manifolds v0.9.18
+  [3362f125] ManifoldsBase v0.15.10
+  [0fc0a36d] Manopt v0.4.63
+  [5b8d5e80] ManoptExamples v0.1.7 `..`
+  [51fcb6bd] NamedColors v0.2.2
+  [91a5bcdd] Plots v1.40.4
+  [6099a3de] PythonCall v0.9.20

Literature

[Bac14]
M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
[BBSW16]
M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
[BLSW14]
R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
[ROF92]
L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
[WDS14]
A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
diff --git a/dev/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg b/dev/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg new file mode 100644 index 0000000..f5c90b3 --- /dev/null +++ b/dev/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg @@ -0,0 +1,1551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg b/dev/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg new file mode 100644 index 0000000..414a9ca --- /dev/null +++ b/dev/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg @@ -0,0 +1,1048 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/img/bezier/Casteljau-illustr.png b/dev/examples/img/bezier/Casteljau-illustr.png new file mode 100644 index 0000000000000000000000000000000000000000..ecddd4acc643c22a65dc416fa64eb3341011fbd5 GIT binary patch literal 131251 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≪`$_g5pU!0dqVCc7+?{w6;c^8V_2)Et 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ຽ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%0DsP~>N- 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 IM6N<$g5?279{>OV literal 0 HcmV?d00001 diff --git a/dev/examples/img/bezier/bezier-acceleration-orig.png b/dev/examples/img/bezier/bezier-acceleration-orig.png new file mode 100644 index 0000000000000000000000000000000000000000..43dd0a9538f7a91b1c9525e778129e281ac92141 GIT binary patch literal 263498 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

Wz=y!s&Ilef=5@ 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%0DvTS*zqB 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 z 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%0A99j5Ri7_ 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�P67bnj_~_@Fnjh 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 literal 0 HcmV?d00001 diff --git a/dev/examples/index.html b/dev/examples/index.html new file mode 100644 index 0000000..90eef4b --- /dev/null +++ b/dev/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

List of Examples

NameprovidesDocumentationComment
A Benchmark for Difference of Convexcontains a few simple functions
Bézier Curves and Minimizing their Accelerationtools Bézier curves and their acceleration📚
Solving Rosenbrock with Difference of ConvexDoC split of Rosenbrock📚uses a Rosenbrock based metric
Difference of Convex vs. Frank-Wolfeclosed-form sub solver
Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚
The Rayleigh Quotient$f$, $\operatorname{grad}f$ (A/I), $\operatorname{Hess}f$ (A/I), objective📚
Total Variation Minimization$f$, $\operatorname{prox}f$ (A/I), objective📚

Symbols:

  • A Allocating variant
  • I In-place variant
  • 📚 link to documented functions in the documentation
diff --git a/dev/helpers/error_measures/index.html b/dev/helpers/error_measures/index.html new file mode 100644 index 0000000..494ffba --- /dev/null +++ b/dev/helpers/error_measures/index.html @@ -0,0 +1,2 @@ + +Error measures · ManoptExamples.jl
diff --git a/dev/index.html b/dev/index.html new file mode 100644 index 0000000..9aaecd6 --- /dev/null +++ b/dev/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

Welcome to ManoptExample.jl

This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

Each example usually consists of

  • a cost function and additional objects, like the gradient or proximal maps, see objectives
  • an example explaining how to use these, see examples

Helping functions that are used in one or more examples can be found in the section of functions in the menu.

diff --git a/dev/objectives/index.html b/dev/objectives/index.html new file mode 100644 index 0000000..69ead1f --- /dev/null +++ b/dev/objectives/index.html @@ -0,0 +1,187 @@ + +Objectives · ManoptExamples.jl

List of Objectives defined for the Examples

Rayleigh Quotient on the Sphere

See the Rayleigh example (TODO) to see these in use.

ManoptExamples.RayleighQuotientCostType
RayleighQuotientCost

A functor representing the Rayleigh Quotient cost function.

Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either

\[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

or extended into the embedding as

\[f(x) = x^{\mathrm{T}}Ax, \qquad x ∈ ℝ^n,\]

which is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of $𝕊^{n-1}$.

Fields

  • A – storing the matrix internally

Constructor

RayleighQuotientCost(A)

Create the Rayleigh cost function.

See also

RayleighQuotientGrad!!, RayleighQuotientHess!!

source
ManoptExamples.RayleighQuotientGrad!!Type
RayleighQuotientGrad!!

A functor representing the Rayleigh Quotient gradient function.

Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either

\[\operatorname{grad} f(p) = 2 Ap - 2 (p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1},\]

or taking the Euclidean gradient of the Rayleigh quotient on the sphere as

\[∇f(x) = 2Ax, \qquad x ∈ ℝ^n.\]

For details, see Example 3.62 of [Bou23].

Fields

  • A – storing the matrix internally

Constructor

RayleighQuotientGrad!!(A)

Create the Rayleigh quotient gradient function.

See also

RayleighQuotientCost, RayleighQuotientHess!!

source
ManoptExamples.RayleighQuotientHess!!Type
RayleighQuotientHess!!

A functor representing the Rayleigh Quotient Hessian.

Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either

\[\operatorname{Hess} f(p)[X] = 2 \bigl(AX - (p^{mathrm{T}}AX)p - (p^{\mathrm{T}}Ap)X\bigr),\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1}\]

or taking the Euclidean Hessian of the Rayleigh quotient on the sphere as

\[∇^2f(x)[V] = 2AV, \qquad x, V ∈ ℝ^n.\]

For details, see Example 5.27 of [Bou23].

Fields

  • A – storing the matrix internally

Constructor

RayleighQuotientHess!!(A)

Create the Rayleigh quotient Hessian function.

See also

RayleighQuotientCost, RayleighQuotientGrad!!

source

Bézier Curves

See the Bezier Curves example to see these in use.

ManoptExamples.BezierSegmentType
BezierSegment

A type to capture a Bezier segment. With $n$ points, a Bézier segment of degree $n-1$ is stored. On the Euclidean manifold, this yields a polynomial of degree $n-1$.

This type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.

Not that this can also be used to represent tangent vectors on the control points of a segment.

See also: de_Casteljau.

Constructor

BezierSegment(pts::AbstractVector)

Given an abstract vector of pts generate the corresponding Bézier segment.

source
ManoptExamples.L2_acceleration_BezierMethod
L2_acceleration_Bezier(M,B,pts,λ,d)

compute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.

\[\frac{λ}{2}\sum_{i=0}^{N} d_{\mathcal M}(d_i, c_B(i))^2+ +\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

where for this formula the pts along the curve are equispaced and denoted by $t_i$ and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by $p_i$, and to each $p_i$ corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

See also

grad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier

source
ManoptExamples.acceleration_BezierMethod
acceleration_Bezier(
+    M::AbstractManifold,
+    B::AbstractVector{P},
+    degrees::AbstractVector{<:Integer},
+    T::AbstractVector{<:AbstractFloat},
+) where {P}

compute the value of the discrete Acceleration of the composite Bezier curve

\[\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

where for this formula the pts along the curve are equispaced and denoted by $t_i$, $i=1,…,N$, and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

This acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

See also

grad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier

source
ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
adjoint_differential_Bezier_control_points(
+    M::AbstractManifold,
+    T::AbstractVector,
+    X::AbstractVector,
+)
+adjoint_differential_Bezier_control_points!(
+    M::AbstractManifold,
+    Y::AbstractVector{<:BezierSegment},
+    T::AbstractVector,
+    X::AbstractVector,
+)

Evaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.

See de_Casteljau for more details on the curve.

source
ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
adjoint_differential_Bezier_control_points(
+    M::AbstractManifold,
+    B::AbstractVector{<:BezierSegment},
+    t,
+    X
+)
+adjoint_differential_Bezier_control_points!(
+    M::AbstractManifold,
+    Y::AbstractVector{<:BezierSegment},
+    B::AbstractVector{<:BezierSegment},
+    t,
+    X
+)

evaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

See de_Casteljau for more details on the curve.

source
ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
adjoint_differential_Bezier_control_points(
+    M::AbstractManifold,
+    b::BezierSegment,
+    t::AbstractVector,
+    X::AbstractVector,
+)
+adjoint_differential_Bezier_control_points!(
+    M::AbstractManifold,
+    Y::BezierSegment,
+    b::BezierSegment,
+    t::AbstractVector,
+    X::AbstractVector,
+)

evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018

source
ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)
+adjoint_differential_Bezier_control_points!(
+    M::AbstractManifold,
+    Y::BezierSegment,
+    b::BezierSegment,
+    t,
+    η,
+)

evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t$∈[0,1]$ on the curve and a tangent vector $η∈T_{β(t)}\mathcal M$. This can be computed in place of Y.

See de_Casteljau for more details on the curve.

source
ManoptExamples.de_CasteljauMethod
de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function

return the Bézier curve $β(⋅;b_0,…,b_n): [0,1] → \mathcal M$ defined by the control points $b_0,…,b_n∈\mathcal M$, $n∈\mathbb N$, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let $γ_{a,b}(t)$ denote the shortest geodesic connecting $a,b∈\mathcal M$. Then the curve is defined by the recursion

\[\begin{aligned} + β(t;b_0,b_1) &= \gamma_{b_0,b_1}(t)\\ + β(t;b_0,…,b_n) &= \gamma_{β(t;b_0,…,b_{n-1}), β(t;b_1,…,b_n)}(t), +\end{aligned}\]

and P is the type of a point on the Manifold M.

de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function

Given a vector of Bézier segments, i.e. a vector of control points $B=\bigl( (b_{0,0},…,b_{n_0,0}),…,(b_{0,m},… b_{n_m,m}) \bigr)$, where the different segments might be of different degree(s) $n_0,…,n_m$. The resulting composite Bézier curve $c_B:[0,m] → \mathcal M$ consists of $m$ segments which are Bézier curves.

\[c_B(t) := + \begin{cases} + β(t; b_{0,0},…,b_{n_0,0}) & \text{ if } t ∈[0,1]\\ + β(t-i; b_{0,i},…,b_{n_i,i}) & \text{ if } + t∈(i,i+1], \quad i∈\{1,…,m-1\}. + \end{cases}\]

de_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)
+de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)
+de_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector
+de_Casteljau(
+    M::AbstractManifold,
+    B::AbstractVector{<:BezierSegment},
+    T::AbstractVector
+) -> AbstractVector

Evaluate the Bézier curve at time t or at times t in T.

source
ManoptExamples.differential_Bezier_control_pointsMethod
differential_Bezier_control_points(
+    M::AbstractManifold,
+    B::AbstractVector{<:BezierSegment},
+    T::AbstractVector
+    Ξ::AbstractVector{<:BezierSegment}
+)
+differential_Bezier_control_points!(
+    M::AbstractManifold,
+    Θ::AbstractVector{<:BezierSegment}
+    B::AbstractVector{<:BezierSegment},
+    T::AbstractVector
+    Ξ::AbstractVector{<:BezierSegment}
+)

evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in $[0,N]$, and each depending the corresponding segment(s). Here, $N$ is the length of B. For the mutating variant the result is computed in Θ.

See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

source
ManoptExamples.differential_Bezier_control_pointsMethod
differential_Bezier_control_points(
+    M::AbstractManifold,
+    B::AbstractVector{<:BezierSegment},
+    t,
+    X::AbstractVector{<:BezierSegment}
+)
+differential_Bezier_control_points!(
+    M::AbstractManifold,
+    Y::AbstractVector{<:BezierSegment}
+    B::AbstractVector{<:BezierSegment},
+    t,
+    X::AbstractVector{<:BezierSegment}
+)

evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,N]$, which depends only on the corresponding segment. Here, $N$ is the length of B. The computation can be done in place of Y.

See de_Casteljau for more details on the curve.

source
ManoptExamples.differential_Bezier_control_pointsMethod
differential_Bezier_control_points(
+    M::AbstractManifold,
+    b::BezierSegment,
+    T::AbstractVector,
+    X::BezierSegment,
+)
+differential_Bezier_control_points!(
+    M::AbstractManifold,
+    Y,
+    b::BezierSegment,
+    T::AbstractVector,
+    X::BezierSegment,
+)

evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in $t∈[0,1]$. The computation can be done in place of Y.

See de_Casteljau for more details on the curve.

source
ManoptExamples.differential_Bezier_control_pointsMethod
differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)
+differential_Bezier_control_points!(
+    M::AbstractManifold,
+    Y,
+    b::BezierSegment,
+    t,
+    X::BezierSegment
+)

evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,1]$. The computation can be done in place of Y.

See de_Casteljau for more details on the curve.

source
ManoptExamples.get_Bezier_degreeMethod
get_Bezier_degree(M::AbstractManifold, b::BezierSegment)

return the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.

source
ManoptExamples.get_Bezier_degreesMethod
get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})

return the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.

source
ManoptExamples.get_Bezier_inner_pointsMethod
get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )
+get_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)

returns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned

source
ManoptExamples.get_Bezier_junction_tangent_vectorsMethod
get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
+get_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)

returns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.

source
ManoptExamples.get_Bezier_junctionsFunction
get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
+get_Bezier_junctions(M::AbstractManifold, b::BezierSegment)

returns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.

source
ManoptExamples.get_Bezier_pointsFunction
get_Bezier_points(
+    M::AbstractManifold,
+    B::AbstractVector{<:BezierSegment},
+    reduce::Symbol=:default
+)
+get_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)

returns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.

This method reduces the points depending on the optional reduce symbol

  • :default: no reduction is performed
  • :continuous: for a continuous function, the junction points are doubled at $b_{0,i}=b_{n_{i-1},i-1}$, so only $b_{0,i}$ is in the vector.
  • :differentiable: for a differentiable function additionally $\log_{b_{0,i}}b_{1,i} = -\log_{b_{n_{i-1},i-1}}b_{n_{i-1}-1,i-1}$ holds. hence $b_{n_{i-1}-1,i-1}$ is omitted.

If only one segment is given, all points of b, b.pts, is returned.

source
ManoptExamples.get_Bezier_segmentsMethod
get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])

returns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.

There are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let $c=(c_1,…,c_k)$ and $d=(d_1,…,d_m)$, where $m$ denotes the number of components the composite Bézier curve consists of. Then

  • :default: $k = m + \sum_{i=1}^m d_i$ since each component requires one point more than its degree. The points are then ordered in tuples, i.e.

    \[B = \bigl[ [c_1,…,c_{d_1+1}], (c_{d_1+2},…,c_{d_1+d_2+2}],…, [c_{k-m+1+d_m},…,c_{k}] \bigr]\]

  • :continuous: $k = 1+ \sum_{i=1}{m} d_i$, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.

    \[B = \bigl[ [c_1,…,c_{d_1+1}], [c_{d_1+1},…,c_{d_1+d_2+1}],…, [c_{k-1+d_m},…,b_{k}) \bigr]\]

  • :differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence $k = 2 - m + \sum_{i=1}{m} d_i$ and at a junction point $b_n$ with its given prior point $c_{n-1}$, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as $b = \exp_{c_n}(-\log_{c_n} c_{n-1})$ such that the assumed differentiability holds
source
ManoptExamples.grad_L2_acceleration_BezierMethod
grad_L2_acceleration_Bezier(
+    M::AbstractManifold,
+    B::AbstractVector{P},
+    degrees::AbstractVector{<:Integer},
+    T::AbstractVector,
+    λ,
+    d::AbstractVector{P}
+) where {P}

compute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight $λ$ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in $[0,N]$), where $N$ is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting $λ=0$ yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.

Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

See also

grad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.

source
ManoptExamples.grad_acceleration_BezierMethod
grad_acceleration_Bezier(
+    M::AbstractManifold,
+    B::AbstractVector,
+    degrees::AbstractVector{<:Integer}
+    T::AbstractVector
+)

compute the gradient of the discretized acceleration of a (composite) Bézier curve $c_B(t)$ on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in $[0,N]$, where $N$ is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set $λ=0$ therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.

See also

acceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.

source

Riemannian Mean

See the Riemannian mean example to see these in use.

ManoptExamples.RiemannianMeanCostType
RiemannianMeanCost{P}

A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

\[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

Constructor

RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

See also

RiemannianMeanGradient!!, Riemannian_mean_objective

source
ManoptExamples.RiemannianMeanGradient!!Type
RiemannianMeanGradient!!{P} where P

A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

\[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

Constructors

RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

RiemannianMeanGradient!!(
+    M::AbstractManifold,
+    data::AbstractVector{P};
+    initial_vector::T=zero_vector(M, first(data)),
+) where {P,T}

Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

See also

RiemannianMeanCost, Riemannian_mean_objective

source
ManoptExamples.Riemannian_mean_objectiveFunction
Riemannian_mean_objective(data, initial_vector=nothing, evaluation=Manopt.AllocatingEvaluation())
+Riemannian_mean_objective(M, data;
+initial_vector=zero_vector(M, first(data)),
+evaluation=AllocatingEvaluton()
+)

Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

See also

RiemannianMeanCost, RiemannianMeanGradient!!

Note

The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

Note

The objective is available when Manopt.jl is loaded.

source

Robust PCA

See the Robust PCA example to see these in use.

ManoptExamples.RobustPCACostType
RobustPCACost{D,F}

A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

\[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

\[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

Note that this is a mutable struct so you can adapt the $ε$ later on.

Constructor

RobustPCACost(data::AbstractMatrix, ε=1.0)
+RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

source
ManoptExamples.RobustPCAGrad!!Type
RobustPCAGrad!!{D,F}

A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

Note that this is a mutable struct so you can adapt the $ε$ later on.

Constructor

RobustPCAGrad!!(data, ε=1.0)
+RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

source
ManoptExamples.robust_PCA_objectiveFunction
robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
+robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

See also

RobustPCACost, RobustPCAGrad!!

Note

Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the in-place variant to be used, though that keyword is used to setup the objective.

Note

The objective is available when Manopt.jl is loaded.

source

Rosenbrock Function

See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.

ManoptExamples.RosenbrockCostType
RosenbrockCost

Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

\[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

which means that for the 2D case, the manifold $\mathcal M$ is ignored.

See also 📖 Rosenbrock (with slightly different parameter naming).

Constructor

f = Rosenbrock(a,b)

generates the struct/function of the Rosenbrock cost.

source
ManoptExamples.RosenbrockGradient!!Type
RosenbrockGradient

Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

\[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

i.e. also here the manifold is ignored.

Constructor

RosenbrockGradient(a,b)

Functors

grad_f!!(M,p)
+grad_f!!(M, X, p)

evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

source
ManoptExamples.RosenbrockMetricType
RosenbrockMetric <: AbstractMetric

A metric related to the Rosenbrock problem, where the metric at a point $p∈\mathbb R^2$ is given by

\[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_{1}^2 & -2p_{1} \\ + -2p_{1} & 1 +\end{pmatrix},\]

where the $\mathrm{Rb}$ stands for Rosenbrock

source
Base.expMethod
q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)
+exp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)

Compute the exponential map with respect to the RosenbrockMetric.

\[ q = \begin{pmatrix} p_1 + X_1 \\ p_2+X_2+X_1^2\end{pmatrix}\]

source
Base.logMethod
X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)
+log!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)

Compute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any $j ∈ \{1,…,m\}$

\[X = \begin{pmatrix} + q_1 - p_1 \\ + q_2 - p_2 + (q_1 - p_1)^2 +\end{pmatrix}\]

source
Manifolds.inverse_local_metricMethod
inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

Return the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

\[G^{-1}_p = +\begin{pmatrix} + 1 & 2p_1\\ + 2p_1 & 1+4p_1^2 \\ +\end{pmatrix}.\]

source
Manifolds.local_metricMethod
local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

Return the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

\[G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix}\]

source
ManifoldsBase.change_representerMethod
Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)
+change_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)

Given the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.

this function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.

source
ManifoldsBase.innerMethod
inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)

Compute the inner product on $\mathbb R^2$ with respect to the RosenbrockMetric, i.e. for $X,Y \in T_p\mathcal M$ we have

\[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1\\ + -2p_1 & 1 +\end{pmatrix},\]

source

Total Variation

See the Total Variation example to see these in use.

ManoptExamples.Intrinsic_infimal_convolution_TV12Method
Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

Compute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads

\[E(u,v) = + \frac{1}{2}\sum_{i ∈ \mathcal G} + d_{\mathcal M}\bigl(g(\frac{1}{2},v_i,w_i),f_i\bigr) + +\alpha\bigl( β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) \bigr).\]

for more details see [BFPS17, BFPS18].

See also

Total_Variation, second_order_Total_Variation

source
ManoptExamples.Total_VariationFunction
Total_Variation(M,x [,p=2,q=1])

Compute the $\operatorname{TV}^p$ functional for data xon the PowerManifold manifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i$ denote the forward neighbors, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I_i = \{i+e_j, j=1,…,k\}\cap \mathcal G$. The formula reads

\[E^q(x) = \sum_{i ∈ \mathcal G} + \bigl( \sum_{j ∈ \mathcal I_i} d^p_{\mathcal M}(x_i,x_j) \bigr)^{q/p},\]

see [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.

See also

grad_Total_Variation, prox_Total_Variation, second_order_Total_Variation

source
ManoptExamples.adjoint_differential_forward_logsMethod
Y = adjoint_differential_forward_logs(M, p, X)
+adjoint_differential_forward_logs!(M, Y, p, X)

Compute the adjoint differential of forward_logs $F$ occurring, in the power manifold array p, the differential of the function

$F_i(p) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j$

where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$ Let $n$ be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold $\mathcal M' = \mathcal M^n$. The adjoint differential can be computed in place of Y.

Input

  • M – a PowerManifold manifold
  • p – an array of points on a manifold
  • X – a tangent vector to from the n-fold power of p, where n is the ndims of p

Output

Y – resulting tangent vector in $T_p\mathcal M$ representing the adjoint differentials of the logs.

source
ManoptExamples.differential_forward_logsMethod
Y = differential_forward_logs(M, p, X)
+differential_forward_logs!(M, Y, p, X)

compute the differential of forward_logs $F$ on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function

\[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j, \quad i ∈ \mathcal G,\]

where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

Input

  • M – a PowerManifold manifold
  • p – a point.
  • X – a tangent vector.

Output

  • Y – resulting tangent vector in $T_x\mathcal N$ representing the differentials of the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.
source
ManoptExamples.forward_logsMethod
Y = forward_logs(M,x)
+forward_logs!(M, Y, x)

compute the forward logs $F$ (generalizing forward differences) occurring, in the power manifold array, the function

\[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{x_i} x_j,\quad i ∈ \mathcal G,\]

where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$. This can also be done in place of ξ.

Input

  • M – a PowerManifold manifold
  • x – a point.

Output

  • Y – resulting tangent vector in $T_x\mathcal M$ representing the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.
source
ManoptExamples.grad_Total_VariationFunction
X = grad_Total_Variation(M, λ, x[, p=1])
+grad_Total_Variation!(M, X, λ, x[, p=1])

Compute the (sub)gradient $∂f$ of all forward differences occurring, in the power manifold array, i.e. of the function

\[f(p) = \sum_{i}\sum_{j ∈ \mathcal I_i} d^p(x_i,x_j)\]

where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

Input

  • M – a PowerManifold manifold
  • x – a point.

Output

  • X – resulting tangent vector in $T_x\mathcal M$. The computation can also be done in place.
source
ManoptExamples.grad_Total_VariationMethod
X = grad_Total_Variation(M, (x,y)[, p=1])
+grad_Total_Variation!(M, X, (x,y)[, p=1])

compute the (sub) gradient of $\frac{1}{p}d^p_{\mathcal M}(x,y)$ with respect to both $x$ and $y$ (in place of X and Y).

source
ManoptExamples.grad_intrinsic_infimal_convolution_TV12Method
grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

compute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some $f ∈ \mathcal M$ on a PowerManifold manifold $\mathcal M$ this function computes the (sub)gradient of

\[E(u,v) = +\frac{1}{2}\sum_{i ∈ \mathcal G} d_{\mathcal M}(g(\frac{1}{2},v_i,w_i),f_i) ++ \alpha +\bigl( +β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) +\bigr),\]

where both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.

source
ManoptExamples.grad_second_order_Total_VariationFunction
Y = grad_second_order_Total_Variation(M, q[, p=1])
+grad_second_order_Total_Variation!(M, Y, q[, p=1])

computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1, q_2, q_3)$ with respect to all three components of $q∈\mathcal M^3$, where $d_2$ denotes the second order absolute difference using the mid point model, i.e. let

\[\mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};q_1,q_3) \text{ for some geodesic }g\bigr\}\]

denote the mid points between $q_1$ and $q_3$ on the manifold $\mathcal M$. Then the absolute second order difference is defined as

\[d_2(q_1,q_2,q_3) = \min_{c ∈ \mathcal C_{q_1,q_3}} d(c, q_2).\]

While the (sub)gradient with respect to $q_2$ is easy, the other two require the evaluation of an adjoint_Jacobi_field.

The derivation of this gradient can be found in [BBSW16].

source
ManoptExamples.grad_second_order_Total_VariationFunction
grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])

computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1,q_2,q_3)$ with respect to all $q_1,q_2,q_3$ occurring along any array dimension in the point q, where M is the corresponding PowerManifold.

source
ManoptExamples.project_collaborative_TVFunction
project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])
+project_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])

compute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function

\[F^q(x) = \sum_{i∈\mathcal G} + \Bigl( \sum_{j∈\mathcal I_i} + \sum_{k=1}^d \lVert X_{i,j}\rVert_x^p\Bigr)^\frac{q}{p},\]

where $\mathcal G$ is the set of indices for $x∈\mathcal M$ and $\mathcal I_i$ is the set of its forward neighbors. The computation can also be done in place of Θ.

This is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.

source
ManoptExamples.prox_Total_VariationFunction
ξ = prox_Total_Variation(M,λ,x [,p=1])

compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all forward differences occurring in the power manifold array, i.e. $\varphi(xi,xj) = d_{\mathcal M}^p(xi,xj)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

Input

  • M – a manifold M
  • λ – a real value, parameter of the proximal map
  • x – a point.

Optional

(default is given in brackets)

  • p – (1) exponent of the distance of the TV term

Output

  • y – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place
source
ManoptExamples.prox_Total_VariationMethod
[y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])
+prox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])

Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $φ(x,y) = d_{\mathcal M}^p(x,y)$ with parameter λ. A derivation of this closed form solution is given in see [WDS14].

Input

  • M – a manifold M
  • λ – a real value, parameter of the proximal map
  • (x1,x2) – a tuple of two points,

Optional

(default is given in brackets)

  • p – (1) exponent of the distance of the TV term

Output

  • (y1,y2) – resulting tuple of points of the $\operatorname{prox}_{λφ}($(x1,x2)$)$. The result can also be computed in place.
source
ManoptExamples.prox_parallel_TVFunction
y = prox_parallel_TV(M, λ, x [,p=1])
+prox_parallel_TV!(M, y, λ, x [,p=1])

compute the proximal maps $\operatorname{prox}_{λφ}$ of all forward differences occurring in the power manifold array, i.e. $φ(x_i,x_j) = d_{\mathcal M}^p(x_i,x_j)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

Input

  • M – a PowerManifold manifold
  • λ – a real value, parameter of the proximal map
  • x – a point

Optional

(default is given in brackets)

  • p – (1) exponent of the distance of the TV term

Output

  • y – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.

See also prox_Total_Variation

source
ManoptExamples.prox_second_order_Total_VariationFunction
(y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)
+prox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)

Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $\varphi(x_1,x_2,x_3) = d_{\mathcal M}^p(c(x_1,x_3),x_2)$ with parameter λ>0, where $c(x,z)$ denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.

Note that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.

Input

  • M – a manifold

  • λ – a real value, parameter of the proximal map

  • (x1,x2,x3) – a tuple of three points

  • p – (1) exponent of the distance of the TV term

Optional

kwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)

Output

  • (y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.

    Note

    This function requires Manopt.jl to be loaded

source
ManoptExamples.prox_second_order_Total_VariationMethod
y = prox_second_order_Total_Variation(M, λ, x[, p=1])
+prox_second_order_Total_Variation!(M, y, λ, x[, p=1])

compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all centered second order differences occurring in the power manifold array, i.e. $\varphi(x_k,x_i,x_j) = d_2(x_k,x_i.x_j)$, where $k,j$ are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.

Input

  • M – a manifold M
  • λ – a real value, parameter of the proximal map
  • x – a points.

Optional

(default is given in brackets)

  • p – (1) exponent of the distance of the TV term

Output

  • y – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.
Note

This function requires Manopt.jl to be loaded

source
ManoptExamples.second_order_Total_VariationFunction
second_order_Total_Variation(M,x [,p=1])

compute the $\operatorname{TV}_2^p$ functional for data x on the PowerManifold manifoldmanifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i^{\pm}$ denote the forward and backward neighbors, respectively, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I^\pm_i = \{i\pm e_j, j=1,…,k\}\cap \mathcal I$. The formula then reads

\[E(x) = \sum_{i ∈ \mathcal I,\ j_1 ∈ \mathcal I^+_i,\ j_2 ∈ \mathcal I^-_i} +d^p_{\mathcal M}(c_i(x_{j_1},x_{j_2}), x_i),\]

where $c_i(⋅,⋅)$ denotes the mid point between its two arguments that is nearest to $x_i$, see [BBSW16] for a derivation.

In long function names, this might be shortened to TV2.

See also

grad_second_order_Total_Variation, prox_second_order_Total_Variation

source
ManoptExamples.second_order_Total_VariationMethod
second_order_Total_Variation(M,(x1,x2,x3) [,p=1])

Compute the $\operatorname{TV}_2^p$ functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by

\[ \mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};x_1,x_3) \text{ for some geodesic }g\bigr\}\]

the set of mid points between $x_1$ and $x_3$. Then the function reads

\[d_2^p(x_1,x_2,x_3) = \min_{c ∈ \mathcal C} d_{\mathcal M}(c,x_2),\]

see [BBSW16] for a derivation. In long function names, this might be shortened to TV2.

See also

grad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation

source

Literature

[BBSW16]
M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
[BFPS18]
R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
[BFPS17]
R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
[BG18]
R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
[Bou23]
[Cas59]
P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
[Cas63]
P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
[DMSC16]
J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
[PN07]
T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
[WDS14]
A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
diff --git a/dev/objects.inv b/dev/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..4db803861e86efd73fd06a5f18cfdd335ba9ae20 GIT binary patch literal 4016 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 +References · ManoptExamples.jl

Literature

[ASY+19]
T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.
[ABBR23]
S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
[Bac14]
M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
[BBSW16]
M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
[BFSS23]
R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
[BFPS18]
R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
[BFPS17]
R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
[BG18]
R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
[BLSW14]
R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
[BPS16]
R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
[Bou23]
[Cas59]
P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
[Cas63]
P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
[DMSC16]
J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
[LNPS17]
F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
[PN07]
T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
[ROF92]
L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
[SO15]
J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
[WS22]
M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
[WDS14]
A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
diff --git a/dev/search_index.js b/dev/search_index.js new file mode 100644 index 0000000..b8c6710 --- /dev/null +++ b/dev/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Difference-of-Convex-Frank-Wolfe/#A-comparison-of-the-Difference-of-Convex-and-Frank-Wolfe-Algorithm","page":"Frank Wolfe comparison","title":"A comparison of the Difference of Convex and Frank Wolfe Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Ronny Bergmann 2023-11-06","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Introduction","page":"Frank Wolfe comparison","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing ManifoldsBase, Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices mathcal P(n) with the affine invariant metric. Let q_1ldotsq_m in mathcal P(n) be a set of points and mu_1ldotsmu_m be a set of weights, such that they sum to one. We consider then","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmax_pinmathcal C h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"h(p) =\nsum_j=1^m mu_j d^2(pq_i)\nquad text where \nd^2(pq_i) = operatornametrbigl(\n log^2(p^-frac12q_jp^-frac12)\nbig)\nqquadtextandqquad\nmathcal C = pin mathcal M bar Lpreceq p preceq bar U ","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"for a lower bound L and an upper bound U for the matrices in the positive definite sense A preceq B Leftrightarrow (B-A) is positive semi-definite","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"When every one of the weights mu_1 ldots mu_m are equal, this function h is known as the of the set q_1 dots q_m.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And for our example we set","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Random.seed!(42)\nn = 20\nm = 100\nM = SymmetricPositiveDefinite(n)\nq = [rand(M) for _ in 1:m];\nw = rand(m)\nw ./=sum(w)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use as lower and upper bound the arithmetic and geometric mean L and U, respectively.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )\nU = sum( wi * qi for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p0 = (L+U)/2","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can check that it is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Common-Functions","page":"Frank Wolfe comparison","title":"Common Functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Given p in mathcal M, X in T_pmathcal M on the symmetric positive definite matrices M, this method computes the closed form solution to","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_qin mathcal C langle X log_p qrangle\n = operatorname*argmin_qin mathcal C operatornametr(Slog(YqY))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"where mathcal C = q L preceq q preceq U , S = p^-12Xp^-12, and Y=p^-12.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The solution is given by Z=X^-1Qbigl( P^mathrmT-operatornamesgn(D)_+P+hatLbigr)Q^mathrmTX^-1,@ where S=QDQ^mathrmT is a diagonalization of S, hatU-hatL=P^mathrmTP with hatL=Q^mathrmTXLXQ and hatU=Q^mathrmTXUXQ, where -mboxsgn(D)_+ is the diagonal matrix","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatornamediagbigl(\n -operatornamesgn(d_11)_+ ldots -operatornamesgn(d_nn)_+\nbigr)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and D=(d_ij).","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@doc raw\"\"\"\n closed_form_solution!(M, q, L, U, p X)\n\nCompute the closeed form solution of the constraint sub problem in place of ``q``.\n\"\"\"\nfunction closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)\n # extract p^1/2 and p^{-1/2}\n (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)\n # Compute D & Q\n e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk = QDQ'\n D = Diagonal(1.0 .* (e2.values .< 0))\n Q = e2.vectors\n #println(p)\n Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q\n Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q\n P = cholesky(Hermitian(Uprime - Lprime))\n z = P.U' * D * P.U + Lprime\n copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-Difference-of-Convex-Formulation","page":"Frank Wolfe comparison","title":"The Difference of Convex Formulation","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use g(p) = iota_mathcal C(p) as the indicator funtion of the set mathcal C. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function is_pos_def(p; atol=5e-13)\n e = eigen(Symmetric(p))\n return all((e.values .+ atol) .> 0)\nend\nfunction g(p, L, U)\n return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf\nend\nh(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"So we can first check that p0 is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"g(p0,L,U) == 0.0","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"true","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Now setting","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We look for a maximum of h, where g is minimal, i.e. g(p) is zero or in other words p in mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The gradient of h can also be implemented in closed form as","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))\nfunction grad_h!(M, X, p, w, q)\n Y = copy(M, p, X)\n zero_vector!(M, X, p)\n for (wi, qi) in zip(w,q)\n log!(M, Y, p, qi)\n Y .*= - 2.0*wi\n X .+= Y\n end\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can further define the cost, which will just be +infty outside of mathcal C. We define","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_dc(M, p) = g(p, L, U) - h(M, p, w, q)\ngrad_h!(M, X, p) = grad_h!(M, X, p, w, q)\nfunction grad_f_dc!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Here we can omit the gradient of g in the definition of operatornamegrad f, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As the last step, we can provide the closed form solver for the DC sub problem given at iteration k by","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pin mathcal C\n biglangle -operatornamegrad h(p^(k)) exp^-1_p^(k)pbigrangle","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Which we con compute","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution!(M, q, p, X)\n closed_form_solution!(M, q, L, U, p, -X)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For safety, we might want to avoid ending up at the boundary of mathcal C. That is we reduce the distance we walk towards the solution q a bit.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution_safe!(M, q, p, X)\n p_last = copy(M,p) # since p=q might be in place\n closed_form_solution!(M, q, L, U, p, -X)\n q_orig = copy(M,q) # since we do the following in place of q\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n s = 1.0\n d = distance(M, p_last, q_orig);\n # if we are close to zero, we reduce faster.\n α = d < 1/(n^2) ? 0.66 : 0.9995;\n i=0\n while (a < 0) || (b < 0)\n s *= α\n shortest_geodesic!(M, q, p_last, q_orig, s)\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n #println(\"$i a: $a, b = $b with s=$s\")\n i=i+1\n if (i>100) # safety fallback\n #@warn \" $i steps where not enough $s ($α)\\n$a $b\\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs\"\n qe = eigen(q)\n if a < 0\n qe.values .+= min(1e-8, n*abs(min(a,b)))\n else\n qe.values .-= min(1e-8, n*abs(min(a,b)))\n end\n q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n return q\n end\n end\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-DoC-solver-run","page":"Frank Wolfe comparison","title":"The DoC solver run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s compare both methods when they have the same stopping criteria","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;\n gradient=grad_f_dc!,\n sub_problem=dc_sub_solution_safe!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(300) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 30, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(p): -0.77661458292831\nAt iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.\n 16.161776 seconds (17.17 M allocations: 1.670 GiB, 1.83% gc time, 93.45% compilation time)\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 23 iterations\n\n## Parameters\n* sub solver state:\n | InplaceEvaluation()\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 300: not reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 30]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s extract the final point and look at its cost","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_dc = get_solver_result(state1_dc);\nf_dc(M, p1_dc)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.784425242474807","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (1.1886583723800445e-12, 0.06669240322431051)\n (1.3411042178831775e-5, 0.0671353506908023)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For the statistics we extract the recordings from the state","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Define-the-Frank-Wolfe-functions","page":"Frank Wolfe comparison","title":"Define the Frank-Wolfe functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For Frank wolfe, the cost is just defined as -h(p) but the minimisation is constraint to mathcal C, which is enfored by the oracle.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_fw(M, p) = -h(M, p, w, q)\nfunction grad_f_fw!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend\noracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-FW-Solver-Run","page":"Frank Wolfe comparison","title":"The FW Solver Run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Similarly we can run the Frank-Wolfe algorithm with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;\n sub_problem=oracle_fw!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(10^4) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), :Cost, (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 2*10^3, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial f(x): -0.776615\n# 2000 f(x): -0.784420 |Δp|: 0.04611942377596 |grad f(p)|: 0.17693408 |Δgrad f(p)|: 0.17555618\n# 4000 f(x): -0.784421 |Δp|: 0.00372201632005 |grad f(p)|: 0.17694619 |Δgrad f(p)|: 0.00749427\n# 6000 f(x): -0.784422 |Δp|: 0.00205683506784 |grad f(p)|: 0.17695204 |Δgrad f(p)|: 0.00414088\n# 8000 f(x): -0.784422 |Δp|: 0.00140675676260 |grad f(p)|: 0.17695565 |Δgrad f(p)|: 0.00283200\n# 10000 f(x): -0.784422 |Δp|: 0.00106177438611 |grad f(p)|: 0.17695815 |Δgrad f(p)|: 0.00213746\nThe algorithm reached its maximal number of iterations (10000).\n152.781466 seconds (55.53 M allocations: 94.006 GiB, 2.12% gc time, 0.57% compilation time)\n\n# Solver state for `Manopt.jl`s Frank Wolfe Method\nAfter 10000 iterations\n\n## Parameters\n* inverse retraction method: LogarithmicInverseRetraction()\n* retraction method: ExponentialRetraction()\n* sub solver state:\n | InplaceEvaluation()\n\n## Stepsize\nDecreasingStepsize(; length=2.0, factor=1.0, subtrahend=0.0, shift=2)\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 10000: reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"f(x): %f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 2000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we take a look at this result as well","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_fw = get_solver_result(state1_fw);\nf_dc(M, p1_fw)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844220281765162","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And its feasibility","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.904818928410655e-10, 0.06659173821656107)\n (3.245654983213335e-5, 0.06713970236096602)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Statistics","page":"Frank Wolfe comparison","title":"Statistics","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We extract the recorded values","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"# DoC\niter1_dc = get_record(state1_dc, :Iteration, :Iteration)\npk_dc = get_record(state1_dc,:Iteration,:Iterate)\ncosts1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))\ndc_min = minimum(costs1_dc)\n# FW\niter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]\npk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]\ncosts1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x_k)-f^*$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-8, 10^-2),\n xaxis=:log,\n xlims=(1,10^4),\n)\nplot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label=\"Difference of Convex\")\nplot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label=\"Frank-Wolfe\")","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Literature","page":"Frank Wolfe comparison","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\n","category":"page"},{"location":"references/#Literature","page":"References","title":"Literature","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.\n\n\n\nS. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nM. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-of-the-Difference-of-Convex-Algorithms","page":"A Benchmark","title":"Benchmark of the Difference of Convex Algorithms","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Introduction","page":"A Benchmark","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where ghcolon mathcal M to mathbb R are geodesically convex function on the Riemannian manifold mathcal M.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#The-DC-Problem","page":"A Benchmark","title":"The DC Problem","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We start with defining the two convex functions gh and their gradients as well as the DC problem f and its gradient for the problem","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":" operatorname*argmin_pinmathcal M bigl( logbigr(det(p)bigr)bigr)^4 - bigl(log det(p) bigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where the critical points obtain a functional value of -frac14.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where mathcal M is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We first define the corresponding functions","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"g(M, p) = log(det(p))^4\nh(M, p) = log(det(p))^2\nf(M, p) = g(M, p) - h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and their gradients","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"grad_g(M, p) = 4 * (log(det(p)))^3 * p\ngrad_h(M, p) = 2 * log(det(p)) * p\ngrad_f(M, p) = grad_g(M, p) - grad_h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which we can use to verify that the gradients of g and h are correct. We use for that","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"n = 6\nM = SymmetricPositiveDefinite(n)\np0 = log(n) * Matrix{Float64}(I, n, n);\nX0 = 1 / n * Matrix{Float64}(I, n, n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"to tall both checks","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, g, grad_g, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, h, grad_h, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which both pass the test. We continue to define their inplace variants","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"function grad_g!(M, X, p)\n copyto!(M, X, p)\n X .*= 4 * (log(det(p)))^3\n return X\nend\nfunction grad_h!(M, X, p)\n copyto!(M, X, p)\n X .*= 2 * (log(det(p)))\n return X\nend\nfunction grad_f!(M, X, p)\n grad_g!(M, X, p)\n Y = copy(M, p, X)\n grad_h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And compare times for both algorithms, with a bit of debug output.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dca = difference_of_convex_algorithm(\n M,\n f,\n g,\n grad_h!,\n p0;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n (:GradientNorm, \" |grad_f(p)|: %1.9f\"),\n (:Change, \" |δp|: %1.9f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470\n# 5 f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127\n# 10 f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103\n# 15 f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011\nThe algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.\n 3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The cost is","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dca)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25000000000000006","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Similarly the DCPPA performs","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dcppa = difference_of_convex_proximal_point(\n M,\n grad_h!,\n p0;\n g=g,\n grad_g=grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n \" \",\n (:GradientNorm, \"|grad_f(p)|: %1.10f\"),\n (:Change, \"|δp|: %1.10f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470 \n# 5 f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692\n# 10 f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316\n# 15 f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968\n# 25 f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530\n# 30 f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048\n# 35 f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001\nThe algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.\n 1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dcppa)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-I:-Time-comparison","page":"A Benchmark","title":"Benchmark I: Time comparison","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()\ndcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()\nN_max=14\nN = 2:N_max","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and run a benchmark for both algorithms","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"for n in N\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I, n, n)\n bdca = @benchmark difference_of_convex_algorithm(\n $Mn,\n $f,\n $g,\n $grad_h!,\n $pn;\n grad_g=$grad_g!,\n gradient=$grad_f!,\n evaluation=InplaceEvaluation(),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dca_benchmarks[n] = bdca\n bdcppa = @benchmark difference_of_convex_proximal_point(\n $Mn,\n $grad_h!,\n $pn;\n g=$g,\n grad_g=$grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dcppa_benchmarks[n] = bdcppa\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]\ndca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]\ndcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Time (sec.)\")\nplot!(dims, dca_times; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims, dcppa_times; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-II:-Iterations-and-cost.","page":"A Benchmark","title":"Benchmark II: Iterations and cost.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"N2 = [5,10,20,40,80]\ndims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]\ndca_iterations = Dict{Int,Int}()\ndca_costs = Dict{Int,Vector{Float64}}()\ndcppa_iterations = Dict{Int,Int}()\ndcppa_costs = Dict{Int,Vector{Float64}}()","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time for n in N2\n println(n)\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I,n,n);\n @time dca_st = difference_of_convex_algorithm(\n Mn, f, g, grad_h!, pn;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation = InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dca_costs[n] = get_record(dca_st, :Iteration, :Cost)\n dca_iterations[n] = length(dca_costs[n])\n @time dcppa_st = difference_of_convex_proximal_point(\n Mn, grad_h!, pn;\n g=g,\n grad_g=grad_g!,\n λ = i -> 1/(2*n),\n cost = f,\n gradient= grad_f!,\n evaluation = InplaceEvaluation(),\n stepsize = ConstantStepsize(1.0),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)\n dcppa_iterations[n] = length(dcppa_costs[n])\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The iterations are like","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Iterations\")\nplot!(dims2, [values(dca_iterations)...]; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims2, [values(dcppa_iterations)...]; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And for the developtment of the cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where we can see that the DCA needs less iterations than the DCPPA.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Literature","page":"A Benchmark","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\n","category":"page"},{"location":"objectives/#List-of-Objectives-defined-for-the-Examples","page":"Objectives","title":"List of Objectives defined for the Examples","text":"","category":"section"},{"location":"objectives/#Rayleigh","page":"Objectives","title":"Rayleigh Quotient on the Sphere","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rayleigh example (TODO) to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RayleighQuotient.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RayleighQuotientCost","page":"Objectives","title":"ManoptExamples.RayleighQuotientCost","text":"RayleighQuotientCost\n\nA functor representing the Rayleigh Quotient cost function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either\n\nf(p) = p^mathrmTApqquad p 𝕊^n-1\n\nor extended into the embedding as\n\nf(x) = x^mathrmTAx qquad x ℝ^n\n\nwhich is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of 𝕊^n-1.\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientCost(A)\n\nCreate the Rayleigh cost function.\n\nSee also\n\nRayleighQuotientGrad!!, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientGrad!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientGrad!!","text":"RayleighQuotientGrad!!\n\nA functor representing the Rayleigh Quotient gradient function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either\n\noperatornamegrad f(p) = 2 Ap - 2 (p^mathrmTAp)*pqquad p 𝕊^n-1\n\nor taking the Euclidean gradient of the Rayleigh quotient on the sphere as\n\nf(x) = 2Ax qquad x ℝ^n\n\nFor details, see Example 3.62 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientGrad!!(A)\n\nCreate the Rayleigh quotient gradient function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientHess!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientHess!!","text":"RayleighQuotientHess!!\n\nA functor representing the Rayleigh Quotient Hessian.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either\n\noperatornameHess f(p)X = 2 bigl(AX - (p^mathrmTAX)p - (p^mathrmTAp)Xbigr)qquad p 𝕊^n-1 X in T_p𝕊^n-1\n\nor taking the Euclidean Hessian of the Rayleigh quotient on the sphere as\n\n^2f(x)V = 2AV qquad x V ℝ^n\n\nFor details, see Example 5.27 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientHess!!(A)\n\nCreate the Rayleigh quotient Hessian function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientGrad!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#BezierCurves","page":"Objectives","title":"Bézier Curves","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Bezier Curves example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/BezierCurves.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.BezierSegment","page":"Objectives","title":"ManoptExamples.BezierSegment","text":"BezierSegment\n\nA type to capture a Bezier segment. With n points, a Bézier segment of degree n-1 is stored. On the Euclidean manifold, this yields a polynomial of degree n-1.\n\nThis type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.\n\nNot that this can also be used to represent tangent vectors on the control points of a segment.\n\nSee also: de_Casteljau.\n\nConstructor\n\nBezierSegment(pts::AbstractVector)\n\nGiven an abstract vector of pts generate the corresponding Bézier segment.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}, AbstractFloat, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.L2_acceleration_Bezier","text":"L2_acceleration_Bezier(M,B,pts,λ,d)\n\ncompute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.\n\nfracλ2sum_i=0^N d_mathcal M(d_i c_B(i))^2+\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i and d_2 refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by p_i, and to each p_i corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}}} where P","page":"Objectives","title":"ManoptExamples.acceleration_Bezier","text":"acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector{<:AbstractFloat},\n) where {P}\n\ncompute the value of the discrete Acceleration of the composite Bezier curve\n\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i, i=1N, and d_2 refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nThis acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n T::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n T::AbstractVector,\n X::AbstractVector,\n)\n\nEvaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\n\nevaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t,\n η,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t01 on the curve and a tangent vector ηT_β(t)mathcal M. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.de_Casteljau-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any}}","page":"Objectives","title":"ManoptExamples.de_Casteljau","text":"de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function\n\nreturn the Bézier curve β(b_0b_n) 01 mathcal M defined by the control points b_0b_nmathcal M, nmathbb N, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let γ_ab(t) denote the shortest geodesic connecting abmathcal M. Then the curve is defined by the recursion\n\nbeginaligned\n β(tb_0b_1) = gamma_b_0b_1(t)\n β(tb_0b_n) = gamma_β(tb_0b_n-1) β(tb_1b_n)(t)\nendaligned\n\nand P is the type of a point on the Manifold M.\n\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function\n\nGiven a vector of Bézier segments, i.e. a vector of control points B=bigl( (b_00b_n_00)(b_0m b_n_mm) bigr), where the different segments might be of different degree(s) n_0n_m. The resulting composite Bézier curve c_B0m mathcal M consists of m segments which are Bézier curves.\n\nc_B(t) =\n begincases\n β(t b_00b_n_00) text if t 01\n β(t-i b_0ib_n_ii) text if \n t(ii+1 quad i1m-1\n endcases\n\nde_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)\nde_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector\nde_Casteljau(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n) -> AbstractVector\n\nEvaluate the Bézier curve at time t or at times t in T.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Θ::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in 0N, and each depending the corresponding segment(s). Here, N is the length of B. For the mutating variant the result is computed in Θ.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t0N, which depends only on the corresponding segment. Here, N is the length of B. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n t,\n X::BezierSegment\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degree-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.get_Bezier_degree","text":"get_Bezier_degree(M::AbstractManifold, b::BezierSegment)\n\nreturn the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degrees-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_degrees","text":"get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\n\nreturn the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_inner_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_inner_points","text":"get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )\nget_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)\n\nreturns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junction_tangent_vectors-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_junction_tangent_vectors","text":"get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)\n\nreturns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junctions","page":"Objectives","title":"ManoptExamples.get_Bezier_junctions","text":"get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junctions(M::AbstractManifold, b::BezierSegment)\n\nreturns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_points","page":"Objectives","title":"ManoptExamples.get_Bezier_points","text":"get_Bezier_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n reduce::Symbol=:default\n)\nget_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)\n\nreturns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.\n\nThis method reduces the points depending on the optional reduce symbol\n\n:default: no reduction is performed\n:continuous: for a continuous function, the junction points are doubled at b_0i=b_n_i-1i-1, so only b_0i is in the vector.\n:differentiable: for a differentiable function additionally log_b_0ib_1i = -log_b_n_i-1i-1b_n_i-1-1i-1 holds. hence b_n_i-1-1i-1 is omitted.\n\nIf only one segment is given, all points of b, b.pts, is returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_segments-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any, Symbol}} where P","page":"Objectives","title":"ManoptExamples.get_Bezier_segments","text":"get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])\n\nreturns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.\n\nThere are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let c=(c_1c_k) and d=(d_1d_m), where m denotes the number of components the composite Bézier curve consists of. Then\n\n:default: k = m + sum_i=1^m d_i since each component requires one point more than its degree. The points are then ordered in tuples, i.e.\nB = bigl c_1c_d_1+1 (c_d_1+2c_d_1+d_2+2 c_k-m+1+d_mc_k bigr\n:continuous: k = 1+ sum_i=1m d_i, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.\nB = bigl c_1c_d_1+1 c_d_1+1c_d_1+d_2+1 c_k-1+d_mb_k) bigr\n:differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence k = 2 - m + sum_i=1m d_i and at a junction point b_n with its given prior point c_n-1, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as b = exp_c_n(-log_c_n c_n-1) such that the assumed differentiability holds\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector, Any, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.grad_L2_acceleration_Bezier","text":"grad_L2_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector,\n λ,\n d::AbstractVector{P}\n) where {P}\n\ncompute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight λ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in 0N), where N is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting λ=0 yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.\n\nNote that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_acceleration_Bezier-Tuple{ManifoldsBase.AbstractManifold, AbstractVector, AbstractVector{<:Integer}, AbstractVector}","page":"Objectives","title":"ManoptExamples.grad_acceleration_Bezier","text":"grad_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector,\n degrees::AbstractVector{<:Integer}\n T::AbstractVector\n)\n\ncompute the gradient of the discretized acceleration of a (composite) Bézier curve c_B(t) on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in 0N, where N is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set λ=0 therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.\n\nSee also\n\nacceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=Manopt.AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\nnote: Note\n\n\nThe objective is available when Manopt.jl is loaded.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the in-place variant to be used, though that keyword is used to setup the objective.\n\nnote: Note\n\n\nThe objective is available when Manopt.jl is loaded.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also 📖 Rosenbrock (with slightly different parameter naming).\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\ngrad_f!!(M,p)\ngrad_f!!(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockMetric","page":"Objectives","title":"ManoptExamples.RosenbrockMetric","text":"RosenbrockMetric <: AbstractMetric\n\nA metric related to the Rosenbrock problem, where the metric at a point pmathbb R^2 is given by\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\nwhere the mathrmRb stands for Rosenbrock\n\n\n\n\n\n","category":"type"},{"location":"objectives/#Base.exp-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Number}","page":"Objectives","title":"Base.exp","text":"q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)\nexp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)\n\nCompute the exponential map with respect to the RosenbrockMetric.\n\n q = beginpmatrix p_1 + X_1 p_2+X_2+X_1^2endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Base.log-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any}","page":"Objectives","title":"Base.log","text":"X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)\nlog!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)\n\nCompute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any j 1m\n\nX = beginpmatrix\n q_1 - p_1 \n q_2 - p_2 + (q_1 - p_1)^2\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.inverse_local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.inverse_local_metric","text":"inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG^-1_p =\nbeginpmatrix\n 1 2p_1\n 2p_1 1+4p_1^2 \nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.local_metric","text":"local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.change_representer-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, ManifoldsBase.EuclideanMetric, Any, Any}","page":"Objectives","title":"ManifoldsBase.change_representer","text":"Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)\nchange_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)\n\nGiven the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.\n\nthis function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.inner-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Any}","page":"Objectives","title":"ManifoldsBase.inner","text":"inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)\n\nCompute the inner product on mathbb R^2 with respect to the RosenbrockMetric, i.e. for XY in T_pmathcal M we have\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1\n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\nnote: Note\n\n\nThe objective is available when Manopt.jl is loaded.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Total-Variation","page":"Objectives","title":"Total Variation","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Total Variation example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/TotalVariation.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.Intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.Intrinsic_infimal_convolution_TV12","text":"Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\nCompute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads\n\nE(uv) =\n frac12sum_i mathcal G\n d_mathcal Mbigl(g(frac12v_iw_i)f_ibigr)\n +alphabigl( βmathrmTV(v) + (1-β)mathrmTV_2(w) bigr)\n\nfor more details see [BFPS17, BFPS18].\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation-NTuple{4, Any}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation","text":"L2_Total_Variation(M, p_data, α, p)\n\ncompute the ℓ^2-TV functional on the PowerManifold M for given (fixed) data p_data (on M), a nonnegative weight α, and evaluated at p (on M), i.e.\n\nE(p) = d_mathcal M^2(fp) + alpha operatornameTV(p)\n\nSee also\n\nTotal_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation_1_2-Tuple{ManifoldsBase.PowerManifold, Vararg{Any, 4}}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation_1_2","text":"L2_Total_Variation_1_2(M, f, α, β, x)\n\ncompute the ℓ^2-TV-TV2 functional on the PowerManifold manifold M for given (fixed) data f (on M), nonnegative weight α, β, and evaluated at x (on M), i.e.\n\nE(x) = d_mathcal M^2(fx) + alphaoperatornameTV(x)\n + βoperatornameTV_2(x)\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_second_order_Total_Variation-Tuple{ManifoldsBase.PowerManifold, Any, Any, Any}","page":"Objectives","title":"ManoptExamples.L2_second_order_Total_Variation","text":"L2_second_order_Total_Variation(M, f, β, x)\n\ncompute the ℓ^2-TV2 functional on the PowerManifold manifold M for given data f, nonnegative parameter β, and evaluated at x, i.e.\n\nE(x) = d_mathcal M^2(fx) + βoperatornameTV_2(x)\n\nas used in [BBSW16].\n\nSee also\n\nsecond_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Total_Variation","page":"Objectives","title":"ManoptExamples.Total_Variation","text":"Total_Variation(M,x [,p=2,q=1])\n\nCompute the operatornameTV^p functional for data xon the PowerManifold manifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i denote the forward neighbors, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I_i = i+e_j j=1kcap mathcal G. The formula reads\n\nE^q(x) = sum_i mathcal G\n bigl( sum_j mathcal I_i d^p_mathcal M(x_ix_j) bigr)^qp\n\nsee [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.\n\nSee also\n\ngrad_Total_Variation, prox_Total_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.adjoint_differential_forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.adjoint_differential_forward_logs","text":"Y = adjoint_differential_forward_logs(M, p, X)\nadjoint_differential_forward_logs!(M, Y, p, X)\n\nCompute the adjoint differential of forward_logs F occurring, in the power manifold array p, the differential of the function\n\nF_i(p) = sum_j mathcal I_i log_p_i p_j\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i Let n be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold mathcal M = mathcal M^n. The adjoint differential can be computed in place of Y.\n\nInput\n\nM – a PowerManifold manifold\np – an array of points on a manifold\nX – a tangent vector to from the n-fold power of p, where n is the ndims of p\n\nOutput\n\nY – resulting tangent vector in T_pmathcal M representing the adjoint differentials of the logs.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_forward_logs-Tuple{ManifoldsBase.PowerManifold, Any, Any}","page":"Objectives","title":"ManoptExamples.differential_forward_logs","text":"Y = differential_forward_logs(M, p, X)\ndifferential_forward_logs!(M, Y, p, X)\n\ncompute the differential of forward_logs F on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function\n\nF_i(x) = sum_j mathcal I_i log_p_i p_j quad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\np – a point.\nX – a tangent vector.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal N representing the differentials of the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.forward_logs","text":"Y = forward_logs(M,x)\nforward_logs!(M, Y, x)\n\ncompute the forward logs F (generalizing forward differences) occurring, in the power manifold array, the function\n\nF_i(x) = sum_j mathcal I_i log_x_i x_jquad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i. This can also be done in place of ξ.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal M representing the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, λ, x[, p=1])\ngrad_Total_Variation!(M, X, λ, x[, p=1])\n\nCompute the (sub)gradient f of all forward differences occurring, in the power manifold array, i.e. of the function\n\nf(p) = sum_isum_j mathcal I_i d^p(x_ix_j)\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nX – resulting tangent vector in T_xmathcal M. The computation can also be done in place.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}, Any}} where T","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, (x,y)[, p=1])\ngrad_Total_Variation!(M, X, (x,y)[, p=1])\n\ncompute the (sub) gradient of frac1pd^p_mathcal M(xy) with respect to both x and y (in place of X and Y).\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.grad_intrinsic_infimal_convolution_TV12","text":"grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\ncompute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some f mathcal M on a PowerManifold manifold mathcal M this function computes the (sub)gradient of\n\nE(uv) =\nfrac12sum_i mathcal G d_mathcal M(g(frac12v_iw_i)f_i)\n+ alpha\nbigl(\nβmathrmTV(v) + (1-β)mathrmTV_2(w)\nbigr)\n\nwhere both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"Y = grad_second_order_Total_Variation(M, q[, p=1])\ngrad_second_order_Total_Variation!(M, Y, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1 q_2 q_3) with respect to all three components of qmathcal M^3, where d_2 denotes the second order absolute difference using the mid point model, i.e. let\n\nmathcal C = bigl c mathcal M g(tfrac12q_1q_3) text for some geodesic gbigr\n\ndenote the mid points between q_1 and q_3 on the manifold mathcal M. Then the absolute second order difference is defined as\n\nd_2(q_1q_2q_3) = min_c mathcal C_q_1q_3 d(c q_2)\n\nWhile the (sub)gradient with respect to q_2 is easy, the other two require the evaluation of an adjoint_Jacobi_field.\n\nThe derivation of this gradient can be found in [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation-2","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1q_2q_3) with respect to all q_1q_2q_3 occurring along any array dimension in the point q, where M is the corresponding PowerManifold.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.project_collaborative_TV","page":"Objectives","title":"ManoptExamples.project_collaborative_TV","text":"project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])\nproject_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])\n\ncompute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function\n\nF^q(x) = sum_imathcal G\n Bigl( sum_jmathcal I_i\n sum_k=1^d lVert X_ijrVert_x^pBigr)^fracqp\n\nwhere mathcal G is the set of indices for xmathcal M and mathcal I_i is the set of its forward neighbors. The computation can also be done in place of Θ.\n\nThis is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"ξ = prox_Total_Variation(M,λ,x [,p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all forward differences occurring in the power manifold array, i.e. varphi(xixj) = d_mathcal M^p(xixj) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a point.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}, Int64}} where T","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"[y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])\nprox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])\n\nCompute the proximal map operatornameprox_λvarphi of φ(xy) = d_mathcal M^p(xy) with parameter λ. A derivation of this closed form solution is given in see [WDS14].\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\n(x1,x2) – a tuple of two points,\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\n(y1,y2) – resulting tuple of points of the operatornameprox_λφ((x1,x2)). The result can also be computed in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.prox_parallel_TV","page":"Objectives","title":"ManoptExamples.prox_parallel_TV","text":"y = prox_parallel_TV(M, λ, x [,p=1])\nprox_parallel_TV!(M, y, λ, x [,p=1])\n\ncompute the proximal maps operatornameprox_λφ of all forward differences occurring in the power manifold array, i.e. φ(x_ix_j) = d_mathcal M^p(x_ix_j) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a PowerManifold manifold\nλ – a real value, parameter of the proximal map\nx – a point\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.\n\nSee also prox_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"(y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)\nprox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)\n\nCompute the proximal map operatornameprox_λvarphi of varphi(x_1x_2x_3) = d_mathcal M^p(c(x_1x_3)x_2) with parameter λ>0, where c(xz) denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.\n\nNote that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.\n\nInput\n\nM – a manifold\nλ – a real value, parameter of the proximal map\n(x1,x2,x3) – a tuple of three points\np – (1) exponent of the distance of the TV term\n\nOptional\n\nkwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)\n\nOutput\n\n(y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.\nnote: Note\n\nThis function requires Manopt.jl to be loaded\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation-Union{Tuple{T}, Tuple{N}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any, Int64}} where {N, T}","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"y = prox_second_order_Total_Variation(M, λ, x[, p=1])\nprox_second_order_Total_Variation!(M, y, λ, x[, p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all centered second order differences occurring in the power manifold array, i.e. varphi(x_kx_ix_j) = d_2(x_kx_ix_j), where kj are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a points.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.\n\nnote: Note\nThis function requires Manopt.jl to be loaded\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,x [,p=1])\n\ncompute the operatornameTV_2^p functional for data x on the PowerManifold manifoldmanifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i^pm denote the forward and backward neighbors, respectively, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I^pm_i = ipm e_j j=1kcap mathcal I. The formula then reads\n\nE(x) = sum_i mathcal I j_1 mathcal I^+_i j_2 mathcal I^-_i\nd^p_mathcal M(c_i(x_j_1x_j_2) x_i)\n\nwhere c_i() denotes the mid point between its two arguments that is nearest to x_i, see [BBSW16] for a derivation.\n\nIn long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation-Union{Tuple{T}, Tuple{MT}, Tuple{MT, Tuple{T, T, T}}, Tuple{MT, Tuple{T, T, T}, Any}} where {MT<:ManifoldsBase.AbstractManifold, T}","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,(x1,x2,x3) [,p=1])\n\nCompute the operatornameTV_2^p functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by\n\n mathcal C = bigl c mathcal M g(tfrac12x_1x_3) text for some geodesic gbigr\n\nthe set of mid points between x_1 and x_3. Then the function reads\n\nd_2^p(x_1x_2x_3) = min_c mathcal C d_mathcal M(cx_2)\n\nsee [BBSW16] for a derivation. In long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Literature","page":"Objectives","title":"Literature","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/HyperparameterOptimization/#Hyperparameter-optimization","page":"Hyperparameter optimziation","title":"Hyperparameter optimization","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Mateusz Baran 2024-08-03","category":"page"},{"location":"examples/HyperparameterOptimization/#Introduction","page":"Hyperparameter optimziation","title":"Introduction","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"This example shows how to automatically select the best values of hyperparameters of optimization procedures such as retraction, vector transport, size of memory in L-BFGS or line search coefficients. Hyperparameter optimization relies on the Optuna [ASY+19] Python library because it is much more advanced than similar Julia projects, offering Bayesian optimization with conditional hyperparameters and early stopping.","category":"page"},{"location":"examples/HyperparameterOptimization/#General-definitions","page":"Hyperparameter optimziation","title":"General definitions","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Here are some general definitions that you will most likely be able to directly use for your problem without any changes. Just remember to install optuna, for example using CondaPkg Julia library.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"using Manifolds, Manopt\nusing PythonCall\nusing BenchmarkTools\nusing LineSearches\n\n# This script requires optuna to be available through PythonCall\n# You can install it for example using\n# using CondaPkg\n# ]conda add optuna\n\noptuna = pyimport(\"optuna\")\n\nnorm_inf(M::AbstractManifold, p, X) = norm(X, Inf)\n\n# TTsuggest_ structs collect data from a calibrating optimization run\n# that is handled by compute_pruning_losses function\n\nstruct TTsuggest_int\n suggestions::Dict{String,Int}\nend\nfunction (s::TTsuggest_int)(name::String, a, b)\n return s.suggestions[name]\nend\nstruct TTsuggest_float\n suggestions::Dict{String,Float64}\nend\nfunction (s::TTsuggest_float)(name::String, a, b; log::Bool=false)\n return s.suggestions[name]\nend\nstruct TTsuggest_categorical\n suggestions::Dict{String,Any}\nend\nfunction (s::TTsuggest_categorical)(name::String, vals)\n return s.suggestions[name]\nend\nstruct TTreport\n reported_vals::Vector{Float64}\nend\nfunction (r::TTreport)(val, i)\n return push!(r.reported_vals, val)\nend\nstruct TTshould_prune end\n(::TTshould_prune)() = Py(false)\nstruct TracingTrial\n suggest_int::TTsuggest_int\n suggest_float::TTsuggest_float\n suggest_categorical::TTsuggest_categorical\n report::TTreport\n should_prune::TTshould_prune\nend\n\nfunction compute_pruning_losses(\n od,\n int_suggestions::Dict{String,Int},\n float_suggestions::Dict{String,Float64},\n categorical_suggestions::Dict{String,Int},\n)\n tt = TracingTrial(\n TTsuggest_int(int_suggestions),\n TTsuggest_float(float_suggestions),\n TTsuggest_categorical(categorical_suggestions),\n TTreport(Float64[]),\n TTshould_prune(),\n )\n od(tt)\n return tt.report.reported_vals\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"The next part is your hyperparameter optimization objective. The ObjectiveData struct contains all relevant information about the sequence of specific problems. The outermost key part is the N_range field. Early stopping requires a series of progressively more complex problems. They will be attempted from the most simple one to the most complex one, and are specified by the values of N in that vector.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"mutable struct ObjectiveData{TObj,TGrad}\n obj::TObj\n grad::TGrad\n N_range::Vector{Int}\n gtol::Float64\n vts::Vector{AbstractVectorTransportMethod}\n retrs::Vector{AbstractRetractionMethod}\n manifold_constructors::Vector{Tuple{String,Any}}\n pruning_losses::Vector{Float64}\n manopt_stepsize::Vector{Tuple{String,Any}}\n obj_loss_coeff::Float64\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"In the example below we optimize hyperparameters on a sequence of Rosenbrock-type problems restricted to spheres:","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"argmin_p in S^N-1 sum_i=1^N2 (1-p_2i)^2 + 100 (p_2i+1 - p_2i^2)^2","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"where N in 2 16 128 1024 8192 65536.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"obj and grad are the objective and gradient, here defined as below. Note that gradient works in-place and variants without manifolds are also provided for easier comparison with other libraries like Optim.jl. It is easiest when problems for different values N can be distinguished by being defined on successively larger manifolds but the script could be modified so that it’s not necessary.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"pruning_losses and compute_pruning_losses are related to early pruning used in Optuna and you shouldn’t have to modify them.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"function f_rosenbrock(x)\n result = 0.0\n for i in 1:2:length(x)\n result += (1.0 - x[i])^2 + 100.0 * (x[i + 1] - x[i]^2)^2\n end\n return result\nend\nfunction f_rosenbrock(::AbstractManifold, x)\n return f_rosenbrock(x)\nend\n\nfunction g_rosenbrock!(storage, x)\n for i in 1:2:length(x)\n storage[i] = -2.0 * (1.0 - x[i]) - 400.0 * (x[i + 1] - x[i]^2) * x[i]\n storage[i + 1] = 200.0 * (x[i + 1] - x[i]^2)\n end\n return storage\nend\nfunction g_rosenbrock!(M::AbstractManifold, storage, x)\n g_rosenbrock!(storage, x)\n riemannian_gradient!(M, storage, x, storage)\n return storage\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Next, gtol is the tolerance used for the stopping criterion in optimization. vts and retrs are, respectively, vector transports and retraction methods selected through hyperparameter optimization. Some items need to be different for different values of N, for example the manifold over which the problem is defined. This is handled by manifold_constructors which is then defined as Tuple{String,Any}[(\"Sphere\", N -> Manifolds.Sphere(N - 1))], where the string \"Sphere\" is used to identify the manifold family and the next element is a function that transforms the value of N to the manifold for the problem of size N.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Similarly, different stepsize selection methods may be considered. This is handled by the field manopt_stepsize. It will be easiest to see how it works by looking at how it is initialized:","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Tuple{String,Any}[\n (\"LS-HZ\", M -> Manopt.LineSearchesStepsize(ls_hz)),\n (\"Wolfe-Powell\", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),\n]","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"We have a string that identifies the line search method name and a constructor of the line search which takes relevant arguments like the manifold or a numerical parameter.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"The next part is the trial evaluation procedure. This is one of the more important places which need to be customized to your problem. This is the point where we tell Optuna about the relevant optimization hyperparameters and use them to define specific problems. The hyperparameter optimization is a multiobjective problem: we want as good problem objectives as possible and as low times as possible. As Optuna doesn’t currently support multicriteria pruning, which is important for obtaining a solution in a reasonable amount of time, we use a linear combination of sub-objectives to turn the problem into a single-criterion optimization. The hyperparameter optimization objective is a linear combination of achieved objectives the relative weight is controlled by objective.obj_loss_coeff.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"function (objective::ObjectiveData)(trial)\n # Here we use optuna to select memory length for L-BFGS -- an integer in the range between 2 and 30, referenced by name \"mem_len\"\n mem_len = trial.suggest_int(\"mem_len\", 2, 30)\n\n # Here we select a vector transport and retraction methods, one of those specified in the `ObjectiveData`.\n vt = objective.vts[pyconvert(\n Int,\n trial.suggest_categorical(\n \"vector_transport_method\", Vector(eachindex(objective.vts))\n ),\n )]\n retr = objective.retrs[pyconvert(\n Int,\n trial.suggest_categorical(\"retraction_method\", Vector(eachindex(objective.retrs))),\n )]\n\n # Here we select the manifold constructor, in case we want to try different manifolds for our problem. For example one could try defining a problem with orthogonality constraints on Stiefel, Grassmann or flag manifold.\n manifold_name, manifold_constructor = objective.manifold_constructors[pyconvert(\n Int,\n trial.suggest_categorical(\n \"manifold\", Vector(eachindex(objective.manifold_constructors))\n ),\n )]\n\n # Here the stepsize selection method type is selected.\n manopt_stepsize_name, manopt_stepsize_constructor = objective.manopt_stepsize[pyconvert(\n Int,\n trial.suggest_categorical(\n \"manopt_stepsize\", Vector(eachindex(objective.manopt_stepsize))\n ),\n )]\n\n # This parametrizes stepsize selection methods with relevant numerical parameters.\n local c1_val, c2_val, hz_sigma\n if manopt_stepsize_name == \"Wolfe-Powell\"\n c1_val = pyconvert(\n Float64, trial.suggest_float(\"Wolfe-Powell c1\", 1e-5, 1e-2; log=true)\n )\n c2_val =\n 1.0 - pyconvert(\n Float64, trial.suggest_float(\"Wolfe-Powell 1-c2\", 1e-4, 1e-2; log=true)\n )\n elseif manopt_stepsize_name == \"Improved HZ\"\n hz_sigma = pyconvert(Float64, trial.suggest_float(\"Improved HZ sigma\", 0.1, 0.9))\n end\n\n # The current loss estimate, taking into account estimated loss values for larger, not-yet-evaluated values of `N`.\n loss = sum(objective.pruning_losses)\n\n # Here iterate over problems we want to optimize for\n # from smallest to largest; pruning should stop the iteration early\n # if the hyperparameter set is not promising\n cur_i = 0\n for N in objective.N_range\n # Here we define the initial point for the optimization procedure\n p0 = zeros(N)\n p0[1] = 1\n M = manifold_constructor(N)\n # Here we construct the specific line search to be used\n local ls\n if manopt_stepsize_name == \"Wolfe-Powell\"\n ls = manopt_stepsize_constructor(M, c1_val, c2_val)\n elseif manopt_stepsize_name == \"Improved HZ\"\n ls = manopt_stepsize_constructor(M, hz_sigma)\n else\n ls = manopt_stepsize_constructor(M)\n end\n manopt_time, manopt_iters, manopt_obj = benchmark_time_state(\n ManoptQN(),\n M,\n N,\n objective.obj,\n objective.grad,\n p0,\n ls,\n pyconvert(Int, mem_len),\n objective.gtol;\n vector_transport_method=vt,\n retraction_method=retr,\n )\n # TODO: turn this into multi-criteria optimization when Optuna starts supporting\n # pruning in such problems\n loss -= objective.pruning_losses[cur_i + 1]\n loss += manopt_time + objective.obj_loss_coeff * manopt_obj\n trial.report(loss, cur_i)\n if pyconvert(Bool, trial.should_prune().__bool__())\n throw(PyException(optuna.TrialPruned()))\n end\n cur_i += 1\n end\n return loss\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"In the following benchmarking code you will most likely have to adapt solver parameters. This is designed around quasi_Newton but can be adapted to any solver as needed. The example below performs a small number of trials for quick rendering but in practice you should aim for at least a few thousand trials (the n_trials parameter).","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"# An abstract type in case we want to try different optimization packages.\nabstract type AbstractOptimConfig end\nstruct ManoptQN <: AbstractOptimConfig end\n\n# Benchmark that evaluates hyperparameters. Returns time to reach the solution, number of iterations and final value of the objective.\nfunction benchmark_time_state(\n ::ManoptQN,\n M::AbstractManifold,\n N,\n f,\n g!,\n p0,\n stepsize::Manopt.Stepsize,\n mem_len::Int,\n gtol::Real;\n kwargs...,\n)\n manopt_sc = StopWhenGradientNormLess(gtol; norm=norm_inf) | StopAfterIteration(1000)\n mem_len = min(mem_len, manifold_dimension(M))\n manopt_state = quasi_Newton(\n M,\n f,\n g!,\n p0;\n stepsize=stepsize,\n evaluation=InplaceEvaluation(),\n return_state=true,\n memory_size=mem_len,\n stopping_criterion=manopt_sc,\n debug=[],\n kwargs...,\n )\n bench_manopt = @benchmark quasi_Newton(\n $M,\n $f,\n $g!,\n $p0;\n stepsize=$(stepsize),\n evaluation=$(InplaceEvaluation()),\n memory_size=$mem_len,\n stopping_criterion=$(manopt_sc),\n debug=[],\n $kwargs...,\n )\n iters = get_count(manopt_state, :Iterations)\n final_val = f(M, manopt_state.p)\n return median(bench_manopt.times) / 1000, iters, final_val\nend\n\n\"\"\"\n lbfgs_study(; pruning_coeff::Float64=0.95)\n\nSet up the example hyperparameter optimization study.\n\"\"\"\nfunction lbfgs_study(; pruning_coeff::Float64=0.95)\n Ns = [2^n for n in 1:3:12]\n ls_hz = LineSearches.HagerZhang()\n od = ObjectiveData(\n f_rosenbrock,\n g_rosenbrock!,\n Ns,\n 1e-5,\n AbstractVectorTransportMethod[ParallelTransport(), ProjectionTransport()],\n [ExponentialRetraction(), ProjectionRetraction()],\n Tuple{String,Any}[(\"Sphere\", N -> Manifolds.Sphere(N - 1))],\n zeros(Float64, eachindex(Ns)),\n Tuple{String,Any}[\n (\"LS-HZ\", M -> Manopt.LineSearchesStepsize(ls_hz)),\n #(\"Improved HZ\", (M, sigma) -> HagerZhangLinesearch(M; sigma=sigma)),\n (\"Wolfe-Powell\", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),\n ],\n 10.0,\n )\n\n # Here you need to define baseline values of all hyperparameters\n baseline_pruning_losses = compute_pruning_losses(\n od,\n Dict(\"mem_len\" => 4),\n Dict(\n \"Wolfe-Powell c1\" => 1e-4,\n \"Wolfe-Powell 1-c2\" => 1e-3,\n \"Improved HZ sigma\" => 0.9,\n ),\n Dict(\n \"vector_transport_method\" => 1,\n \"retraction_method\" => 1,\n \"manifold\" => 1,\n \"manopt_stepsize\" => 1,\n ),\n )\n od.pruning_losses = pruning_coeff * baseline_pruning_losses\n\n study = optuna.create_study(; study_name=\"L-BFGS\")\n # Here you can specify number of trials and timeout (in seconds).\n study.optimize(od; n_trials=1000, timeout=500)\n println(\"Best params is $(study.best_params) with value $(study.best_value)\")\n selected_manifold = od.manifold_constructors[pyconvert(Int, study.best_params[\"manifold\"])][1]\n selected_retraction_method = od.retrs[pyconvert(Int, study.best_params[\"retraction_method\"])]\n selected_vector_transport = od.vts[pyconvert(Int, study.best_params[\"vector_transport_method\"])]\n println(\"Selected manifold: $(selected_manifold)\")\n println(\"Selected retraction method: $(selected_retraction_method)\")\n println(\"Selected vector transport method: $(selected_vector_transport)\")\n return study\nend\n\nlbfgs_study()","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Best params is {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093} with value 5510.963227438757\nSelected manifold: Sphere\nSelected retraction method: ExponentialRetraction()\nSelected vector transport method: ProjectionTransport()\n\n[I 2024-03-16 18:04:17,965] A new study created in memory with name: L-BFGS\n[I 2024-03-16 18:04:45,996] Trial 0 finished with value: 5639.789870295856 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00027288064367948073, 'Wolfe-Powell 1-c2': 0.00026503788892114045}. Best is trial 0 with value: 5639.789870295856.\n[I 2024-03-16 18:05:11,860] Trial 1 finished with value: 5635.936370295855 and parameters: {'mem_len': 11, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.002743250060163298, 'Wolfe-Powell 1-c2': 0.00037986521186922096}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:05:39,386] Trial 2 finished with value: 5673.101441724422 and parameters: {'mem_len': 26, 'vector_transport_method': 2, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00043339485784312605, 'Wolfe-Powell 1-c2': 0.0027302649933974173}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:10,279] Trial 3 finished with value: 7410.818084581564 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:37,995] Trial 4 finished with value: 5756.566226449636 and parameters: {'mem_len': 25, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:42,755] Trial 5 pruned. \n[I 2024-03-16 18:06:58,577] Trial 6 pruned. \n[I 2024-03-16 18:07:15,366] Trial 7 pruned. \n[I 2024-03-16 18:07:40,605] Trial 8 finished with value: 5581.7437274386975 and parameters: {'mem_len': 7, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0010567355712112379, 'Wolfe-Powell 1-c2': 0.003948002490203636}. Best is trial 8 with value: 5581.7437274386975.\n[I 2024-03-16 18:07:46,021] Trial 9 pruned. \n[I 2024-03-16 18:08:11,512] Trial 10 finished with value: 5510.963227438757 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:08:35,914] Trial 11 finished with value: 5521.388656010121 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006738829952322474, 'Wolfe-Powell 1-c2': 0.0010639659137420014}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:00,317] Trial 12 finished with value: 5521.36958458155 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00010975606104676191, 'Wolfe-Powell 1-c2': 0.0007663843095951679}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:24,680] Trial 13 finished with value: 5520.7020845815505 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 6.743450835567536e-05, 'Wolfe-Powell 1-c2': 0.0008779759729737719}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:50,268] Trial 14 pruned. \n[I 2024-03-16 18:10:15,494] Trial 15 finished with value: 5595.119584581556 and parameters: {'mem_len': 6, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 8.147444451747575e-05, 'Wolfe-Powell 1-c2': 0.00012268601197923553}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:10:25,264] Trial 16 pruned. \n[I 2024-03-16 18:10:50,209] Trial 17 finished with value: 5572.474513153012 and parameters: {'mem_len': 5, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0015998473664092935, 'Wolfe-Powell 1-c2': 0.0005109172020536229}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:10:54,772] Trial 18 pruned. \n[I 2024-03-16 18:11:04,534] Trial 19 pruned. \n[I 2024-03-16 18:11:28,873] Trial 20 finished with value: 5512.3824417244705 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.1581668103921961e-05, 'Wolfe-Powell 1-c2': 0.0002691056199427656}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:11:53,327] Trial 21 finished with value: 5529.088227438692 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.3645031886009879e-05, 'Wolfe-Powell 1-c2': 0.0001863385753491203}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:12:17,911] Trial 22 finished with value: 5522.041370295835 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.0030173525937465e-05, 'Wolfe-Powell 1-c2': 0.000543991948003312}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:12:27,645] Trial 23 pruned. \n[I 2024-03-16 18:12:52,163] Trial 24 finished with value: 5528.840941724406 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.000245400433292576, 'Wolfe-Powell 1-c2': 0.000133639324295565}. Best is trial 10 with value: 5510.963227438757.\n\nPython: ","category":"page"},{"location":"examples/HyperparameterOptimization/#Summary","page":"Hyperparameter optimziation","title":"Summary","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"We’ve shown how to automatically select the best hyperparameter values for your optimization problem.","category":"page"},{"location":"examples/HyperparameterOptimization/#Literature","page":"Hyperparameter optimziation","title":"Literature","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.\n\n\n\n","category":"page"},{"location":"examples/#List-of-Examples","page":"Overview","title":"List of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation Comment\nA Benchmark for Difference of Convex contains a few simple functions \nBézier Curves and Minimizing their Acceleration tools Bézier curves and their acceleration 📚 \nSolving Rosenbrock with Difference of Convex DoC split of Rosenbrock 📚 uses a Rosenbrock based metric\nDifference of Convex vs. Frank-Wolfe closed-form sub solver\nRiemannian Mean f, operatornamegradf (A/I), objective 📚 \nRobust PCA f, operatornamegradf (A/I), objective 📚 \nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚 \nThe Rayleigh Quotient f, operatornamegradf (A/I), operatornameHessf (A/I), objective 📚 \nTotal Variation Minimization f, operatornameproxf (A/I), objective 📚 ","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Solving-Rosenbrock-with-the-Difference-of-Convex-Algorithm","page":"Rosenbrock Metric","title":"Solving Rosenbrock with the Difference of Convex Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Introduction","page":"Rosenbrock Metric","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Both the Rosenbrock problem","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":" operatorname*argmin_xin ℝ^2 abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where ab0 and usually b=1 and a gg b, we know the minimizer x^* = (bb^2)^mathrmT, and also the (Euclidean) gradient","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"nabla f(x) =\n beginpmatrix\n 4a(x_1^2-x_2) -2a(x_1^2-x_2)\n endpmatrix\n +\n beginpmatrix\n 2(x_1-b) 0\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Furthermore, the RosenbrockMetric can be used on ℝ^2, that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"XY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"The Euclidean Gradient\nThe Riemannian gradient descent with respect to the RosenbrockMetric\nThe Euclidean Difference of Convex Algorithm\nThe Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Where we obtain a difference of convex problem by writing","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f(x) = abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2\n = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 - bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"g(x) = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 quadtext and quad h(x) = bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nimport Manopt: set_manopt_parameter!\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\ngreen = paul_tol[\"mutedgreen\"]\nsand = paul_tol[\"mutedsand\"]\nteal = paul_tol[\"mutedteal\"]\ngrey = paul_tol[\"mutedgrey\"]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"To emphasize the effect, we choose a quite large value of a.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"a = 2*10^5\nb = 1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and use the starting point and a direction to check gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"p0 = [0.1, 0.2]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Euclidean Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Euclidean gradient we can just use the same approach as in the Rosenbrock example","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M = ℝ^2\nf = ManoptExamples.RosenbrockCost(M; a=a, b=b)\n∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"define a common debug vector","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"debug_vec = [\n (:Iteration, \"# %-8d \"),\n (:Cost, \"F(x): %1.4e\"),\n \" \",\n (:Change, \"|δp|: %1.4e | \"),\n (:GradientNorm, \"|grad f|: %1.6e\"),\n :Stop,\n \"\\n\",\n ]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and call the gradient descent algorithm","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^7],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03\n# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04\n# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06\n# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08\n# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 53073227 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Riemannian Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Riemannian case, we define","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and the gradient is now adopted to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_f!(M, X, p)\n ∇f!!(M, X, p)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_f(M, p)\n X = zero_vector(M, p)\n return grad_f!(M, X, p)\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^6],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 1000000 F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04\n# 2000000 F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 2443750 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Euclidean Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the convex case, we have to first introduce the two parts of the cost.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;\nf2(M, p; a=100, b=1) = (p[1] - b[1])^2;\ng(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)\nh(M, p; a=100, b=1) = f2(M, p; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and their (Euclidan) gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function ∇h!(M, X, p; a=100, b=1)\n X[1] = 2*(p[1]-b)\n X[2] = 0\n return X\nend\nfunction ∇h(M, p; a=100, b=1)\n X = zero(p)\n ∇h!(M, X, p; a=a, b=b)\n return X\nend\nfunction ∇g!(M, X, p; a=100, b=1)\n X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)\n X[2] = -2*a*(p[1]^2-p[2])\n return X\nend\nfunction ∇g(M, p; a=100, b=1)\n X = zero(p)\n ∇g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and we define for convenience","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docE_g(M, p) = g(M, p; a=a, b=b)\ndocE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)\ndocE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)\ndocE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)\nfunction docE_∇f!(M, X, p)\n Y = zero_vector(M, p)\n docE_∇g!(M, X, p)\n docE_∇h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we call the difference of convex algorithm on Eucldiean space ℝ^2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"E_doc_state = difference_of_convex_algorithm(\n M, docE_f, docE_g, docE_∇h!, p0;\n gradient=docE_∇f!,\n grad_g = docE_∇g!,\n debug=[debug_vec..., 10^4],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_hess=nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000 F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04\n# 20000 F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 26549 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping criterion\n | \n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Riemannian Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"We first have to again defined the gradients with respect to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_h!(M, X, p; a=100, b=1)\n ∇h!(M, X, p; a=a, b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_h(M, p; a=100, b=1)\n X = zero(p)\n grad_h!(M, X, p; a=a, b=b)\n return X\nend\nfunction grad_g!(M, X, p; a=100, b=1)\n ∇g!(M, X, p; a=a,b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_g(M, p; a=100, b=1)\n X = zero(p)\n grad_g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For X in h(p^(k)) the sunproblem top determine p^(k+1) reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatorname*argmin_pinmathcal M g(p) - langle X log_p^(k)prangle","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with X = operatornamegrad h(p^(k)) that","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"phi(p) = g(p) - langle X log_p^(k)prangle\n= abigl( p_1^2-p_2bigr)^2\n + 2bigl(p_1-bbigr)^2 - 2(p^(k)_1-b)p_1 + 2(p^(k)_1-b)p^(k)_1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"its Euclidean gradient reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatornamegradphi(p) =\n nabla varphi(p)\n = beginpmatrix\n 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^(k)_1-b)\n -2a(p_1^2-p_2)\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where we can again employ the gradient conversion from before to obtain the Riemannian gradient.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"mutable struct SubGrad{P,T,V}\n pk::P\n Xk::T\n a::V\n b::V\nend\nfunction (ϕ::SubGrad)(M, p)\n X = zero_vector(M, p)\n ϕ(M, X, p)\n return X\nend\nfunction (ϕ::SubGrad)(M, X, p)\n X .= [\n 4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),\n -2 * ϕ.a * (p[1]^2 - p[2]),\n ]\n riemannian_gradient!(M, X, p, X) # convert\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And in orer to update the subsolvers gradient correctly, we have to overwrite","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)\nset_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we again introduce for ease of use","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docR_g(M, p) = g(M, p; a=a, b=b)\ndocR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)\ndocR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)\ndocR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)\nfunction docR_grad_f!(M, X, p)\n Y = zero_vector(M, p)\n docR_grad_g!(M, X, p)\n docR_grad_h!(M, Y, p)\n X .-= Y\n return X\nend\ndocR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_doc_state = difference_of_convex_algorithm(\n M_rb, docR_f, docR_g, docR_grad_h!, p0;\n gradient=docR_grad_f!,\n grad_g = docR_grad_g!,\n debug=[debug_vec..., 10^6],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_grad=docR_sub_grad,\n sub_hess = nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 1235 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping criterion\n | \n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Comparison-in-Iterations","page":"Rosenbrock Metric","title":"Comparison in Iterations","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x)$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-16, 5*1e5),\n xaxis=:log,\n xlims=(1,10^8),\n)\nscatter!(fig, [1,], [f(M,p0),], label=raw\"$f(p_0)$\", markercolor=grey)\negi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries\negc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries\nplot!(fig, egi, egc, color=teal, label=\"Euclidean GD\")\n#\nrgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries\nrgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries\nplot!(fig, rgi, rgc, color=indigo, label=\"Riemannian GD\")\n#\nedi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries\nedc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries\nplot!(fig, edi, edc, color=sand, label=\"Euclidean DoC\")\n#\nrdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries\nrdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries\nplot!(fig, rdi, rdc, color=green, label=\"Riemannian DoC\")","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Literature","page":"Rosenbrock Metric","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\n","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/Changelog.md\"","category":"page"},{"location":"changelog/#Changelog","page":"Changelog","title":"Changelog","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"All notable changes to this Julia package will be documented in this file.","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.","category":"page"},{"location":"changelog/#[0.1.8]-–-12/06/2024","page":"Changelog","title":"[0.1.8] – 12/06/2024","text":"","category":"section"},{"location":"changelog/#Changed","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"use range compatible with Julia 1.6 and hence lower the compatibility entry for Julia again.","category":"page"},{"location":"changelog/#[0.1.7]-–-07/06/2024","page":"Changelog","title":"[0.1.7] – 07/06/2024","text":"","category":"section"},{"location":"changelog/#Changed-2","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"make Manopt.jl a weak dependency and load functions that require parts of it only load as an extension. This makes it easier to use the examples in the tests of Manopt itself.","category":"page"},{"location":"changelog/#[0.1.6]-–-22/03/2024","page":"Changelog","title":"[0.1.6] – 22/03/2024","text":"","category":"section"},{"location":"changelog/#Added","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Hyperparameter optimization example.","category":"page"},{"location":"changelog/#[0.1.3]-–-11/12/2023","page":"Changelog","title":"[0.1.3] – 11/12/2023","text":"","category":"section"},{"location":"changelog/#Added-2","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Total variation Minimization cost, proxes, and an example\nBézier curve cost, gradients, and an example.","category":"page"},{"location":"changelog/#[0.1.3]-–-16/09/2023","page":"Changelog","title":"[0.1.3] – 16/09/2023","text":"","category":"section"},{"location":"changelog/#Added-3","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rayleigh Quotient functions added\nan example illustrating Euclidean gradient/HEssian conversion\nAdd Literature with DocumenterCitations","category":"page"},{"location":"changelog/#[0.1.2]-–-13/06/2023","page":"Changelog","title":"[0.1.2] – 13/06/2023","text":"","category":"section"},{"location":"changelog/#Added-4","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Update examples to use Quarto\nAdd DC examples","category":"page"},{"location":"changelog/#[0.1.1]-–-01/03/2023","page":"Changelog","title":"[0.1.1] – 01/03/2023","text":"","category":"section"},{"location":"changelog/#Added-5","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rosenbrock function and examples","category":"page"},{"location":"changelog/#[0.1.0]-–-18/02/2023","page":"Changelog","title":"[0.1.0] – 18/02/2023","text":"","category":"section"},{"location":"changelog/#Added-6","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested\nSetup Documentation to provide one example Quarto file for every example objective to illustrate how to use them.","category":"page"},{"location":"examples/Bezier-curves/#Minimizing-the-Acceleration-of-Bézier-Curves-on-the-Sphere","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using Manifolds, Manopt, ManoptExamples","category":"page"},{"location":"examples/Bezier-curves/#Introduction","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Introduction","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"function bezier(M::AbstractManifold, t, pts::NTuple)\n p = bezier(M, t, pts[1:(end - 1)])\n q = bezier(M, t, pts[2:end])\n return shortest_geodesic(M, p, q, t)\nend\nfunction bezier(M::AbstractManifold, t, pts::NTuple{2})\n return shortest_geodesic(M, pts[1], pts[2], t)\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using ManoptExamples:\n artificial_S2_composite_Bezier_curve,\n BezierSegment,\n de_Casteljau,\n get_Bezier_degrees,\n get_Bezier_inner_points,\n get_Bezier_junctions,\n get_Bezier_junction_tangent_vectors,\n get_Bezier_points,\n get_Bezier_segments,\n grad_L2_acceleration_Bezier,\n L2_acceleration_Bezier","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"This notebook reproduces the example form Section 5.2 in [BG18].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The following image illustrates how the de-Casteljau algorithm works for one segment.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: A Bezier segment and illustration of the de-Casteljau algorithm)","category":"page"},{"location":"examples/Bezier-curves/#Approximating-data-by-a-curve-with-minimal-accelartion","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Approximating data by a curve with minimal accelartion","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We first load our example data","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"M = Sphere(2)\nB = artificial_S2_composite_Bezier_curve()\ndata_points = get_Bezier_junctions(M, B)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The original curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We continue to recude the points, since we “know” sme points due to the C^1 property: the second to last control point of the first segment b_02, the joint junction point connecting both segments b_03=b_10 and the second control point b_11 of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We can use this reduced form as the variable to optimize and the one from the data as our initial point.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"pB = get_Bezier_points(M, B, :differentiable)\nN = PowerManifold(M, NestedPowerRepresentation(), length(pB))","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the λ=10","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient\nλ = 10.0\nfunction f(M, pB)\n return L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend\nfunction grad_f(M, pB)\n return grad_L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"grad_f (generic function with 1 method)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Then we can optimize","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"x0 = pB\npB_opt = gradient_descent(\n N,\n f,\n grad_f,\n x0;\n stepsize=ArmijoLinesearch(N;\n initial_stepsize=1.0,\n retraction_method=ExponentialRetraction(),\n contraction_factor=0.5,\n sufficient_decrease=0.001,\n ),\n stopping_criterion=StopWhenChangeLess(1e-5) |\n StopWhenGradientNormLess(1e-7) |\n StopAfterIteration(300),\n debug=[\n :Iteration,\n \" | \",\n :Cost,\n \" | \",\n DebugGradientNorm(),\n \" | \",\n DebugStepsize(),\n \" | \",\n :Change,\n \"\\n\",\n 25,\n :Stop,\n ],\n);","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Initial | f(x): 10.647244 | | | \n# 25 | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281\n# 50 | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780\n# 75 | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590\n# 100 | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745\nThe algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we can again look at the result","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The result looks as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The resulting curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\n","category":"page"},{"location":"data/#Data-sets","page":"Data","title":"Data sets","text":"","category":"section"},{"location":"data/#Signals-on-manifolds","page":"Data","title":"Signals on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_signals.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.Lemniscate-Tuple{Number}","page":"Data","title":"ManoptExamples.Lemniscate","text":"Lemniscate(t::Float; kwargs...)\nLemniscate(n::integer; interval=[0.0, 2π], kwargs...)\n\ngenerate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.\n\nTo be precise on the manifold M we use the tangent space at p and generate the curve\n\nγ(t) fracasin^2(t) + 1 beginpmatrix cos(t) cos(t)sin(t) endpmatrix\n\nin the plane spanned by X and Y in the tangent space. Note that this curve is 2π-periodic and a is the half-width of the curve.\n\nTo reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.\n\nTHe second variant generates n points equispaced in ìnterval` and calls the first variant.\n\nKeywords\n\nmanifold - (Sphere(2)) the manifold to build the lemniscate on\np - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate\na – (π/2.0) half-width of the Lemniscate\nX – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.\nY – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_signal","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal([pts=500])\n\ngenerate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to ``[BLSW14].\n\nOptional\n\npts: (500) number of points to sample the function\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S1_signal-Tuple{Real}","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal(x)\n\nevaluate the example signal f(x) x 01, of phase-valued data introduces in Sec. 5.1 of [BLSW14] for values outside that interval, this Signal is missing.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_slope_signal","page":"Data","title":"ManoptExamples.artificial_S1_slope_signal","text":"artificial_S1_slope_signal([pts=500, slope=4.])\n\nCreates a Signal of (phase-valued) data represented on the Circle with increasing slope.\n\nOptional\n\npts: (500) number of points to sample the function.\nslope: (4.0) initial slope that gets increased afterwards\n\nThis data set was introduced for the numerical examples in [BLSW14]\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_composite_Bezier_curve-Tuple{}","page":"Data","title":"ManoptExamples.artificial_S2_composite_Bezier_curve","text":"artificial_S2_composite_Bezier_curve()\n\nGenerate a composite Bézier curve on the [BG18].\n\nIt consists of 4 egments connecting the points\n\nmathbf d_0 = beginpmatrix 001endpmatrixquad\nmathbf d_1 = beginpmatrix 0-10endpmatrixquad\nmathbf d_2 = beginpmatrix -100endpmatrixtext and \nmathbf d_3 = beginpmatrix 00-1endpmatrix\n\nwhere instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be C^1.\n\nWe define\n\nX_0 = fracπ8sqrt2beginpmatrix1-10endpmatrixquad\nX_1 = fracπ4sqrt2beginpmatrix101endpmatrixquad\nX_2 = fracπ4sqrt2beginpmatrix01-1endpmatrixtext and \nX_3 = fracπ8sqrt2beginpmatrix-110endpmatrix\n\nwhere we defined each X_i in T_d_imathbb S^2. We defined three BezierSegments\n\nof cubic Bézier curves as follows\n\nbeginalign*\nb_00 = d_0 quad b_10 = exp_d_0X_0 quad b_20 = exp_d_1X_1 quad b_30 = d_1\nb_01 = d_1 quad b_11 = exp_d_1(-X_1) quad b_21 = exp_d_2X_2 quad b_31 = d_2\nb_02 = d_2 quad b_11 = exp_d_2(-X_2) quad b_22 = exp_d_3X_3 quad b_32 = d_3\nendalign*\n\n\n\n\n\n","category":"method"},{"location":"data/#images-on-manifolds","page":"Data","title":"images on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_images.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.artificialIn_SAR_image-Tuple{Integer}","page":"Data","title":"ManoptExamples.artificialIn_SAR_image","text":"artificialIn_SAR_image([pts=500])\n\ngenerate an artificial InSAR image, i.e. phase valued data, of size pts x pts points.\n\nThis data set was introduced for the numerical examples in [BLSW14].\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S2_rotation_image","page":"Data","title":"ManoptExamples.artificial_S2_rotation_image","text":"artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])\n\nCreate an image with a rotation on each axis as a parametrization.\n\nOptional Parameters\n\npts: (64) number of pixels along one dimension\nrotations: ((.5,.5)) number of total rotations performed on the axes.\n\nThis dataset was used in the numerical example of Section 5.1 of [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_image","page":"Data","title":"ManoptExamples.artificial_S2_whirl_image","text":"artificial_S2_whirl_image([pts::Int=64])\n\nGenerate an artificial image of data on the 2 sphere,\n\nArguments\n\npts: (64) size of the image in pts×pts pixel.\n\nThis example dataset was used in the numerical example in Section 5.5 of [LNPS17]\n\nIt is based on artificial_S2_rotation_image extended by small whirl patches.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_patch","page":"Data","title":"ManoptExamples.artificial_S2_whirl_patch","text":"artificial_S2_whirl_patch([pts=5])\n\ncreate a whirl within the pts×pts patch of Sphere(@ref)(2)-valued image data.\n\nThese patches are used within artificial_S2_whirl_image.\n\nOptional Parameters\n\npts: (5) size of the patch. If the number is odd, the center is the north pole.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image","page":"Data","title":"ManoptExamples.artificial_SPD_image","text":"artificial_SPD_image([pts=64, stepsize=1.5])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.\n\nThis dataset was used in the numerical example of Section 5.2 of [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image2","page":"Data","title":"ManoptExamples.artificial_SPD_image2","text":"artificial_SPD_image2([pts=64, fraction=.66])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.\n\nThis data set was introduced in the numerical examples of Section of [BPS16]\n\n\n\n\n\n","category":"function"},{"location":"data/#Literature","page":"Data","title":"Literature","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\n","category":"page"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny BergmannLaura Weigl 2023-07-02","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139397\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.430690947905521","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412961981726742","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Total-Variation/#Total-Variation-Minimization","page":"Total Variation","title":"Total Variation Minimization","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Total-Variation/#Introduction","page":"Total Variation","title":"Introduction","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.","category":"page"},{"location":"examples/Total-Variation/#The-manifold-valued-ROF-model","page":"Total Variation","title":"The manifold-valued ROF model","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold s = (s_i)_i=1^N in mathbb M^n of length n in mathbb N, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term D(ps) to “stay close to” s and a regularizer R(p). For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"operatorname*argmin_pinmathcal M^n\nf(p)\nqquad\nf(p) = D(ps) + α R(p) = sum_i=1^n d_mathcal M^2(s_ip_i) + αsum_i=1^n-1 d_mathcal M(p_ip_i+1)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"where α 0 is a weight parameter.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost f(p) to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any p_i=p_i+1. So we have to use another technique.","category":"page"},{"location":"examples/Total-Variation/#The-Cyclic-Proximal-Point-algorithm","page":"Total Variation","title":"The Cyclic Proximal Point algorithm","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the Cyclic Proximal Point Algorithm [Bac14].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.","category":"page"},{"location":"examples/Total-Variation/#The-Optimsation","page":"Total Variation","title":"The Optimsation","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Manifolds, Manopt, ManoptExamples, ManifoldDiff\nusing ManifoldDiff: prox_distance\nusing ManoptExamples: prox_Total_Variation\nn = 500 #Signal length\nσ = 0.2 # amount of noise\nα = 0.5# in the TV model","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We define a few colors","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Colors, NamedColors, ColorSchemes, Plots, Random\ndata_color = RGBA{Float64}(colorant\"black\")\nlight_color = RGBA{Float64}(colorant\"brightgrey\")\nrecon_color = RGBA{Float64}(colorant\"vibrantorange\")\nnoisy_color = RGBA{Float64}(colorant\"vibrantteal\")","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Random.seed!(23)\nM = Circle()\nN = PowerManifold(M, n)\ndata = ManoptExamples.artificial_S1_signal(n)\ns = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]\nt = range(0.0, 1.0; length=n)\nscene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=noisy_color,\n markerstrokecolor=noisy_color,\n lab=\"noisy\",\n)\nyticks!(\n [-π, -π / 2, 0, π / 2, π],\n [raw\"$-\\pi$\", raw\"$-\\frac{\\pi}{2}$\", raw\"$0$\", raw\"$\\frac{\\pi}{2}$\", raw\"$\\pi$\"],\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Defining cost and the proximal maps, which are actually 3 proxes to be precise.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)\nproxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_Total_Variation(N, α * λ, p))","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We run the algorithm","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"o = cyclic_proximal_point(\n N,\n f,\n proxes_f,\n s;\n λ=i -> π / (2 * i),\n debug=[\n :Iteration,\n \" | \",\n DebugProximalParameter(),\n \" | \",\n :Cost,\n \" | \",\n :Change,\n \"\\n\",\n 1000,\n :Stop,\n ],\n record=[:Iteration, :Cost, :Change, :Iterate],\n return_state=true,\n);","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Initial | | f(x): 59.187445 | \n# 1000 | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283\n# 2000 | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678\n# 3000 | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907\n# 4000 | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957\n# 5000 | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175\nThe algorithm reached its maximal number of iterations (5000).","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can see that the cost reduces nicely. Let’s extract the result an the recorded values","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"recon = get_solver_result(o)\nrecord = get_record(o)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We get","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"scene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=light_color,\n markerstrokecolor=light_color,\n lab=\"noisy\",\n)\nscatter!(\n scene,\n t,\n recon;\n markersize=2,\n markercolor=recon_color,\n markerstrokecolor=recon_color,\n lab=\"reconstruction\",\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”","category":"page"},{"location":"examples/Total-Variation/#Outlook","page":"Total Variation","title":"Outlook","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the operatornameTV_2 yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Another extension for both first and second order TV is to apply this for manifold-valued images S = (S_ij)_ij=1^mn in mathcal M^mn, where the distances in the regularizer are then used in both the first dimension i and the second dimension j in the data.","category":"page"},{"location":"examples/Total-Variation/#Technical-details","page":"Total Variation","title":"Technical details","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This version of the example was generated with the following package versions.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Pkg.status()","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`\n [6e4b80f9] BenchmarkTools v1.5.0\n [35d6a980] ColorSchemes v3.25.0\n [5ae59095] Colors v0.12.11\n [7073ff75] IJulia v1.24.2\n [8ac3fa9e] LRUCache v1.6.1\n [d3d80556] LineSearches v7.2.0\n [af67fdf4] ManifoldDiff v0.3.10\n [1cead3c2] Manifolds v0.9.18\n [3362f125] ManifoldsBase v0.15.10\n [0fc0a36d] Manopt v0.4.63\n [5b8d5e80] ManoptExamples v0.1.7 `..`\n [51fcb6bd] NamedColors v0.2.2\n [91a5bcdd] Plots v1.40.4\n [6099a3de] PythonCall v0.9.20","category":"page"},{"location":"examples/Total-Variation/#Literature","page":"Total Variation","title":"Literature","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 2023-01-03","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field=ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 26 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector transport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |grad f| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"1.4404666436813376e-18","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 2023-07-02","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get started: optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get started: optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do in-place-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393613136017\n 0.006531541407458413\n 0.7267799052788726","category":"page"},{"location":"examples/RayleighQuotient/#The-Rayleigh-Quotient","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Ronny Bergmann 2024-03-09","category":"page"},{"location":"examples/RayleighQuotient/#Introduction","page":"The Rayleigh Quotient","title":"Introduction","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For a symmetric matrix A in mathbb R^ntimes n we consider the 📖 Rayleigh Quotient","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"operatorname*argmin_x in mathbb R^n backslash 0\nfracx^mathrmTAxlVert x rVert^2","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"On the sphere we can omit the denominator and obtain","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f(p) = p^mathrmTApqquad p 𝕊^n-1","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"which by itself we can again continue in the embedding as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"tilde f(x) = x^mathrmTAxqquad x in mathbb R^n","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This cost has the nice feature that at the minimizer p^*inmathbb S^n-1 the function falue f(p^*) is the smalles eigenvalue of A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For the embedded function tilde f the gradient and Hessian can be computed with classical methods as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\ntilde f(x) = 2Ax qquad x ℝ^n\n\n^2tilde f(x)V = 2AV qquad x V ℝ^n\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold mathcal M = mathbb S^n-1 are given by","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\noperatornamegrad f(p) = 2Ap - 2(p^mathrmTAp)*pqquad p 𝕊^n-1\n\noperatornameHess f(p)X = 2AX - 2(p^mathrmTAX)p - 2(p^mathrmTAp)Xqquad p 𝕊^n-1 X in T_p𝕊^n-1\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first generate an example martrx A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random\nRandom.seed!(42)\nn = 500\nA = Symmetric(randn(n, n) / n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And the manifolds","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"M = Sphere(n-1)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Sphere(499, ℝ)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"E = get_embedding(M)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean(500; field=ℝ)","category":"page"},{"location":"examples/RayleighQuotient/#Setup-the-corresponding-functions","page":"The Rayleigh Quotient","title":"Setup the corresponding functions","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute f is called with M as their first argument and tilde f if called with E.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We instantiate","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f = ManoptExamples.RayleighQuotientCost(A)\ngrad_f = ManoptExamples.RayleighQuotientGrad!!(A)\nHess_f = ManoptExamples.RayleighQuotientHess!!(A)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"p0 = [1.0, zeros(n-1)...]\nX = zero_vector(M, p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"we can both call","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Y = grad_f(M, p0) # Allocates memory\ngrad_f(M, X, p0) # Computes in place of X and returns the result in X.\nnorm(M, p0, X-Y)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"0.0","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"λ = min(eigvals(A)...)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"-0.08967721009388108","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-on-gradient-information","page":"The Rayleigh Quotient","title":"A Solver based on gradient information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient nabla tilde f. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n return_state=true,\n)\nq1 = get_solver_result(s)\ns","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 50 f(x): -0.088415|grad f(p)|:0.004530500043902619\n# 100 f(x): -0.089097|grad f(p)|:0.004589417101266096\n# 150 f(x): -0.089530|grad f(p)|:0.0026028331895358247\n# 200 f(x): -0.089650|grad f(p)|:0.0012359084298719039\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-6d\"), (:Cost, \"f(x): %f\"), (:GradientNorm, \"|grad f(p)|:%s\"), \"\\n\", 50]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q2 = gradient_descent(M, f, grad_f, p0;\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n)\n#Test that both are the same\nisapprox(M, q1,q2)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 50 f(x): -0.088415|grad f(p)|:0.004530500043902567\n# 100 f(x): -0.089097|grad f(p)|:0.004589417101266063\n# 150 f(x): -0.089530|grad f(p)|:0.002602833189535808\n# 200 f(x): -0.089650|grad f(p)|:0.0012359084298719097\n\ntrue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We can also benchmark both","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 23 samples with 1 evaluation.\n Range (min … max): 217.668 ms … 268.332 ms ┊ GC (min … max): 3.21% … 3.98%\n Time (median): 219.032 ms ┊ GC (median): 3.24%\n Time (mean ± σ): 222.029 ms ± 10.351 ms ┊ GC (mean ± σ): 3.33% ± 0.26%\n\n █ \n ▆█▆▃▁▃▁▃▁▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃ ▁\n 218 ms Histogram: frequency by time 268 ms <\n\n Memory estimate: 1.13 GiB, allocs estimate: 3613.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 149 samples with 1 evaluation.\n Range (min … max): 31.006 ms … 163.769 ms ┊ GC (min … max): 0.00% … 79.63%\n Time (median): 31.330 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 33.701 ms ± 11.067 ms ┊ GC (mean ± σ): 3.40% ± 7.06%\n\n █▃ ▂ ▁ ▃ \n ██▄█▇██▆▄▁▄▄▁▇▁▁▆▁▄▆█▇▁▁▄▁▄▄▁▁▁▁▁▁▁▁▁▄▁▁▁▄▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▁▁▄ ▄\n 31 ms Histogram: log(frequency) by time 47 ms <\n\n Memory estimate: 11.38 MiB, allocs estimate: 3006.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From these results we see, that the conversion from the Euclidean to the Riemannian gradient does require a small amount of effort and hence reduces the performance slighly. Still, if the Euclidean Gradient is easier to compute or already available, this is in terms of coding the faster way. Finally this is a tradeoff between derivation and implementation efforts for the Riemannian gradient and a slight performance reduction when using the Euclidean one.","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-(also)-on-(approximate)-Hessian-information","page":"The Rayleigh Quotient","title":"A Solver based (also) on (approximate) Hessian information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To also involve the Hessian, we consider the trust regions solver with three cases:","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean, approximating the Hessian\nEuclidean, providing the Hessian\nRiemannian, providing the Hessian but also using in-place evaluations.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.088106|grad f(p)|:0.01903913659588686\n# 20 f(x): -0.089023|grad f(p)|:0.007792334296299116\n# 30 f(x): -0.089501|grad f(p)|:0.008034300330026467\n# 40 f(x): -0.089842|grad f(p)|:0.008125526728200166\n# 50 f(x): -0.089890|grad f(p)|:0.0031244752821335416\n# 60 f(x): -0.089925|grad f(p)|:0.0029682862637714163\n# 70 f(x): -0.089962|grad f(p)|:0.002811722437216778\n# 80 f(x): -0.089997|grad f(p)|:0.0026658493010157363\n# 90 f(x): -0.090032|grad f(p)|:0.0025418974797659266\n# 100 f(x): -0.090067|grad f(p)|:0.0024485809550738955\n# 110 f(x): -0.090108|grad f(p)|:0.0023894008071780747\n# 120 f(x): -0.090155|grad f(p)|:0.002362317662908117\n# 130 f(x): -0.090208|grad f(p)|:0.0023611301647631484\n# 140 f(x): -0.090262|grad f(p)|:0.00237797866404072\n# 150 f(x): -0.090314|grad f(p)|:0.002405563029627607\n# 160 f(x): -0.090362|grad f(p)|:0.002438250821406204\n# 170 f(x): -0.090404|grad f(p)|:0.002472221074327323\n# 180 f(x): -0.090441|grad f(p)|:0.0025051377726827166\n# 190 f(x): -0.090472|grad f(p)|:0.002535721310831389\n# 200 f(x): -0.090498|grad f(p)|:0.0025633813700434637\n# 210 f(x): -0.090513|grad f(p)|:0.0025832821804127513\n# 220 f(x): -0.090513|grad f(p)|:0.0025832821804127513\n# 230 f(x): -0.090513|grad f(p)|:0.0025832821792817493\n# 240 f(x): -0.090513|grad f(p)|:0.0025832821770197098\n# 250 f(x): -0.090513|grad f(p)|:0.0025832821747576924\n# 260 f(x): -0.090513|grad f(p)|:0.002583282172495683\n# 270 f(x): -0.090513|grad f(p)|:0.0025832821702336567\n# 280 f(x): -0.090513|grad f(p)|:0.002583282167971658\n# 290 f(x): -0.090513|grad f(p)|:0.002583282165709656\n# 300 f(x): -0.090513|grad f(p)|:0.002583282163447637\n# 310 f(x): -0.090513|grad f(p)|:0.0025832821611855928\n# 320 f(x): -0.090513|grad f(p)|:0.0025832821589235814\n# 330 f(x): -0.090513|grad f(p)|:0.002583282156661572\n# 340 f(x): -0.090513|grad f(p)|:0.0025832821543995727\n# 350 f(x): -0.090513|grad f(p)|:0.002583282152137569\n# 360 f(x): -0.090513|grad f(p)|:0.0025832821498755487\n# 370 f(x): -0.090513|grad f(p)|:0.0025832821476135036\n# 380 f(x): -0.090513|grad f(p)|:0.0025832821453515035\n# 390 f(x): -0.090513|grad f(p)|:0.0025832821430894675\n# 400 f(x): -0.090513|grad f(p)|:0.0025832821408274405\n# 410 f(x): -0.090513|grad f(p)|:0.002583282138565445\n# 420 f(x): -0.090513|grad f(p)|:0.002583282136303441\n# 430 f(x): -0.090513|grad f(p)|:0.00258328213404143\n# 440 f(x): -0.090513|grad f(p)|:0.002583282131779385\n# 450 f(x): -0.090513|grad f(p)|:0.0025832821295174104\n# 460 f(x): -0.090513|grad f(p)|:0.002583282127255372\n# 470 f(x): -0.090513|grad f(p)|:0.002583282124993372\n# 480 f(x): -0.090513|grad f(p)|:0.0025832821227313313\n# 490 f(x): -0.090513|grad f(p)|:0.0025832821204693065\n# 500 f(x): -0.090513|grad f(p)|:0.002583282118207321\n# 510 f(x): -0.090513|grad f(p)|:0.0025832821159453034\n# 520 f(x): -0.090513|grad f(p)|:0.0025832821136832665\n# 530 f(x): -0.090513|grad f(p)|:0.0025832821114212673\n# 540 f(x): -0.090513|grad f(p)|:0.002583282109159243\n# 550 f(x): -0.090513|grad f(p)|:0.002583282106897217\n# 560 f(x): -0.090513|grad f(p)|:0.002583282104635213\n# 570 f(x): -0.090513|grad f(p)|:0.0025832821023731955\n# 580 f(x): -0.090513|grad f(p)|:0.0025832821001112094\n# 590 f(x): -0.090513|grad f(p)|:0.002583282097849167\n# 600 f(x): -0.090513|grad f(p)|:0.0025832820955871503\n# 610 f(x): -0.090513|grad f(p)|:0.0025832820933251325\n# 620 f(x): -0.090513|grad f(p)|:0.002583282091063122\n# 630 f(x): -0.090513|grad f(p)|:0.0025832820888010873\n# 640 f(x): -0.090513|grad f(p)|:0.0025832820865390785\n# 650 f(x): -0.090513|grad f(p)|:0.0025832820842770442\n# 660 f(x): -0.090513|grad f(p)|:0.0025832820820150576\n# 670 f(x): -0.090513|grad f(p)|:0.0025832820797530767\n# 680 f(x): -0.090513|grad f(p)|:0.0025832820774910523\n# 690 f(x): -0.090513|grad f(p)|:0.0025832820752290362\n# 700 f(x): -0.090513|grad f(p)|:0.002583282072966992\n# 710 f(x): -0.090513|grad f(p)|:0.002583282070704973\n# 720 f(x): -0.090513|grad f(p)|:0.0025832820684429532\n# 730 f(x): -0.090513|grad f(p)|:0.002583282066180946\n# 740 f(x): -0.090513|grad f(p)|:0.0025832820639189306\n# 750 f(x): -0.090513|grad f(p)|:0.0025832820616569214\n# 760 f(x): -0.090513|grad f(p)|:0.00258328205939488\n# 770 f(x): -0.090513|grad f(p)|:0.002583282057132884\n# 780 f(x): -0.090513|grad f(p)|:0.0025832820548708406\n# 790 f(x): -0.090513|grad f(p)|:0.002583282052608873\n# 800 f(x): -0.090513|grad f(p)|:0.002583282050346837\n# 810 f(x): -0.090513|grad f(p)|:0.0025832820480848214\n# 820 f(x): -0.090513|grad f(p)|:0.0025832820458228205\n# 830 f(x): -0.090513|grad f(p)|:0.0025832820435608087\n# 840 f(x): -0.090513|grad f(p)|:0.0025832820412987944\n# 850 f(x): -0.090513|grad f(p)|:0.0025832820390367726\n# 860 f(x): -0.090513|grad f(p)|:0.002583282036774768\n# 870 f(x): -0.090513|grad f(p)|:0.002583282034512706\n# 880 f(x): -0.090513|grad f(p)|:0.002583282032250709\n# 890 f(x): -0.090513|grad f(p)|:0.0025832820299886896\n# 900 f(x): -0.090513|grad f(p)|:0.002583282027726701\n# 910 f(x): -0.090513|grad f(p)|:0.002583282025464682\n# 920 f(x): -0.090513|grad f(p)|:0.0025832820232026517\n# 930 f(x): -0.090513|grad f(p)|:0.002583282020940619\n# 940 f(x): -0.090513|grad f(p)|:0.0025832820186786334\n# 950 f(x): -0.090513|grad f(p)|:0.002583282016416595\n# 960 f(x): -0.090513|grad f(p)|:0.0025832820141545986\n# 970 f(x): -0.090513|grad f(p)|:0.0025832820118925717\n# 980 f(x): -0.090513|grad f(p)|:0.0025832820096305525\n# 990 f(x): -0.090513|grad f(p)|:0.002583282007368543\n# 1000 f(x): -0.090513|grad f(p)|:0.0025832820051065217","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.089673|grad f(p)|:0.0033633987039373655","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;\n evaluation=InplaceEvaluation(),\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.089673|grad f(p)|:0.00336339870393737","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $p0;\n objective_type=:Euclidean,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 10 samples with 1 evaluation.\n Range (min … max): 488.560 ms … 542.951 ms ┊ GC (min … max): 3.26% … 3.55%\n Time (median): 498.677 ms ┊ GC (median): 3.22%\n Time (mean ± σ): 503.851 ms ± 17.951 ms ┊ GC (mean ± σ): 3.27% ± 0.11%\n\n █ ▁ ▁▁ ▁▁▁ ▁ ▁ \n █▁█▁██▁▁▁▁▁▁▁▁▁▁▁███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 489 ms Histogram: frequency by time 543 ms <\n\n Memory estimate: 1.97 GiB, allocs estimate: 40408.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n objective_type=:Euclidean\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 294 samples with 1 evaluation.\n Range (min … max): 12.991 ms … 148.108 ms ┊ GC (min … max): 0.00% … 87.36%\n Time (median): 15.369 ms ┊ GC (median): 3.17%\n Time (mean ± σ): 17.014 ms ± 8.238 ms ┊ GC (mean ± σ): 7.16% ± 7.03%\n\n ▁ █ ▂ \n ▆▁▁▇▅█▃▆█▇▅█▄▁▆▃▂▂▁▁▂▅▂▃▅▂▁▃▃▄▂▃▅▃▁▁▁▁▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▃▁▂▃ ▃\n 13 ms Histogram: frequency by time 28.6 ms <\n\n Memory estimate: 37.43 MiB, allocs estimate: 2920.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 506 samples with 1 evaluation.\n Range (min … max): 8.717 ms … 152.718 ms ┊ GC (min … max): 0.00% … 90.61%\n Time (median): 8.884 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 9.881 ms ± 6.537 ms ┊ GC (mean ± σ): 4.94% ± 5.90%\n\n ▆█▂ ▂▃ ▁ \n ███▄▁▁▆▆██▇▄▆██▆▇▄▅▇▄▄▁▁▆▄▇▄▆▁▅▅▆▁▅▅▄▁▁▄▅▅▁▆▇▇▇▄▄▄▄▁▁▁▁▁▁▄▄ ▇\n 8.72 ms Histogram: log(frequency) by time 14.7 ms <\n\n Memory estimate: 10.77 MiB, allocs estimate: 2899.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q1, q) for q ∈ [q2,q3] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 4.471485799821605e-15\n 0.048047538209352994","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q3, q) for q ∈ [q4,q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 0.08269488012454579\n 0.08269488012454579","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Which we can also see in the final cost, comparing it to the Eigenvalue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"5-element Vector{Float64}:\n 2.76900562450888e-5\n 2.769005624428389e-5\n -0.000836208332542443\n 3.191891195797325e-16\n 3.191891195797325e-16","category":"page"},{"location":"examples/RayleighQuotient/#Summary","page":"The Rayleigh Quotient","title":"Summary","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.","category":"page"},{"location":"examples/RayleighQuotient/#Literature","page":"The Rayleigh Quotient","title":"Literature","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"N. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\n","category":"page"},{"location":"helpers/error_measures/#Error-measures","page":"Error measures","title":"Error measures","text":"","category":"section"},{"location":"helpers/error_measures/","page":"Error measures","title":"Error measures","text":"Modules = [ManoptExamples]\nPages = [\"ErrorMeasures.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"helpers/error_measures/#ManoptExamples.mean_average_error-Tuple{ManifoldsBase.AbstractManifold, Any, Any}","page":"Error measures","title":"ManoptExamples.mean_average_error","text":"mean_average_error(M,x,y)\n\nCompute the (mean) squared error between the two points x and y on the PowerManifold manifold M.\n\n\n\n\n\n","category":"method"},{"location":"helpers/error_measures/#ManoptExamples.mean_squared_error-Union{Tuple{mT}, Tuple{mT, Any, Any}} where mT<:ManifoldsBase.AbstractManifold","page":"Error measures","title":"ManoptExamples.mean_squared_error","text":"mean_squared_error(M, p, q)\n\nCompute the (mean) squared error between the two points p and q on the (power) manifold M.\n\n\n\n\n\n","category":"method"},{"location":"#Welcome-to-ManoptExample.jl","page":"Home","title":"Welcome to ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"ManoptExamples.ManoptExamples","category":"page"},{"location":"#ManoptExamples.ManoptExamples","page":"Home","title":"ManoptExamples.ManoptExamples","text":"🏔️⛷️ ManoptExamples.jl – A collection of research and tutorial example problems for Manopt.jl\n\n📚 Documentation: juliamanifolds.github.io/ManoptExamples.jl\n📦 Repository: github.com/JuliaManifolds/ManoptExamples.jl\n💬 Discussions: github.com/JuliaManifolds/ManoptExamples.jl/discussions\n🎯 Issues: github.com/JuliaManifolds/ManoptExamples.jl/issues\n\n\n\n\n\n","category":"module"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/dev/siteinfo.js b/dev/siteinfo.js new file mode 100644 index 0000000..3343491 --- /dev/null +++ b/dev/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "dev"; diff --git a/index.html b/index.html new file mode 100644 index 0000000..6a5afc3 --- /dev/null +++ b/index.html @@ -0,0 +1,2 @@ + + diff --git a/previews/PR10/assets/documenter.js b/previews/PR10/assets/documenter.js new file mode 100644 index 0000000..4248476 --- /dev/null +++ b/previews/PR10/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +window.MathJax = { + "tex": { + "packages": [ + "base", + "ams", + "autoload" + ], + "inlineMath": [ + [ + "$", + "$" + ], + [ + "\\(", + "\\)" + ] + ], + "tags": "ams" + }, + "options": { + "ignoreHtmlClass": "tex2jax_ignore", + "processHtmlClass": "tex2jax_process" + } +} +; + +(function () { + var script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.js'; + script.async = true; + document.head.appendChild(script); +})(); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// 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() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/previews/PR10/assets/search.js b/previews/PR10/assets/search.js new file mode 100644 index 0000000..c133f74 --- /dev/null +++ b/previews/PR10/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/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'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + 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) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + 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/PR10/assets/themes/documenter-dark.css b/previews/PR10/assets/themes/documenter-dark.css new file mode 100644 index 0000000..c94a294 --- /dev/null +++ b/previews/PR10/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable,html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .list:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .highlight:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-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 .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size: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 .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}/*! 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:.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:.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:.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:.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:.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:.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:.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:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-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 Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.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{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align: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:.75em;padding-right:.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:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:#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:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color: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:.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:.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:.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.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align: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:.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:.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:#fff}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:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:#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:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #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:.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:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:#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:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right: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 .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:15px}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-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 .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.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 .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.85em}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:15px}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius: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:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title+.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:.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:.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 .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.85em}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius: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 .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox{color:#fff;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:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.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:#fff}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.is-loading:after{font-size:.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:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:#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:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.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:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#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:.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:.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:.85em;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right: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:.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-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.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.is-loading:after{font-size:.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 .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:.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:#fff;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:rgba(0,0,0,0);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:.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:.75rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #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:.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:.4em;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align: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:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .list{background-color:#fff;border-radius:.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:.4em;border-top-right-radius:.4em}html.theme--documenter-dark .list-item:last-child{border-bottom-left-radius:.4em;border-bottom-right-radius:.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:.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:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size: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:.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:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff;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:#fff}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:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left: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:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),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:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:#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:rgba(0,0,0,0);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:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item{display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:15px;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.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:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.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:.4em .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:.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:#fff;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:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-radius:.4em 0 0 .4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-radius:0 .4em .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:.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:.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.6666666667%}.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.3333333333%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.3333333333%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.6666666667%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.3333333333%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.6666666667%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.3333333333%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.6666666667%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.3333333333%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.6666666667%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:#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 .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#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 .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{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:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:#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 .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 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 pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size: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:.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;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .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:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-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;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:15px;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size: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 .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2} diff --git a/previews/PR10/assets/themes/documenter-light.css b/previews/PR10/assets/themes/documenter-light.css new file mode 100644 index 0000000..9b9a14b --- /dev/null +++ b/previews/PR10/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable,.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.message:not(:last-child),.list:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.highlight:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-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}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.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}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}/*! 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:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:left}table th{color:#222}.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:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-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:#1081cb !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:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.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:#fff;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:#222;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:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:.75em;padding-right:.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:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:#363636}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;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:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#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:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#f5f5f5}.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:#f5f5f5}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5;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:#f5f5f5;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !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:#f5f5f5}.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 #f5f5f5 #f5f5f5 !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:#f5f5f5;color:#f5f5f5}.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:#f5f5f5;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:#f5f5f5;box-shadow:none;color:#f5f5f5}.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:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color: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:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color: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:.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:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius: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:.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:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:left}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-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:#f5f5f5;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:#fff}.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:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:#363636}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#f5f5f5}.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:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #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:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #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, #222 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:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#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:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#f5f5f5}.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:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right: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 .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:#363636}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#f5f5f5}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius: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:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#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:.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:.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:#f5f5f5;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}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(54,54,54,0.3)}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(54,54,54,0.3)}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(54,54,54,0.3)}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius: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}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#363636}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox{color:#6b6b6b;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:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b}.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.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:#363636}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#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:#f5f5f5;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:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right: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:.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:#6b6b6b}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.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.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right: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:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#222;max-width:100%;position:relative}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:.75rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem}.card-image{display:block;position:relative}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #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:.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:#fff;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:.5rem;padding-top:.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:#f5f5f5;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:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.list{background-color:#fff;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:#222}.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:#f5f5f5;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:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff;color:#4d4d4d}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a;color:#090909}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:#363636}.message.is-light .message-body{border-color:#f5f5f5;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:#f5f5f5}.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:#12537d}.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:#3c3108}.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:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left: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:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),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:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:0.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:#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:#f5f5f5;color:#363636}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#f5f5f5}@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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#f5f5f5}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#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:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item{display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius: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:.25rem;padding-left:.5em;padding-right:.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:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;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:#f5f5f5;border-radius:4px 4px 0 0;color:#222;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:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right: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:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right: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:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right: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:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-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:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.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.3333333333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>.column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>.column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>.column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>.column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-mobile{margin-left:8.3333333333%}.column.is-2-mobile{flex:none;width:16.6666666667%}.column.is-offset-2-mobile{margin-left:16.6666666667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.3333333333%}.column.is-offset-4-mobile{margin-left:33.3333333333%}.column.is-5-mobile{flex:none;width:41.6666666667%}.column.is-offset-5-mobile{margin-left:41.6666666667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.3333333333%}.column.is-offset-7-mobile{margin-left:58.3333333333%}.column.is-8-mobile{flex:none;width:66.6666666667%}.column.is-offset-8-mobile{margin-left:66.6666666667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.3333333333%}.column.is-offset-10-mobile{margin-left:83.3333333333%}.column.is-11-mobile{flex:none;width:91.6666666667%}.column.is-offset-11-mobile{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.3333333333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.6666666667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.6666666667%}.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.3333333333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.3333333333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.6666666667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.6666666667%}.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.3333333333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.3333333333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.6666666667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.6666666667%}.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.3333333333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.3333333333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.6666666667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-touch{margin-left:8.3333333333%}.column.is-2-touch{flex:none;width:16.6666666667%}.column.is-offset-2-touch{margin-left:16.6666666667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.3333333333%}.column.is-offset-4-touch{margin-left:33.3333333333%}.column.is-5-touch{flex:none;width:41.6666666667%}.column.is-offset-5-touch{margin-left:41.6666666667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.3333333333%}.column.is-offset-7-touch{margin-left:58.3333333333%}.column.is-8-touch{flex:none;width:66.6666666667%}.column.is-offset-8-touch{margin-left:66.6666666667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.3333333333%}.column.is-offset-10-touch{margin-left:83.3333333333%}.column.is-11-touch{flex:none;width:91.6666666667%}.column.is-offset-11-touch{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-desktop{margin-left:8.3333333333%}.column.is-2-desktop{flex:none;width:16.6666666667%}.column.is-offset-2-desktop{margin-left:16.6666666667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.3333333333%}.column.is-offset-4-desktop{margin-left:33.3333333333%}.column.is-5-desktop{flex:none;width:41.6666666667%}.column.is-offset-5-desktop{margin-left:41.6666666667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.3333333333%}.column.is-offset-7-desktop{margin-left:58.3333333333%}.column.is-8-desktop{flex:none;width:66.6666666667%}.column.is-offset-8-desktop{margin-left:66.6666666667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.3333333333%}.column.is-offset-10-desktop{margin-left:83.3333333333%}.column.is-11-desktop{flex:none;width:91.6666666667%}.column.is-offset-11-desktop{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-widescreen{margin-left:8.3333333333%}.column.is-2-widescreen{flex:none;width:16.6666666667%}.column.is-offset-2-widescreen{margin-left:16.6666666667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.3333333333%}.column.is-offset-4-widescreen{margin-left:33.3333333333%}.column.is-5-widescreen{flex:none;width:41.6666666667%}.column.is-offset-5-widescreen{margin-left:41.6666666667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.3333333333%}.column.is-offset-7-widescreen{margin-left:58.3333333333%}.column.is-8-widescreen{flex:none;width:66.6666666667%}.column.is-offset-8-widescreen{margin-left:66.6666666667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.3333333333%}.column.is-offset-10-widescreen{margin-left:83.3333333333%}.column.is-11-widescreen{flex:none;width:91.6666666667%}.column.is-offset-11-widescreen{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-fullhd{margin-left:8.3333333333%}.column.is-2-fullhd{flex:none;width:16.6666666667%}.column.is-offset-2-fullhd{margin-left:16.6666666667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.3333333333%}.column.is-offset-4-fullhd{margin-left:33.3333333333%}.column.is-5-fullhd{flex:none;width:41.6666666667%}.column.is-offset-5-fullhd{margin-left:41.6666666667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.3333333333%}.column.is-offset-7-fullhd{margin-left:58.3333333333%}.column.is-8-fullhd{flex:none;width:66.6666666667%}.column.is-offset-8-fullhd{margin-left:66.6666666667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.3333333333%}.column.is-offset-10-fullhd{margin-left:83.3333333333%}.column.is-11-fullhd{flex:none;width:91.6666666667%}.column.is-offset-11-fullhd{margin-left:91.6666666667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.3333333333%}.tile.is-2{flex:none;width:16.6666666667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.3333333333%}.tile.is-5{flex:none;width:41.6666666667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.3333333333%}.tile.is-8{flex:none;width:66.6666666667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.3333333333%}.tile.is-11{flex:none;width:91.6666666667%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:#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:#f5f5f5}}.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:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}@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:#f5f5f5}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#f5f5f5;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:#f5f5f5}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#f5f5f5;border-color:#f5f5f5;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,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{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:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 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}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;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:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}#documenter .docs-main header.docs-navbar .docs-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;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 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:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}#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}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{background:#F0F0F0;color:#444}.hljs-comment{color:#888888}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold} diff --git a/previews/PR10/assets/themeswap.js b/previews/PR10/assets/themeswap.js new file mode 100644 index 0000000..c58e993 --- /dev/null +++ b/previews/PR10/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/PR10/assets/warner.js b/previews/PR10/assets/warner.js new file mode 100644 index 0000000..5531c88 --- /dev/null +++ b/previews/PR10/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
    Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/previews/PR10/contributing/index.html b/previews/PR10/contributing/index.html new file mode 100644 index 0000000..68c989a --- /dev/null +++ b/previews/PR10/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

    Contributing to Manopt.jl

    First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

    The following is a set of guidelines to ManoptExamples.jl.

    Table of Contents

    I just have a question

    The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

    How can I file an issue?

    If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

    How can I contribute?

    Add an objective

    The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

    If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

    If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

    • cost functions are always of the form cost_ and a fitting name
    • gradient functions are always of the the gradient_ and a fitting name, followed by an !

    for in-place gradients and by !! if it is a struct that can provide both.

    It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

    Add an example

    If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

    Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

    Code style

    We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

    We also follow a few internal conventions:

    • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
    • within a file the structs should come first and functions second. The only exception are constructors for the structs
    • within both blocks an alphabetical order is preferable.
    • The above implies that the mutating variant of a function follows the non-mutating variant.
    • There should be no dangling = signs.
    • Always add a newline between things of different types (struct/method/const).
    • Always add a newline between methods for different functions (including in-place/non-mutating variants).
    • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
    • All import/using/include should be in the main module file.
    • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
    • the Quarto Markdown files are excluded from this formatting.
    diff --git a/previews/PR10/examples/Difference-of-Convex-Benchmark/index.html b/previews/PR10/examples/Difference-of-Convex-Benchmark/index.html new file mode 100644 index 0000000..0d17ea8 --- /dev/null +++ b/previews/PR10/examples/Difference-of-Convex-Benchmark/index.html @@ -0,0 +1,178 @@ + +A Benchmark · ManoptExamples.jl

    Benchmark of the Difference of Convex Algorithms

    Ronny Bergmann 2023-06-06

    Introduction

    In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.

    \[\operatorname*{arg\,min}_{p\in\mathcal M}\ \ g(p) - h(p)\]

    where $g,h\colon \mathcal M \to \mathbb R$ are geodesically convex function on the Riemannian manifold $\mathcal M$.

    using LinearAlgebra, Random, Statistics, BenchmarkTools
    +using Manifolds, Manopt, ManoptExamples
    +using NamedColors, Plots
    +Random.seed!(42)

    and we load a few nice colors

    paul_tol = load_paul_tol()
    +indigo = paul_tol["mutedindigo"]
    +teal = paul_tol["mutedteal"]

    The DC Problem

    We start with defining the two convex functions $g,h$ and their gradients as well as the DC problem $f$ and its gradient for the problem

    \[ \operatorname*{arg\,min}_{p\in\mathcal M}\ \ \bigl( \log\bigr(\det(p)\bigr)\bigr)^4 - \bigl(\log \det(p) \bigr)^2.\]

    where the critical points obtain a functional value of $-\frac{1}{4}$.

    where $\mathcal M$ is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.

    We first define the corresponding functions

    g(M, p) = log(det(p))^4
    +h(M, p) = log(det(p))^2
    +f(M, p) = g(M, p) - h(M, p)

    and their gradients

    grad_g(M, p) = 4 * (log(det(p)))^3 * p
    +grad_h(M, p) = 2 * log(det(p)) * p
    +grad_f(M, p) = grad_g(M, p) - grad_h(M, p)

    which we can use to verify that the gradients of $g$ and $h$ are correct. We use for that

    n = 6
    +M = SymmetricPositiveDefinite(n)
    +p0 = log(n) * Matrix{Float64}(I, n, n);
    +X0 = 1 / n * Matrix{Float64}(I, n, n);

    to tall both checks

    check_gradient(M, g, grad_g, p0, X0; plot=true)

    and

    check_gradient(M, h, grad_h, p0, X0; plot=true)

    which both pass the test. We continue to define their inplace variants

    function grad_g!(M, X, p)
    +    copyto!(M, X, p)
    +    X .*= 4 * (log(det(p)))^3
    +    return X
    +end
    +function grad_h!(M, X, p)
    +    copyto!(M, X, p)
    +    X .*= 2 * (log(det(p)))
    +    return X
    +end
    +function grad_f!(M, X, p)
    +    grad_g!(M, X, p)
    +    Y = copy(M, p, X)
    +    grad_h!(M, Y, p)
    +    X .-= Y
    +    return X
    +end

    And compare times for both algorithms, with a bit of debug output.

    @time p_min_dca = difference_of_convex_algorithm(
    +    M,
    +    f,
    +    g,
    +    grad_h!,
    +    p0;
    +    grad_g=grad_g!,
    +    gradient=grad_f!,
    +    evaluation=InplaceEvaluation(),
    +    debug=[
    +        :Iteration,
    +        (:Cost, "f(p): %1.9f"),
    +        (:GradientNorm, " |grad_f(p)|: %1.9f"),
    +        (:Change, " |δp|: %1.9f"),
    +        :Stop,
    +        5,
    +        "\n",
    +    ],
    +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
    +    sub_state=TrustRegionsState(M, copy(M, p0)),
    +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
    +);
    Initial f(p): 137.679053470
    +# 5     f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127
    +# 10    f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103
    +# 15    f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574
    +# 20    f(p): -0.250000000 |grad_f(p)|: 0.000000003 |δp|: 0.000000011
    +The algorithm reached approximately critical point after 24 iterations; the gradient norm (3.9079528504063575e-11) is less than 1.0e-10.
    +  6.353254 seconds (8.13 M allocations: 556.599 MiB, 3.68% gc time, 99.43% compilation time)

    The cost is

    f(M, p_min_dca)
    -0.25

    Similarly the DCPPA performs

    @time p_min_dcppa = difference_of_convex_proximal_point(
    +    M,
    +    grad_h!,
    +    p0;
    +    g=g,
    +    grad_g=grad_g!,
    +    λ=i -> 1 / (2 * n),
    +    cost=f,
    +    gradient=grad_f!,
    +    debug=[
    +        :Iteration,
    +        (:Cost, "f(p): %1.9f"),
    +        " ",
    +        (:GradientNorm, "|grad_f(p)|: %1.10f"),
    +        (:Change, "|δp|: %1.10f"),
    +        :Stop,
    +        5,
    +        "\n",
    +    ],
    +    evaluation=InplaceEvaluation(),
    +    stepsize=ConstantStepsize(1.0),
    +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
    +    sub_state=TrustRegionsState(M, copy(M, p0)),
    +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
    +);
    Initial f(p): 137.679053470 
    +# 5     f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692
    +# 10    f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316
    +# 15    f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676
    +# 20    f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968
    +# 25    f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530
    +# 30    f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048
    +# 35    f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001
    +The algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.
    +  1.587924 seconds (1.77 M allocations: 123.450 MiB, 1.54% gc time, 96.62% compilation time)

    It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost

    f(M, p_min_dcppa)
    -0.25

    Benchmark I: Time comparison

    We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test

    dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()
    +dcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()
    +N_max=14
    +N = 2:N_max

    and run a benchmark for both algorithms

    for n in N
    +    Mn = SymmetricPositiveDefinite(n)
    +    pn = log(n) * Matrix{Float64}(I, n, n)
    +    bdca = @benchmark difference_of_convex_algorithm(
    +        $Mn,
    +        $f,
    +        $g,
    +        $grad_h!,
    +        $pn;
    +        grad_g=$grad_g!,
    +        gradient=$grad_f!,
    +        evaluation=InplaceEvaluation(),
    +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
    +        sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),
    +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
    +    )
    +    dca_benchmarks[n] = bdca
    +    bdcppa = @benchmark difference_of_convex_proximal_point(
    +        $Mn,
    +        $grad_h!,
    +        $pn;
    +        g=$g,
    +        grad_g=$grad_g!,
    +        λ=i -> 1 / (2 * n),
    +        cost=f,
    +        gradient=grad_f!,
    +        evaluation=InplaceEvaluation(),
    +        stepsize=ConstantStepsize(1.0),
    +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
    +        sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),
    +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
    +    )
    +    dcppa_benchmarks[n] = bdcppa
    +end

    Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds

    dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]
    +dca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]
    +dcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]
    plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Time (sec.)")
    +plot!(dims, dca_times; label="DCA", color=indigo, linewidth=2)
    +plot!(dims, dcppa_times; label="DCPPA", color=teal, linewidth=2)

    Benchmark II: Iterations and cost.

    As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.

    N2 = [5,10,20,40,80]
    +dims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]
    +dca_iterations = Dict{Int,Int}()
    +dca_costs = Dict{Int,Vector{Float64}}()
    +dcppa_iterations = Dict{Int,Int}()
    +dcppa_costs = Dict{Int,Vector{Float64}}()
    @time for n in N2
    +    println(n)
    +    Mn = SymmetricPositiveDefinite(n)
    +    pn = log(n) * Matrix{Float64}(I,n,n);
    +    @time dca_st = difference_of_convex_algorithm(
    +        Mn, f, g, grad_h!, pn;
    +        grad_g=grad_g!,
    +        gradient=grad_f!,
    +        evaluation = InplaceEvaluation(),
    +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
    +        sub_state = TrustRegionsState(Mn, copy(Mn, pn)),
    +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
    +        record = [:Iteration, :Cost],
    +        return_state = true,
    +    );
    +    dca_costs[n] = get_record(dca_st, :Iteration, :Cost)
    +    dca_iterations[n] = length(dca_costs[n])
    +    @time dcppa_st = difference_of_convex_proximal_point(
    +        Mn, grad_h!, pn;
    +        g=g,
    +        grad_g=grad_g!,
    +        λ = i -> 1/(2*n),
    +        cost = f,
    +        gradient= grad_f!,
    +        evaluation = InplaceEvaluation(),
    +        stepsize = ConstantStepsize(1.0),
    +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
    +        sub_state = TrustRegionsState(Mn, copy(Mn, pn)),
    +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
    +        record = [:Iteration, :Cost],
    +        return_state = true,
    +    );
    +    dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)
    +    dcppa_iterations[n] = length(dcppa_costs[n])
    +end

    The iterations are like

    plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Iterations")
    +plot!(dims2, [values(dca_iterations)...]; label="DCA", color=indigo, linewidth=2)
    +plot!(dims2, [values(dcppa_iterations)...]; label="DCPPA", color=teal, linewidth=2)

    And for the developtment of the cost

    where we can see that the DCA needs less iterations than the DCPPA.

    Literature

    [BFSS23]
    +
    +
    R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
    +
    [SO15]
    +
    +
    J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
    +
    +
    diff --git a/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg b/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg new file mode 100644 index 0000000..1d9d09e --- /dev/null +++ b/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg b/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg new file mode 100644 index 0000000..eb9064e --- /dev/null +++ b/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg b/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..de59979 --- /dev/null +++ b/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg b/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg new file mode 100644 index 0000000..442852e --- /dev/null +++ b/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg b/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..61baccc --- /dev/null +++ b/previews/PR10/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR10/examples/Difference-of-Convex-Frank-Wolfe/index.html b/previews/PR10/examples/Difference-of-Convex-Frank-Wolfe/index.html new file mode 100644 index 0000000..164b88c --- /dev/null +++ b/previews/PR10/examples/Difference-of-Convex-Frank-Wolfe/index.html @@ -0,0 +1,224 @@ + +Frank Wolfe comparison · ManoptExamples.jl

    A comparison of the Difference of Convex and Frank Wolfe Algorithm

    Ronny Bergmann 2023-11-06

    Introduction

    In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.

    using LinearAlgebra, Random, Statistics, BenchmarkTools
    +using ManifoldsBase, Manifolds, Manopt, ManoptExamples
    +using NamedColors, Plots

    and we load a few nice colors

    paul_tol = load_paul_tol()
    +indigo = paul_tol["mutedindigo"]
    +teal = paul_tol["mutedteal"]

    We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices $\mathcal P(n)$ with the affine invariant metric. Let $q_1,\ldots,q_m \in \mathcal P(n)$ be a set of points and $\mu_1,\ldots,\mu_m$ be a set of weights, such that they sum to one. We consider then

    \[\operatorname*{arg\,max}_{p\in\mathcal C}\ \ h(p)\]

    with

    \[h(p) = +\sum_{j=1}^m \mu_j d^2(p,q_i), +\quad \text{ where } +d^2(p,q_i) = \operatorname{tr}\bigl( + \log^2(p^{-\frac{1}{2}}q_jp^{-\frac{1}{2}}) +\big) +\qquad\text{and}\qquad +\mathcal C = \{ p\in {\mathcal M}\ |\ \bar L\preceq p \preceq \bar U \},\]

    for a lower bound $L$ and an upper bound $U$ for the matrices in the positive definite sense $A \preceq B \Leftrightarrow (B-A)$ is positive semi-definite

    When every one of the weights ${\mu}_1, \ldots {\mu}_m$ are equal, this function $h$ is known as the of the set $\{q_1, \dots, q_m\}$.

    And for our example we set

    Random.seed!(42)
    +n = 20
    +m = 100
    +M = SymmetricPositiveDefinite(n)
    +q = [rand(M) for _ in 1:m];
    +w = rand(m)
    +w ./=sum(w)

    We use as lower and upper bound the arithmetic and geometric mean $L$ and $U$, respectively.

    L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )
    +U = sum( wi * qi for (wi, qi) in zip(w,q) )

    As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use

    p0 = (L+U)/2

    And we can check that it is feasible

    Common Functions

    Given $p \in \mathcal M$, $X \in T_p\mathcal M$ on the symmetric positive definite matrices M, this method computes the closed form solution to

    \[\operatorname*{arg\,min}_{q\in {\mathcal C}}\ \langle X, \log_p q\rangle + = \operatorname*{arg\,min}_{q\in {\mathcal C}}\ \operatorname{tr}(S\log(YqY))\]

    where $\mathcal C = \{ q | L \preceq q \preceq U \}$, $S = p^{-1/2}Xp^{-1/2}$, and $Y=p^{-1/2}$.

    The solution is given by $Z=X^{-1}Q\bigl( P^{\mathrm{T}}[-\operatorname{sgn}(D)]_{+}P+\hat{L}\bigr)Q^{\mathrm{T}}X^{-1}$,@ where $S=QDQ^{\mathrm{T}}$ is a diagonalization of $S$, $\hat{U}-\hat{L}=P^{\mathrm{T}}P$ with $\hat{L}=Q^{\mathrm{T}}XLXQ$ and $\hat{U}=Q^{\mathrm{T}}XUXQ$, where $[-\mbox{sgn}(D)]_{+}$ is the diagonal matrix

    \[\operatorname{diag}\bigl( + [-\operatorname{sgn}(d_{11})]_{+}, \ldots, [-\operatorname{sgn}(d_{nn})]_{+} +\bigr)\]

    and $D=(d_{ij})$.

    @doc raw"""
    +    closed_form_solution!(M, q, L, U, p X)
    +
    +Compute the closeed form solution of the constraint sub problem in place of ``q``.
    +"""
    +function closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)
    +    # extract p^1/2 and p^{-1/2}
    +    (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)
    +    # Compute D & Q
    +    e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk  = QDQ'
    +    D = Diagonal(1.0 .* (e2.values .< 0))
    +    Q = e2.vectors
    +    #println(p)
    +    Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q
    +    Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q
    +    P = cholesky(Hermitian(Uprime - Lprime))
    +    z = P.U' * D * P.U + Lprime
    +    copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)
    +    return q
    +end

    The Difference of Convex Formulation

    We use $g(p) = \iota_{\mathcal C}(p)$ as the indicator funtion of the set $\mathcal C$. We use

    function is_pos_def(p; atol=5e-13)
    +    e = eigen(Symmetric(p))
    +    return all((e.values .+ atol) .> 0)
    +end
    +function g(p, L, U)
    +    return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf
    +end
    +h(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )

    So we can first check that p0 is feasible

    g(p0,L,U) == 0.0
    true

    Now setting

    \[\operatorname*{arg\,min}_{p\in\mathcal M}\ g(p) - h(p)\]

    We look for a maximum of $h$, where $g$ is minimal, i.e. $g(p)$ is zero or in other words $p \in \mathcal C$.

    The gradient of $h$ can also be implemented in closed form as

    grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))
    +function grad_h!(M, X, p, w, q)
    +    Y = copy(M, p, X)
    +    zero_vector!(M, X, p)
    +    for (wi, qi) in zip(w,q)
    +        log!(M, Y, p, qi)
    +        Y .*= - 2.0*wi
    +        X .+= Y
    +    end
    +    return X
    +end

    And we can further define the cost, which will just be $+\infty$ outside of $\mathcal C$. We define

    f_dc(M, p) = g(p, L, U) - h(M, p, w, q)
    +grad_h!(M, X, p) = grad_h!(M, X, p, w, q)
    +function grad_f_dc!(M,X, p)
    +    grad_h!(M, X, p, w, q)
    +    X .*= -1.0
    +    return X
    +end

    Here we can omit the gradient of $g$ in the definition of $\operatorname{grad} f$, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of $\mathcal C$.

    As the last step, we can provide the closed form solver for the DC sub problem given at iteration $k$ by

    \[\operatorname*{arg\,min}_{p\in \mathcal C}\ + \big\langle -\operatorname{grad} h(p^{(k)}), \exp^{-1}_{p^{(k)}}p\big\rangle.\]

    Which we con compute

    function dc_sub_solution!(M, q, p, X)
    +    closed_form_solution!(M, q, L, U, p, -X)
    +    return q
    +end

    For safety, we might want to avoid ending up at the boundary of $\mathcal C$. That is we reduce the distance we walk towards the solution $q$ a bit.

    function dc_sub_solution_safe!(M, q, p, X)
    +    p_last = copy(M,p) # since p=q might be in place
    +    closed_form_solution!(M, q, L, U, p, -X)
    +    q_orig = copy(M,q) # since we do the following in place of q
    +    a = minimum(real.(eigen(q-L).values))
    +    b = minimum(real.(eigen(U-q).values))
    +    s = 1.0
    +    d = distance(M, p_last, q_orig);
    +    # if we are close to zero, we reduce faster.
    +    α = d < 1/(n^2) ? 0.66 : 0.9995;
    +    i=0
    +    while (a < 0) || (b < 0)
    +        s *= α
    +        shortest_geodesic!(M, q, p_last, q_orig, s)
    +        a = minimum(real.(eigen(q-L).values))
    +        b = minimum(real.(eigen(U-q).values))
    +        #println("$i a: $a, b = $b with s=$s")
    +        i=i+1
    +        if (i>100) # safety fallback
    +            #@warn " $i steps where not enough $s ($α)\n$a $b\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs"
    +            qe = eigen(q)
    +            if a < 0
    +                qe.values .+= min(1e-8, n*abs(min(a,b)))
    +            else
    +                qe.values .-= min(1e-8, n*abs(min(a,b)))
    +            end
    +            q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'
    +            a = minimum(real.(eigen(q-L).values))
    +            b = minimum(real.(eigen(U-q).values))
    +            return q
    +        end
    +    end
    +    return q
    +end

    The DoC solver run

    Let’s compare both methods when they have the same stopping criteria

    @time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;
    +    gradient=grad_f_dc!,
    +    sub_problem=dc_sub_solution_safe!,
    +    evaluation=InplaceEvaluation(),
    +    stopping_criterion = StopAfterIteration(300) |
    +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
    +    debug = [
    +        (:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "),
    +        (:GradientNorm, " |grad f(p)|: %0.8f "),
    +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
    +        30, :Stop, "\n"],
    +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
    +    return_state=true,
    +)
    Initial F(p): -0.77661458292831
    +# 30       F(p): -0.78442484721750 |Δp|: 0.05540912123673  |grad f(p)|: 0.17699249  |Δgrad f(p)|: 0.17568860
    +# 60       F(p): -0.78442249424985 |Δp|: 0.01271970630910  |grad f(p)|: 0.17696800  |Δgrad f(p)|: 0.02560503
    +# 90       F(p): -0.78442062994525 |Δp|: 0.00775000850811  |grad f(p)|: 0.17694808  |Δgrad f(p)|: 0.01425163
    +At iteration 94 the change of the gradient (2.7191299073631735e-13) was less than 1.0e-9.
    + 18.916444 seconds (16.97 M allocations: 2.515 GiB, 4.10% gc time, 71.57% compilation time)
    +
    +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
    +After 94 iterations
    +
    +## Parameters
    +* sub solver state:
    +    | InplaceEvaluation()
    +
    +## Stopping Criterion
    +Stop When _one_ of the following are fulfilled:
    +    Max Iteration 300:  not reached
    +    |Δp| < 1.0e-14: not reached
    +    |Δgrad f| < 1.0e-9: reached
    +Overall: reached
    +This indicates convergence: No
    +
    +## Debug
    +    :Stop = :Stop
    +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 30]
    +
    +## Record
    +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

    Let’s extract the final point and look at its cost

    p1_dc = get_solver_result(state1_dc);
    +f_dc(M, p1_dc)
    -0.7844202524356105

    As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.

    [ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]
    2-element Vector{Tuple{Float64, Float64}}:
    + (7.982181192947889e-13, 0.0671963429079244)
    + (1.48264011328508e-6, 0.06661167049818745)

    For the statistics we extract the recordings from the state

    Define the Frank-Wolfe functions

    For Frank wolfe, the cost is just defined as $-h(p)$ but the minimisation is constraint to $\mathcal C$, which is enfored by the oracle.

    f_fw(M, p) = -h(M, p, w, q)
    +function grad_f_fw!(M,X, p)
    +    grad_h!(M, X, p, w, q)
    +    X .*= -1.0
    +    return X
    +end
    +oracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)

    The FW Solver Run

    Similarly we can run the Frank-Wolfe algorithm with

    @time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;
    +    sub_problem=oracle_fw!,
    +    evaluation=InplaceEvaluation(),
    +    stopping_criterion = StopAfterIteration(10^4) |
    +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
    +    debug = [
    +        (:Iteration, "# %-8d "), :Cost, (:Change, " |Δp|: %0.14f "),
    +        (:GradientNorm, " |grad f(p)|: %0.8f "),
    +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
    +        2*10^3, :Stop, "\n"],
    +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
    +    return_state=true,
    +)
    Initial f(x): -0.776615
    +# 2000     f(x): -0.784420 |Δp|: 0.04611942377572  |grad f(p)|: 0.17693408  |Δgrad f(p)|: 0.17555618
    +# 4000     f(x): -0.784421 |Δp|: 0.00372201631976  |grad f(p)|: 0.17694619  |Δgrad f(p)|: 0.00749427
    +# 6000     f(x): -0.784422 |Δp|: 0.00205683506786  |grad f(p)|: 0.17695204  |Δgrad f(p)|: 0.00414088
    +# 8000     f(x): -0.784422 |Δp|: 0.00140675676260  |grad f(p)|: 0.17695565  |Δgrad f(p)|: 0.00283200
    +# 10000    f(x): -0.784422 |Δp|: 0.00106177438598  |grad f(p)|: 0.17695815  |Δgrad f(p)|: 0.00213746
    +The algorithm reached its maximal number of iterations (10000).
    +284.845470 seconds (56.00 M allocations: 93.631 GiB, 2.87% gc time, 0.36% compilation time)
    +
    +# Solver state for `Manopt.jl`s Frank Wolfe Method
    +After 10000 iterations
    +
    +## Parameters
    +* inverse retraction method: LogarithmicInverseRetraction()
    +* retraction method: ExponentialRetraction()
    +* sub solver state:
    +    | InplaceEvaluation()
    +
    +## Stepsize
    +DecreasingStepsize(; length=2.0,  factor=1.0,  subtrahend=0.0,  shift=2)
    +
    +## Stopping Criterion
    +Stop When _one_ of the following are fulfilled:
    +    Max Iteration 10000:    reached
    +    |Δp| < 1.0e-14: not reached
    +    |Δgrad f| < 1.0e-9: not reached
    +Overall: reached
    +This indicates convergence: No
    +
    +## Debug
    +    :Stop = :Stop
    +    :All = [(:Iteration, "# %-8d "), (:Cost, "f(x): %f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 2000]
    +
    +## Record
    +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

    And we take a look at this result as well

    p1_fw = get_solver_result(state1_fw);
    +f_dc(M, p1_fw)
    -0.7844220281765091

    And its feasibility

    [extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]
    2-element Vector{Tuple{Float64, Float64}}:
    + (4.91517933333972e-10, 0.06659173821659133)
    + (3.2456549803073825e-5, 0.06713970236060221)

    Statistics

    We extract the recorded values

    # DoC
    +iter1_dc = get_record(state1_dc, :Iteration, :Iteration)
    +pk_dc = get_record(state1_dc,:Iteration,:Iterate)
    +costs1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))
    +dc_min = minimum(costs1_dc)
    +# FW
    +iter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]
    +pk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]
    +costs1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))

    And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.

    fig = plot(;
    +    legend=:topright,
    +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x_k)-f^*$ (log. scale)",
    +    yaxis=:log,
    +    ylims=(1e-8, 10^-2),
    +    xaxis=:log,
    +    xlims=(1,10^4),
    +)
    +plot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label="Difference of Convex")
    +plot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label="Frank-Wolfe")

    This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.

    On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.

    Literature

    [BFSS23]
    +
    +
    R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
    +
    [WS22]
    +
    +
    M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
    +
    +
    diff --git a/previews/PR10/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg b/previews/PR10/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg new file mode 100644 index 0000000..83134fc --- /dev/null +++ b/previews/PR10/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR10/examples/Difference-of-Convex-Rosenbrock/index.html b/previews/PR10/examples/Difference-of-Convex-Rosenbrock/index.html new file mode 100644 index 0000000..be7f3a9 --- /dev/null +++ b/previews/PR10/examples/Difference-of-Convex-Rosenbrock/index.html @@ -0,0 +1,337 @@ + +Rosenbrock Metric · ManoptExamples.jl

    Solving Rosenbrock with the Difference of Convex Algorithm

    Ronny Bergmann 2023-06-06

    Introduction

    This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.

    Both the Rosenbrock problem

    \[ \operatorname*{argmin}_{x\in\mathbb R^2} a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2,\]

    where $a,b>0$ and usually $b=1$ and $a \gg b$, we know the minimizer $x^* = (b,b^2)^\mathrm{T}$, and also the (Euclidean) gradient

    \[\nabla f(x) = + \begin{pmatrix} + 4a(x_1^2-x_2)\\ -2a(x_1^2-x_2) + \end{pmatrix} + + + \begin{pmatrix} + 2(x_1-b)\\ 0 + \end{pmatrix}.\]

    They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.

    Furthermore, the RosenbrockMetric can be used on $\mathbb R^2$, that is

    \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix},\]

    In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.

    1. The Euclidean Gradient
    2. The Riemannian gradient descent with respect to the RosenbrockMetric
    3. The Euclidean Difference of Convex Algorithm
    4. The Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric

    Where we obtain a difference of convex problem by writing

    \[f(x) = a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2 + = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 - \bigl(x_1-b\bigr)^2\]

    that is

    \[g(x) = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 \quad\text{ and }\quad h(x) = \bigl(x_1-b\bigr)^2\]

    using LinearAlgebra, Random, Statistics
    +using Manifolds, Manopt, ManoptExamples
    +using NamedColors, Plots
    +import Manopt: set_manopt_parameter!
    +Random.seed!(42)
    paul_tol = load_paul_tol()
    +indigo = paul_tol["mutedindigo"]
    +green = paul_tol["mutedgreen"]
    +sand = paul_tol["mutedsand"]
    +teal = paul_tol["mutedteal"]
    +grey = paul_tol["mutedgrey"]

    To emphasize the effect, we choose a quite large value of a.

    a = 2*10^5
    +b = 1

    and use the starting point and a direction to check gradients

    p0 = [0.1, 0.2]

    The Euclidean Gradient Descent.

    For the Euclidean gradient we can just use the same approach as in the Rosenbrock example

    M = ℝ^2
    +f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
    +∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)

    define a common debug vector

    debug_vec = [
    +        (:Iteration, "# %-8d "),
    +        (:Cost, "F(x): %1.4e"),
    +        " ",
    +        (:Change, "|δp|: %1.4e | "),
    +        (:GradientNorm, "|grad f|: %1.6e"),
    +        :Stop,
    +        "\n",
    +    ]

    and call the gradient descent algorithm

    Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;
    +    evaluation=InplaceEvaluation(),
    +    debug=[debug_vec...,10^7],
    +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
    +    record=[:Iteration, :Cost],
    +    return_state=true,
    +)
    Initial F(x): 7.2208e+03 
    +# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03
    +# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04
    +# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06
    +# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08
    +# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10
    +The algorithm performed a step with a change (0.0) less than 1.0e-16.
    +
    +# Solver state for `Manopt.jl`s Gradient Descent
    +After 53073227 iterations
    +
    +## Parameters
    +* retraction method: ExponentialRetraction()
    +
    +## Stepsize
    +ArmijoLinesearch() with keyword parameters
    +  * initial_stepsize    = 1.0
    +  * retraction_method   = ExponentialRetraction()
    +  * contraction_factor  = 0.95
    +  * sufficient_decrease = 0.1
    +
    +## Stopping Criterion
    +Stop When _one_ of the following are fulfilled:
    +    Max Iteration 100000000:    not reached
    +    |Δp| < 1.0e-16: reached
    +Overall: reached
    +This indicates convergence: Yes
    +
    +## Debug
    +    :Stop = :Stop
    +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000000]
    +
    +## Record
    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

    The Riemannian Gradient Descent.

    For the Riemannian case, we define

    M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())
    MetricManifold(Euclidean(2; field = ℝ), ManoptExamples.RosenbrockMetric())

    and the gradient is now adopted to the new metric

    function grad_f!(M, X, p)
    +    ∇f!!(M, X, p)
    +    riemannian_gradient!(M, X, p, X)
    +    return X
    +end
    +function grad_f(M, p)
    +    X = zero_vector(M, p)
    +    return grad_f!(M, X, p)
    +end
    R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;
    +    evaluation=InplaceEvaluation(),
    +    debug=[debug_vec...,10^6],
    +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
    +    record=[:Iteration, :Cost],
    +    return_state=true,
    +)
    Initial F(x): 7.2208e+03 
    +# 1000000  F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04
    +# 2000000  F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09
    +The algorithm performed a step with a change (0.0) less than 1.0e-16.
    +
    +# Solver state for `Manopt.jl`s Gradient Descent
    +After 2443750 iterations
    +
    +## Parameters
    +* retraction method: ExponentialRetraction()
    +
    +## Stepsize
    +ArmijoLinesearch() with keyword parameters
    +  * initial_stepsize    = 1.0
    +  * retraction_method   = ExponentialRetraction()
    +  * contraction_factor  = 0.95
    +  * sufficient_decrease = 0.1
    +
    +## Stopping Criterion
    +Stop When _one_ of the following are fulfilled:
    +    Max Iteration 100000000:    not reached
    +    |Δp| < 1.0e-16: reached
    +Overall: reached
    +This indicates convergence: Yes
    +
    +## Debug
    +    :Stop = :Stop
    +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
    +
    +## Record
    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

    The Euclidean Difference of Convex

    For the convex case, we have to first introduce the two parts of the cost.

    f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;
    +f2(M, p; a=100, b=1) = (p[1] - b[1])^2;
    +g(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)
    +h(M, p; a=100, b=1) = f2(M, p; a=a, b=b)

    and their (Euclidan) gradients

    function ∇h!(M, X, p; a=100, b=1)
    +    X[1] = 2*(p[1]-b)
    +    X[2] = 0
    +    return X
    +end
    +function ∇h(M, p; a=100, b=1)
    +    X = zero(p)
    +    ∇h!(M, X, p; a=a, b=b)
    +    return X
    +end
    +function ∇g!(M, X, p; a=100, b=1)
    +    X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)
    +    X[2] = -2*a*(p[1]^2-p[2])
    +    return X
    +end
    +function ∇g(M, p; a=100, b=1)
    +    X = zero(p)
    +    ∇g!(M, X, p; a=a, b=b)
    +    return X
    +end

    and we define for convenience

    docE_g(M, p) = g(M, p; a=a, b=b)
    +docE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)
    +docE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)
    +docE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)
    +function docE_∇f!(M, X, p)
    +  Y = zero_vector(M, p)
    +  docE_∇g!(M, X, p)
    +  docE_∇h!(M, Y, p)
    +  X .-= Y
    +  return X
    +end

    Then we call the difference of convex algorithm on Eucldiean space $\mathbb R^2$.

    E_doc_state = difference_of_convex_algorithm(
    +    M, docE_f, docE_g, docE_∇h!, p0;
    +    gradient=docE_∇f!,
    +    grad_g = docE_∇g!,
    +    debug=[debug_vec..., 10^4],
    +    evaluation=InplaceEvaluation(),
    +    record=[:Iteration, :Cost],
    +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
    +    sub_hess=nothing, # Use gradient descent
    +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
    +    return_state=true,
    +)
    Initial F(x): 7.2208e+03 
    +# 10000    F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04
    +# 20000    F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08
    +The algorithm performed a step with a change (0.0) less than 1.0e-16.
    +
    +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
    +After 26549 iterations
    +
    +## Parameters
    +* sub solver state:
    +    | # Solver state for `Manopt.jl`s Gradient Descent
    +    | After 2000 iterations
    +    | 
    +    | ## Parameters
    +    | * retraction method: ExponentialRetraction()
    +    | 
    +    | ## Stepsize
    +    | ArmijoLinesearch() with keyword parameters
    +    |   * initial_stepsize    = 1.0
    +    |   * retraction_method   = ExponentialRetraction()
    +    |   * contraction_factor  = 0.95
    +    |   * sufficient_decrease = 0.1
    +    | 
    +    | ## Stopping Criterion
    +    | Stop When _one_ of the following are fulfilled:
    +    |     Max Iteration 2000:   reached
    +    |     |grad f| < 1.0e-16: not reached
    +    | Overall: reached
    +    | This indicates convergence: No
    +
    +## Stopping Criterion
    +Stop When _one_ of the following are fulfilled:
    +    Max Iteration 100000000:    not reached
    +    |Δp| < 1.0e-16: reached
    +Overall: reached
    +This indicates convergence: Yes
    +
    +## Debug
    +    :Stop = :Stop
    +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000]
    +
    +## Record
    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

    The Riemannian Difference of Convex

    We first have to again defined the gradients with respect to the new metric

    function grad_h!(M, X, p; a=100, b=1)
    +    ∇h!(M, X, p; a=a, b=b)
    +    riemannian_gradient!(M, X, p, X)
    +    return X
    +end
    +function grad_h(M, p; a=100, b=1)
    +    X = zero(p)
    +    grad_h!(M, X, p; a=a, b=b)
    +    return X
    +end
    +function grad_g!(M, X, p; a=100, b=1)
    +    ∇g!(M, X, p; a=a,b=b)
    +    riemannian_gradient!(M, X, p, X)
    +    return X
    +end
    +function grad_g(M, p; a=100, b=1)
    +    X = zero(p)
    +    grad_g!(M, X, p; a=a, b=b)
    +    return X
    +end

    While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For $X \in \partial h(p^{(k)})$ the sunproblem top determine $p^{(k+1)}$ reads

    \[\operatorname*{argmin}_{p\in\mathcal M} g(p) - \langle X, \log_{p^{(k)}}p\rangle\]

    for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with $X = \operatorname{grad} h(p^{(k)})$ that

    \[\phi(p) = g(p) - \langle X, \log_{p^{(k)}}p\rangle += a\bigl( p_{1}^2-p_{2}\bigr)^2 + + 2\bigl(p_{1}-b\bigr)^2 - 2(p^{(k)}_1-b)p_1 + 2(p^{(k)}_1-b)p^{(k)}_1,\]

    its Euclidean gradient reads

    \[\operatorname{grad}\phi(p) = + \nabla \varphi(p) + = \begin{pmatrix} + 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^{(k)}_1-b)\\ + -2a(p_1^2-p_2) + \end{pmatrix}\]

    where we can again employ the gradient conversion from before to obtain the Riemannian gradient.

    mutable struct SubGrad{P,T,V}
    +    pk::P
    +    Xk::T
    +    a::V
    +    b::V
    +end
    +function (ϕ::SubGrad)(M, p)
    +    X = zero_vector(M, p)
    +    ϕ(M, X, p)
    +    return X
    +end
    +function (ϕ::SubGrad)(M, X, p)
    +    X .= [
    +        4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),
    +        -2 * ϕ.a * (p[1]^2 - p[2]),
    +    ]
    +    riemannian_gradient!(M, X, p, X) # convert
    +    return X
    +end

    And in orer to update the subsolvers gradient correctly, we have to overwrite

    set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)
    +set_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)

    And we again introduce for ease of use

    docR_g(M, p) = g(M, p; a=a, b=b)
    +docR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)
    +docR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)
    +docR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)
    +function docR_grad_f!(M, X, p)
    +    Y = zero_vector(M, p)
    +    docR_grad_g!(M, X, p)
    +    docR_grad_h!(M, Y, p)
    +    X .-= Y
    +    return X
    +end
    +docR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)

    Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.

    R_doc_state = difference_of_convex_algorithm(
    +    M_rb, docR_f, docR_g, docR_grad_h!, p0;
    +    gradient=docR_grad_f!,
    +    grad_g = docR_grad_g!,
    +    debug=[debug_vec..., 10^6],
    +    evaluation=InplaceEvaluation(),
    +    record=[:Iteration, :Cost],
    +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
    +    sub_grad=docR_sub_grad,
    +    sub_hess = nothing, # Use gradient descent
    +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
    +    return_state=true,
    +)
    Initial F(x): 7.2208e+03 
    +The algorithm performed a step with a change (0.0) less than 1.0e-16.
    +
    +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
    +After 1235 iterations
    +
    +## Parameters
    +* sub solver state:
    +    | # Solver state for `Manopt.jl`s Gradient Descent
    +    | After 2000 iterations
    +    | 
    +    | ## Parameters
    +    | * retraction method: ExponentialRetraction()
    +    | 
    +    | ## Stepsize
    +    | ArmijoLinesearch() with keyword parameters
    +    |   * initial_stepsize    = 1.0
    +    |   * retraction_method   = ExponentialRetraction()
    +    |   * contraction_factor  = 0.95
    +    |   * sufficient_decrease = 0.1
    +    | 
    +    | ## Stopping Criterion
    +    | Stop When _one_ of the following are fulfilled:
    +    |     Max Iteration 2000:   reached
    +    |     |grad f| < 1.0e-16: not reached
    +    | Overall: reached
    +    | This indicates convergence: No
    +
    +## Stopping Criterion
    +Stop When _one_ of the following are fulfilled:
    +    Max Iteration 100000000:    not reached
    +    |Δp| < 1.0e-16: reached
    +Overall: reached
    +This indicates convergence: Yes
    +
    +## Debug
    +    :Stop = :Stop
    +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
    +
    +## Record
    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

    Comparison in Iterations

    fig = plot(;
    +    legend=:topright,
    +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x)$ (log. scale)",
    +    yaxis=:log,
    +    ylims=(1e-16, 5*1e5),
    +    xaxis=:log,
    +    xlims=(1,10^8),
    +)
    +scatter!(fig, [1,], [f(M,p0),], label=raw"$f(p_0)$", markercolor=grey)
    +egi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries
    +egc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries
    +plot!(fig, egi, egc, color=teal, label="Euclidean GD")
    +#
    +rgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries
    +rgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries
    +plot!(fig, rgi, rgc, color=indigo, label="Riemannian GD")
    +#
    +edi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries
    +edc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries
    +plot!(fig, edi, edc, color=sand, label="Euclidean DoC")
    +#
    +rdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries
    +rdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries
    +plot!(fig, rdi, rdc, color=green, label="Riemannian DoC")

    And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.

    Literature

    [BFSS23]
    +
    +
    R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
    +
    +
    diff --git a/previews/PR10/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg b/previews/PR10/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..bd777e3 --- /dev/null +++ b/previews/PR10/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR10/examples/RayleighQuotient/index.html b/previews/PR10/examples/RayleighQuotient/index.html new file mode 100644 index 0000000..28e767a --- /dev/null +++ b/previews/PR10/examples/RayleighQuotient/index.html @@ -0,0 +1,142 @@ + +The Rayleigh Quotient · ManoptExamples.jl

    The Rayleigh Quotient

    Ronny Bergmann 2024-03-09

    Introduction

    This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.

    For a symmetric matrix $A \in \mathbb R^{n\times n}$ we consider the 📖 Rayleigh Quotient

    \[\operatorname*{arg\,min}_{x \in \mathbb R^n \backslash \{0\}} +\frac{x^{\mathrm{T}}Ax}{\lVert x \rVert^2}.\]

    On the sphere we can omit the denominator and obtain

    \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

    which by itself we can again continue in the embedding as

    \[\tilde f(x) = x^{\mathrm{T}}Ax,\qquad x \in \mathbb R^n.\]

    This cost has the nice feature that at the minimizer $p^*\in\mathbb S^{n-1}$ the function falue $f(p^*)$ is the smalles eigenvalue of $A$.

    For the embedded function $\tilde f$ the gradient and Hessian can be computed with classical methods as

    \[\begin{align*} +∇\tilde f(x) &= 2Ax, \qquad x ∈ ℝ^n, +\\ +∇^2\tilde f(x)[V] &= 2AV, \qquad x, V ∈ ℝ^n. +\end{align*}\]

    Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold $\mathcal M = \mathbb S^{n-1}$ are given by

    \[\begin{align*} +\operatorname{grad} f(p) &= 2Ap - 2(p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1}, +\\ +\operatorname{Hess} f(p)[X] &= 2AX - 2(p^{\mathrm{T}}AX)p - 2(p^{\mathrm{T}}Ap)X,\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1} +\end{align*}\]

    Let’s first generate an example martrx $A$.

    using Pkg;
    +cd(@__DIR__)
    +Pkg.activate("."); # use the example environment,
    using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random
    +Random.seed!(42)
    +n = 500
    +A = Symmetric(randn(n,n))

    And the manifolds

    M = Sphere(n-1)
    Sphere(499, ℝ)
    E = get_embedding(M)
    Euclidean(500; field = ℝ)

    Setup the corresponding functions

    Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute $f$ is called with M as their first argument and $\tilde f$ if called with E.

    We instantiate

    f = ManoptExamples.RayleighQuotientCost(A)
    +grad_f = ManoptExamples.RayleighQuotientGrad!!(A)
    +Hess_f = ManoptExamples.RayleighQuotientHess!!(A)

    the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory

    p0 = [1.0, zeros(n-1)...]
    +X = zero_vector(M, p0)

    we can both call

    Y = grad_f(M,p0)  # Allocates memory
    +grad_f(M,X,p0)    # Computes in place of X and returns the result in X.
    +norm(M, p0, X-Y)
    0.0

    Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.

    First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute

    λ = min(eigvals(A)...)
    -44.83860504694063

    A Solver based on gradient information

    Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient $\nabla \tilde f$. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].

    But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent

    s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,
    +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
    +    return_state=true,
    +)
    +q1 = get_solver_result(s)
    +s
    Initial f(x): -0.363357
    +# 50    f(x): -44.206244|grad f(p)|:2.3878466243532603
    +# 100   f(x): -44.546883|grad f(p)|:2.256125365459932
    +# 150   f(x): -44.765220|grad f(p)|:1.3051578932969494
    +# 200   f(x): -44.824730|grad f(p)|:0.5758153603739898
    +
    +# Solver state for `Manopt.jl`s Gradient Descent
    +After 200 iterations
    +
    +## Parameters
    +* retraction method: ExponentialRetraction()
    +
    +## Stepsize
    +ArmijoLinesearch() with keyword parameters
    +  * initial_stepsize    = 1.0
    +  * retraction_method   = ExponentialRetraction()
    +  * contraction_factor  = 0.95
    +  * sufficient_decrease = 0.1
    +
    +## Stopping Criterion
    +Stop When _one_ of the following are fulfilled:
    +    Max Iteration 200:  reached
    +    |grad f| < 1.0e-9: not reached
    +Overall: reached
    +This indicates convergence: No
    +
    +## Debug
    +    [(:Iteration, "# %-6d"), (:Cost, "f(x): %f"), (:GradientNorm, "|grad f(p)|:%s"), "\n", 50]

    From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.

    And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.

    q2 = gradient_descent(M, f, grad_f, p0;
    +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
    +)
    +#Test that both are the same
    +isapprox(M, q1,q2)
    Initial f(x): -0.363357
    +# 50    f(x): -44.206244|grad f(p)|:2.3878466243532843
    +# 100   f(x): -44.546883|grad f(p)|:2.2561253654599445
    +# 150   f(x): -44.765220|grad f(p)|:1.3051578932969203
    +# 200   f(x): -44.824730|grad f(p)|:0.5758153603739693
    +
    +true

    We can also benchmark both

    @benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)
    BenchmarkTools.Trial: 9 samples with 1 evaluation.
    + Range (min … max):  560.157 ms … 588.184 ms  ┊ GC (min … max): 5.67% … 5.45%
    + Time  (median):     570.733 ms               ┊ GC (median):    5.65%
    + Time  (mean ± σ):   570.970 ms ±   8.136 ms  ┊ GC (mean ± σ):  5.67% ± 0.11%
    +
    +  █       ██          █  █ █   █  █                           █  
    +  █▁▁▁▁▁▁▁██▁▁▁▁▁▁▁▁▁▁█▁▁█▁█▁▁▁█▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
    +  560 ms           Histogram: frequency by time          588 ms <
    +
    + Memory estimate: 1.13 GiB, allocs estimate: 3852.
    @benchmark gradient_descent($M, $f, $grad_f, $p0)
    BenchmarkTools.Trial: 62 samples with 1 evaluation.
    + Range (min … max):  78.280 ms … 85.791 ms  ┊ GC (min … max): 0.00% … 3.75%
    + Time  (median):     81.195 ms              ┊ GC (median):    0.00%
    + Time  (mean ± σ):   81.608 ms ±  2.007 ms  ┊ GC (mean ± σ):  1.07% ± 1.70%
    +
    +      ▁     ▄██▁▁▁   ▄▁   ▁▁   ▁ ▁       ▁        ▁     ▄   ▁  
    +  ▆▁▁▁█▁▁▁▆▁██████▆▆▆██▁▆▁██▆▆▆█▁█▁▁▁▆▆▆▆█▁▆▆▆▁▆▁▁█▁▁▁▆▁█▁▆▆█ ▁
    +  78.3 ms         Histogram: frequency by time        85.4 ms <
    +
    + Memory estimate: 12.02 MiB, allocs estimate: 3246.

    We see, that the conversion costs a bit of performance, but if the Euclidean gradient is easier to compute, this might still be ok.

    A Solver based (also) on (approximate) Hessian information

    To also involve the Hessian, we consider the trust regions solver with three cases:

    1. Euclidean, approximating the Hessian
    2. Euclidean, providing the Hessian
    3. Riemannian, providing the Hessian but also using in-place evaluations.
    q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,
    +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
    +);
    Initial f(x): -0.363357
    +# 10    f(x): -43.522431|grad f(p)|:9.779418323358204
    +# 20    f(x): -44.838605|grad f(p)|:1.3152995004883475e-11

    To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.

    q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,
    +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
    +);
    Initial f(x): -0.363357
    +# 10    f(x): -43.522431|grad f(p)|:9.779418323423842
    +# 20    f(x): -44.838605|grad f(p)|:1.7393361141546583e-11
    q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;
    +    evaluation=InplaceEvaluation(),
    +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
    +);
    Initial f(x): -0.363357
    +# 10    f(x): -43.522431|grad f(p)|:9.779418323423855
    +# 20    f(x): -44.838605|grad f(p)|:1.41150798598445e-11

    Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.

    @benchmark trust_regions($M, $f, $grad_f, $p0;
    +  objective_type=:Euclidean,
    +  evaluation=InplaceEvaluation(),
    +)
    BenchmarkTools.Trial: 3 samples with 1 evaluation.
    + Range (min … max):  2.333 s …   2.364 s  ┊ GC (min … max): 5.71% … 5.58%
    + Time  (median):     2.350 s              ┊ GC (median):    5.67%
    + Time  (mean ± σ):   2.349 s ± 15.696 ms  ┊ GC (mean ± σ):  5.66% ± 0.07%
    +
    +  █                             █                         █  
    +  █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
    +  2.33 s         Histogram: frequency by time        2.36 s <
    +
    + Memory estimate: 3.81 GiB, allocs estimate: 21948.
    @benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;
    +  evaluation=InplaceEvaluation(),
    +  objective_type=:Euclidean
    +)
    BenchmarkTools.Trial: 4 samples with 1 evaluation.
    + Range (min … max):  1.510 s …   1.536 s  ┊ GC (min … max): 6.00% … 5.80%
    + Time  (median):     1.520 s              ┊ GC (median):    5.99%
    + Time  (mean ± σ):   1.522 s ± 10.909 ms  ┊ GC (mean ± σ):  5.96% ± 0.11%
    +
    +  █               █           █                           █  
    +  █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
    +  1.51 s         Histogram: frequency by time        1.54 s <
    +
    + Memory estimate: 2.56 GiB, allocs estimate: 19277.
    @benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;
    +    evaluation=InplaceEvaluation(),
    +)
    BenchmarkTools.Trial: 51 samples with 1 evaluation.
    + Range (min … max):  93.198 ms … 103.528 ms  ┊ GC (min … max): 0.00% … 3.32%
    + Time  (median):     99.301 ms               ┊ GC (median):    3.37%
    + Time  (mean ± σ):   99.434 ms ±   1.940 ms  ┊ GC (mean ± σ):  2.72% ± 1.35%
    +
    +                                ▂   ▂█    ▅     ▂               
    +  ▅▁▁▁▁▁▁▁▁▁▁▁▁▁▅▁▁▁█▁▁▅▅▅▅▁▁▅▅▅█▁████▁▅█▅█████▅█▁▁▁▁▁▁█▁▅▁▁▁▅ ▁
    +  93.2 ms         Histogram: frequency by time          103 ms <
    +
    + Memory estimate: 35.42 MiB, allocs estimate: 15927.

    We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.

    Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.

    [distance(M, q1, q) for q ∈ [q2,q3] ]
    2-element Vector{Float64}:
    + 2.095490120148314e-15
    + 0.1301942153129163
    [distance(M, q3, q) for q ∈ [q4,q5] ]
    2-element Vector{Float64}:
    + 2.8330211010163085e-14
    + 7.010102023470712e-15

    Which we can also see in the final cost, comparing it to the Eigenvalue

    [f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]
    5-element Vector{Float64}:
    + 0.013874911807342016
    + 0.013874911807512547
    + 5.186961971048731e-12
    + 7.723599537712289e-12
    + 5.7909232964448165e-12

    Summary

    We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.

    Literature

    diff --git a/previews/PR10/examples/Riemannian-mean/index.html b/previews/PR10/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..9c4a87a --- /dev/null +++ b/previews/PR10/examples/Riemannian-mean/index.html @@ -0,0 +1,33 @@ + +Riemannian Mean · ManoptExamples.jl

    The Riemannian Center of Mass (mean)

    Ronny Bergmann 2023-07-02

    Preliminary Notes

    Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

    For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.

    The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

    There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

    For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

    using Pkg;
    +cd(@__DIR__)
    +Pkg.activate("."); # use the example environment,

    Loading packages and defining data

    Loading the necessary packages and defining a data set on a manifold

    using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
    +Random.seed!(42)
    +M = Sphere(2)
    +n = 100
    +σ = π / 8
    +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
    +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

    Variant 1: Using the functions

    We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.

    f = ManoptExamples.RiemannianMeanCost(data)
    +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

    Then we can for example directly call a gradient descent as

    x1 = gradient_descent(M, f, grad_f, first(data))
    3-element Vector{Float64}:
    + 0.6868392794810916
    + 0.006531600679186576
    + 0.7267799820815527

    Variant 2: Using the objective

    A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

    rmo = ManoptExamples.Riemannian_mean_objective(
    +    M, data,
    +    evaluation=InplaceEvaluation(),
    +)

    Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

    rmp = DefaultManoptProblem(M, rmo)

    This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

    s1 = GradientDescentState(M, copy(M, first(data)))
    +solve!(rmp, s1)
    +x2 = get_solver_result(s1)
    3-element Vector{Float64}:
    + 0.6868392794810916
    + 0.006531600679186576
    + 0.7267799820815527

    but we can easily use a conjugate gradient instead

    s2 = ConjugateGradientDescentState(
    +    M,
    +    copy(M, first(data)),
    +    StopAfterIteration(100),
    +    ArmijoLinesearch(M),
    +    FletcherReevesCoefficient(),
    +)
    +solve!(rmp, s2)
    +x3 = get_solver_result(s2)
    3-element Vector{Float64}:
    + 0.6868393352364576
    + 0.006531560027851705
    + 0.7267799297555925
    diff --git a/previews/PR10/examples/Robust-PCA/index.html b/previews/PR10/examples/Robust-PCA/index.html new file mode 100644 index 0000000..40640ac --- /dev/null +++ b/previews/PR10/examples/Robust-PCA/index.html @@ -0,0 +1,64 @@ + +Robust PCA · ManoptExamples.jl

    The Robust PCA computed on the Grassmann manifold

    Ronny BergmannLaura Weigl 2023-07-02

    For this example we first load the necessary packages.

    using Pkg;
    +cd(@__DIR__)
    +Pkg.activate("."); # use the example environment,
    using LinearAlgebra, Random, Statistics
    +using Manifolds, Manopt, ManoptExamples
    +using Plots
    +Random.seed!(42)

    Computing a Robust PCA

    For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

    We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

    \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

    The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

    \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

    where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

    The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

    First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

    n = 40
    +d = 2
    +outliers = 15
    +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
    +# Outliers:
    +permute = shuffle(1:size(data, 2))'
    +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
    +# We are looking for a line here so we set
    +m = 1

    We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

    M = Grassmann(d,m);

    For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

    Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

    Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

    The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

    We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

    ε = 1.0
    +iterations = 6
    +reduction = 0.5
    +U, S, V = svd(data);
    +p0 = U[:, 1:m]
    2×1 Matrix{Float64}:
    + -0.7494248652139397
    +  0.6620893983436593

    Let’s generate the cost and gradient we aim to use here

    f = ManoptExamples.RobustPCACost(M, data, ε)
    +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
    ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

    and check the initial cost

    f(M, p0)
    9.430690947905521

    Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

    q = copy(M, p0)
    +εi = ε
    +for i in 1:iterations
    +    f.ε = εi
    +    grad_f.ε = εi
    +    global q = trust_regions(
    +        M,
    +        f,
    +        grad_f,
    +        ApproxHessianFiniteDifference(
    +            M, q, f;
    +            vector_transport_method=ProjectionTransport(),
    +            retraction_method=PolarRetraction(),
    +        ),
    +        q;
    +        (project!)=project!,
    +    )
    +    global εi *= reduction
    +end

    When finally setting ε we can investigate the final cost

    f.ε = 0.0
    +f(M, q)
    9.412973804873698

    Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

    fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
    +plot!(
    +    fig,
    +    q[1] * [-1, 1] * 100,
    +    q[2] * [-1, 1] * 100;
    +    linecolor=:red,
    +    linewidth=2,
    +    label="Robust PCA",
    +);
    +plot!(
    +    fig,
    +    p0[1] * [-1, 1] * 100,
    +    p0[2] * [-1, 1] * 100;
    +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
    +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
    +    linewidth=2,
    +    linecolor=:black,
    +    label="Standard SVD",
    +)

    Figure 1: The result of the robust PCA vs. SVD

    diff --git a/previews/PR10/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg b/previews/PR10/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..73a6040 --- /dev/null +++ b/previews/PR10/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR10/examples/Rosenbrock/index.html b/previews/PR10/examples/Rosenbrock/index.html new file mode 100644 index 0000000..b9f4430 --- /dev/null +++ b/previews/PR10/examples/Rosenbrock/index.html @@ -0,0 +1,57 @@ + +Rosenbrock · ManoptExamples.jl

    The Rosenbrock Function

    Ronny Bergmann 2023-01-03

    After loading the necessary packages

    using Pkg;
    +cd(@__DIR__)
    +Pkg.activate("."); # use the example environment,
    using Manifolds, Manopt, ManoptExamples
    +using Plots

    We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).

    a = 100.0
    +b = 1.0
    +p0 = [1/10, 2/10]

    which is defined on $\mathbb R^2$, so we need

    M = ℝ^2
    Euclidean(2; field = ℝ)

    and can then generate both the cost and the gradient

    f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
    +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
    ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

    For comparison, we look at the initial cost

    f(M, p0)
    4.42

    And to illustrate, we run two small solvers with their default settings as a comparison.

    Gradient Descent

    We start with the gradient descent solver.

    Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

    gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
    # Solver state for `Manopt.jl`s Gradient Descent
    +After 200 iterations
    +
    +## Parameters
    +* retraction method: ExponentialRetraction()
    +
    +## Stepsize
    +ArmijoLinesearch() with keyword parameters
    +  * initial_stepsize    = 1.0
    +  * retraction_method   = ExponentialRetraction()
    +  * contraction_factor  = 0.95
    +  * sufficient_decrease = 0.1
    +
    +## Stopping Criterion
    +Stop When _one_ of the following are fulfilled:
    +    Max Iteration 200:  reached
    +    |grad f| < 1.0e-9: not reached
    +Overall: reached
    +This indicates convergence: No
    +
    +## Record
    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

    From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

    gd_x = get_record(gd_state, :Iteration, :Iteration)
    +gd_y =  get_record(gd_state, :Iteration, :Cost)
    +f(M, get_solver_result(gd_state))
    0.10562873187751265

    Quasi Newton

    We can improve this using the quasi Newton algorithm

    qn_state = quasi_Newton(M, f, grad_f, p0;
    +    record = [:Iteration, :Cost], return_state=true
    +)
    # Solver state for `Manopt.jl`s Quasi Newton Method
    +After 44 iterations
    +
    +## Parameters
    +* direction update:        limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.
    +* retraction method:       ExponentialRetraction()
    +* vector trnasport method: ParallelTransport()
    +
    +## Stepsize
    +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
    +  * retraction_method = ExponentialRetraction()
    +  * vector_transport_method = ParallelTransport()
    +
    +## Stopping Criterion
    +Stop When _one_ of the following are fulfilled:
    +    Max Iteration 1000: not reached
    +    |grad f| < 1.0e-6: reached
    +Overall: reached
    +This indicates convergence: Yes
    +
    +## Record
    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

    And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

    qn_x = get_record(qn_state, :Iteration, :Iteration)
    +qn_y =  get_record(qn_state, :Iteration, :Cost)
    +f(M, get_solver_result(qn_state))
    2.070121545761584e-14

    and see that the final value is close to the one of the minimizer

    f(M, ManoptExamples.minimizer(f))
    0.0

    which we also see if we plot the recorded cost.

    fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
    +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

    Figure 1: The result of the robust PCA vs. SVD

    diff --git a/previews/PR10/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg b/previews/PR10/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..d29af0d --- /dev/null +++ b/previews/PR10/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR10/examples/index.html b/previews/PR10/examples/index.html new file mode 100644 index 0000000..1d65889 --- /dev/null +++ b/previews/PR10/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

    List of Examples

    NameprovidesDocumentationComment
    A Benchmark for Difference of Convexcontains a few simple functions
    Solving Rosenbrock with Difference of ConvexDoC split of Rosenbrock📚uses a Rosenbrock based metric
    Difference of Convex vs. Frank-Wolfeclosed-form sub solver
    Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
    Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
    Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚
    The Rayleigh Quotient$f$, $\operatorname{grad}f$ (A/I), $\operatorname{Hess}f$ (A/I), objective📚

    Symbols:

    • A Allocating variant
    • I In-place variant
    • 📚 link to documented functions in the documentation
    diff --git a/previews/PR10/index.html b/previews/PR10/index.html new file mode 100644 index 0000000..5e288cb --- /dev/null +++ b/previews/PR10/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

    Welcome to ManoptExample.jl

    This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

    Each example usually consists of

    • a cost function and additional objects, like the gradient or proximal maps, see objectives
    • an example explaining how to use these, see examples

    Helping functions that are used in one or more examples can be found in the section of functions in the menu.

    diff --git a/previews/PR10/objectives/index.html b/previews/PR10/objectives/index.html new file mode 100644 index 0000000..ab847c9 --- /dev/null +++ b/previews/PR10/objectives/index.html @@ -0,0 +1,42 @@ + +Objectives · ManoptExamples.jl

    List of Objectives defined for the Examples

    Rayleigh Quotient on the Sphere

    See the Rayleigh example (TODO) to see these in use.

    ManoptExamples.RayleighQuotientCostType
    RayleighQuotientCost

    A functor representing the Rayleigh Quotient cost function.

    Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either

    \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

    or extended into the embedding as

    \[f(x) = x^{\mathrm{T}}Ax, \qquad x ∈ ℝ^n,\]

    which is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of $𝕊^{n-1}$.

    Fields

    • A – storing the matrix internally

    Constructor

    RayleighQuotientCost(A)

    Create the Rayleigh cost function.

    See also

    RayleighQuotientGrad!!, RayleighQuotientHess!!

    source
    ManoptExamples.RayleighQuotientGrad!!Type
    RayleighQuotientGrad!!

    A functor representing the Rayleigh Quotient gradient function.

    Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either

    \[\operatorname{grad} f(p) = 2 Ap - 2 (p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1},\]

    or taking the Euclidean gradient of the Rayleigh quotient on the sphere as

    \[∇f(x) = 2Ax, \qquad x ∈ ℝ^n.\]

    For details, see Example 3.62 of [Bou23].

    Fields

    • A – storing the matrix internally

    Constructor

    RayleighQuotientGrad!!(A)

    Create the Rayleigh quotient gradient function.

    See also

    RayleighQuotientCost, RayleighQuotientHess!!

    source
    ManoptExamples.RayleighQuotientHess!!Type
    RayleighQuotientHess!!

    A functor representing the Rayleigh Quotient Hessian.

    Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either

    \[\operatorname{Hess} f(p)[X] = 2 \bigl(AX - (p^{mathrm{T}}AX)p - (p^{\mathrm{T}}Ap)X\bigr),\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1}\]

    or taking the Euclidean Hessian of the Rayleigh quotient on the sphere as

    \[∇^2f(x)[V] = 2AV, \qquad x, V ∈ ℝ^n.\]

    For details, see Example 5.27 of [Bou23].

    Fields

    • A – storing the matrix internally

    Constructor

    RayleighQuotientHess!!(A)

    Create the Rayleigh quotient Hessian function.

    See also

    RayleighQuotientCost, RayleighQuotientGrad!!

    source

    Riemannian Mean

    See the Riemannian mean example to see these in use.

    ManoptExamples.RiemannianMeanCostType
    RiemannianMeanCost{P}

    A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

    For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

    \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

    where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

    Constructor

    RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

    Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

    See also

    RiemannianMeanGradient!!, Riemannian_mean_objective

    source
    ManoptExamples.RiemannianMeanGradient!!Type
    RiemannianMeanGradient!!{P} where P

    A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

    For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

    \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

    where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

    This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

    Constructors

    RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

    Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

    RiemannianMeanGradient!!(
    +    M::AbstractManifold,
    +    data::AbstractVector{P};
    +    initial_vector::T=zero_vector(M, first(data)),
    +) where {P,T}

    Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

    See also

    RiemannianMeanCost, Riemannian_mean_objective

    source
    ManoptExamples.Riemannian_mean_objectiveMethod
    Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
    +Riemannian_mean_objective(M, data;
    +initial_vector=zero_vector(M, first(data)),
    +evaluation=AllocatingEvaluton()
    +)

    Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

    See also

    RiemannianMeanCost, RiemannianMeanGradient!!

    Note

    The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

    source

    Robust PCA

    See the Robust PCA example to see these in use.

    ManoptExamples.RobustPCACostType
    RobustPCACost{D,F}

    A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

    \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

    This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

    \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

    Note that this is a mutable struct so you can adapt the $ε$ later on.

    Constructor

    RobustPCACost(data::AbstractMatrix, ε=1.0)
    +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

    Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

    source
    ManoptExamples.RobustPCAGrad!!Type
    RobustPCAGrad!!{D,F}

    A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

    Note that this is a mutable struct so you can adapt the $ε$ later on.

    Constructor

    RobustPCAGrad!!(data, ε=1.0)
    +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

    Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

    source
    ManoptExamples.robust_PCA_objectiveFunction
    robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
    +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

    Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

    See also

    RobustPCACost, RobustPCAGrad!!

    Note

    Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.

    source

    Rosenbrock Function

    See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.

    ManoptExamples.RosenbrockCostType
    RosenbrockCost

    Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

    \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

    which means that for the 2D case, the manifold $\mathcal M$ is ignored.

    See also 📖 Rosenbrock (with slightly different parameter naming).

    Constructor

    f = Rosenbrock(a,b)

    generates the struct/function of the Rosenbrock cost.

    source
    ManoptExamples.RosenbrockGradient!!Type
    RosenbrockGradient

    Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

    \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

    i.e. also here the manifold is ignored.

    Constructor

    RosenbrockGradient(a,b)

    Functors

    grad_f!!(M,p)
    +grad_f!!(M, X, p)

    evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

    source
    ManoptExamples.RosenbrockMetricType
    RosenbrockMetric <: AbstractMetric

    A metric related to the Rosenbrock problem, where the metric at a point $p∈\mathbb R^2$ is given by

    \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_{1}^2 & -2p_{1} \\ + -2p_{1} & 1 +\end{pmatrix},\]

    where the $\mathrm{Rb}$ stands for Rosenbrock

    source
    Base.expMethod
    q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)
    +exp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)

    Compute the exponential map with respect to the RosenbrockMetric.

    \[ q = \begin{pmatrix} p_1 + X_1 \\ p_2+X_2+X_1^2\end{pmatrix}\]

    source
    Base.logMethod
    X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)
    +log!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)

    Compute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any $j ∈ \{1,…,m\}$

    \[X = \begin{pmatrix} + q_1 - p_1 \\ + q_2 - p_2 + (q_1 - p_1)^2 +\end{pmatrix}\]

    source
    Manifolds.inverse_local_metricMethod
    inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

    Return the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

    \[G^{-1}_p = +\begin{pmatrix} + 1 & 2p_1\\ + 2p_1 & 1+4p_1^2 \\ +\end{pmatrix}.\]

    source
    Manifolds.local_metricMethod
    local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

    Return the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

    \[G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix}\]

    source
    ManifoldsBase.change_representerMethod
    Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)
    +change_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)

    Given the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.

    this function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.

    source
    ManifoldsBase.innerMethod
    inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)

    Compute the inner product on $\mathbb R^2$ with respect to the RosenbrockMetric, i.e. for $X,Y \in T_p\mathcal M$ we have

    \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1\\ + -2p_1 & 1 +\end{pmatrix},\]

    source

    Literature

    diff --git a/previews/PR10/references.bib b/previews/PR10/references.bib new file mode 100644 index 0000000..e65e411 --- /dev/null +++ b/previews/PR10/references.bib @@ -0,0 +1,46 @@ +@article{BergmannFerreiraSantosSouza:2023, + AUTHOR = {Bergmann, R. and Ferreira, O. P. and Santos, E. M. and Souza, J. C. O.}, + JOURNAL = {arXiv preprint}, + TITLE = {The difference of convex algorithm on Hadamard manifolds}, + URL = {https://arxiv.org/abs/2112.05250}, + YEAR = {2023} +} + +@book{Boumal:2023, + TITLE = {An Introduction to Optimization on Smooth Manifolds}, + AUTHOR = {Boumal, Nicolas}, + YEAR = {2023}, + MONTH = mar, + EDITION = {First}, + PUBLISHER = {Cambridge University Press}, + DOI = {10.1017/9781009166164}, + ABSTRACT = {Optimization on Riemannian manifolds-the result of smooth geometry and optimization merging into one elegant modern framework-spans many areas of science and engineering, including machine learning, computer vision, signal processing, dynamical systems and scientific computing. This text introduces the differential geometry and Riemannian geometry concepts that will help students and researchers in applied mathematics, computer science and engineering gain a firm mathematical grounding to use these tools confidently in their research. Its charts-last approach will prove more intuitive from an optimizer's viewpoint, and all definitions and theorems are motivated to build time-tested optimization algorithms. Starting from first principles, the text goes on to cover current research on topics including worst-case complexity and geodesic convexity. Readers will appreciate the tricks of the trade for conducting research and for numerical implementations sprinkled throughout the book.}, + ISBN = {978-1-00-916616-4}, + URL = {https://www.nicolasboumal.net/#book} +} + +@article{SouzaOliveira:2015, + AUTHOR = {J. C. O. Souza and P. R. Oliveira}, + DOI = {10.1007/s10898-015-0282-7}, + JOURNAL = {Journal of Global Optimization}, + MONTH = feb, + NUMBER = {4}, + PAGES = {797--810}, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {63}, + TITLE = {A proximal point algorithm for DC fuctions on Hadamard manifolds}, + YEAR = {2015} +} + +@article{WeberSra:2022, + DOI = {10.1007/s10107-022-01840-5}, + YEAR = {2022}, + MONTH = jul, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {199}, + NUMBER = {1-2}, + PAGES = {525--556}, + AUTHOR = {Melanie Weber and Suvrit Sra}, + TITLE = {Riemannian Optimization via Frank-Wolfe Methods}, + JOURNAL = {Mathematical Programming} +} \ No newline at end of file diff --git a/previews/PR10/references/index.html b/previews/PR10/references/index.html new file mode 100644 index 0000000..da9132c --- /dev/null +++ b/previews/PR10/references/index.html @@ -0,0 +1,15 @@ + +References · ManoptExamples.jl

    Literature

    [BFSS23]
    +
    +
    R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
    +
    [Bou23]
    +
    + +
    [SO15]
    +
    +
    J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
    +
    [WS22]
    +
    +
    M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
    +
    +
    diff --git a/previews/PR10/search/index.html b/previews/PR10/search/index.html new file mode 100644 index 0000000..1d78f6c --- /dev/null +++ b/previews/PR10/search/index.html @@ -0,0 +1,2 @@ + +Search · ManoptExamples.jl

    Loading search...

      diff --git a/previews/PR10/search_index.js b/previews/PR10/search_index.js new file mode 100644 index 0000000..3f1ad07 --- /dev/null +++ b/previews/PR10/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Difference-of-Convex-Frank-Wolfe/#A-comparison-of-the-Difference-of-Convex-and-Frank-Wolfe-Algorithm","page":"Frank Wolfe comparison","title":"A comparison of the Difference of Convex and Frank Wolfe Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Ronny Bergmann 2023-11-06","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Introduction","page":"Frank Wolfe comparison","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing ManifoldsBase, Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices mathcal P(n) with the affine invariant metric. Let q_1ldotsq_m in mathcal P(n) be a set of points and mu_1ldotsmu_m be a set of weights, such that they sum to one. We consider then","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmax_pinmathcal C h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"h(p) =\nsum_j=1^m mu_j d^2(pq_i)\nquad text where \nd^2(pq_i) = operatornametrbigl(\n log^2(p^-frac12q_jp^-frac12)\nbig)\nqquadtextandqquad\nmathcal C = pin mathcal M bar Lpreceq p preceq bar U ","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"for a lower bound L and an upper bound U for the matrices in the positive definite sense A preceq B Leftrightarrow (B-A) is positive semi-definite","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"When every one of the weights mu_1 ldots mu_m are equal, this function h is known as the of the set q_1 dots q_m.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And for our example we set","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Random.seed!(42)\nn = 20\nm = 100\nM = SymmetricPositiveDefinite(n)\nq = [rand(M) for _ in 1:m];\nw = rand(m)\nw ./=sum(w)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use as lower and upper bound the arithmetic and geometric mean L and U, respectively.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )\nU = sum( wi * qi for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p0 = (L+U)/2","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can check that it is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Common-Functions","page":"Frank Wolfe comparison","title":"Common Functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Given p in mathcal M, X in T_pmathcal M on the symmetric positive definite matrices M, this method computes the closed form solution to","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_qin mathcal C langle X log_p qrangle\n = operatorname*argmin_qin mathcal C operatornametr(Slog(YqY))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"where mathcal C = q L preceq q preceq U , S = p^-12Xp^-12, and Y=p^-12.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The solution is given by Z=X^-1Qbigl( P^mathrmT-operatornamesgn(D)_+P+hatLbigr)Q^mathrmTX^-1,@ where S=QDQ^mathrmT is a diagonalization of S, hatU-hatL=P^mathrmTP with hatL=Q^mathrmTXLXQ and hatU=Q^mathrmTXUXQ, where -mboxsgn(D)_+ is the diagonal matrix","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatornamediagbigl(\n -operatornamesgn(d_11)_+ ldots -operatornamesgn(d_nn)_+\nbigr)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and D=(d_ij).","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@doc raw\"\"\"\n closed_form_solution!(M, q, L, U, p X)\n\nCompute the closeed form solution of the constraint sub problem in place of ``q``.\n\"\"\"\nfunction closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)\n # extract p^1/2 and p^{-1/2}\n (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)\n # Compute D & Q\n e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk = QDQ'\n D = Diagonal(1.0 .* (e2.values .< 0))\n Q = e2.vectors\n #println(p)\n Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q\n Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q\n P = cholesky(Hermitian(Uprime - Lprime))\n z = P.U' * D * P.U + Lprime\n copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-Difference-of-Convex-Formulation","page":"Frank Wolfe comparison","title":"The Difference of Convex Formulation","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use g(p) = iota_mathcal C(p) as the indicator funtion of the set mathcal C. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function is_pos_def(p; atol=5e-13)\n e = eigen(Symmetric(p))\n return all((e.values .+ atol) .> 0)\nend\nfunction g(p, L, U)\n return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf\nend\nh(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"So we can first check that p0 is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"g(p0,L,U) == 0.0","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"true","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Now setting","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We look for a maximum of h, where g is minimal, i.e. g(p) is zero or in other words p in mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The gradient of h can also be implemented in closed form as","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))\nfunction grad_h!(M, X, p, w, q)\n Y = copy(M, p, X)\n zero_vector!(M, X, p)\n for (wi, qi) in zip(w,q)\n log!(M, Y, p, qi)\n Y .*= - 2.0*wi\n X .+= Y\n end\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can further define the cost, which will just be +infty outside of mathcal C. We define","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_dc(M, p) = g(p, L, U) - h(M, p, w, q)\ngrad_h!(M, X, p) = grad_h!(M, X, p, w, q)\nfunction grad_f_dc!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Here we can omit the gradient of g in the definition of operatornamegrad f, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As the last step, we can provide the closed form solver for the DC sub problem given at iteration k by","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pin mathcal C\n biglangle -operatornamegrad h(p^(k)) exp^-1_p^(k)pbigrangle","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Which we con compute","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution!(M, q, p, X)\n closed_form_solution!(M, q, L, U, p, -X)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For safety, we might want to avoid ending up at the boundary of mathcal C. That is we reduce the distance we walk towards the solution q a bit.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution_safe!(M, q, p, X)\n p_last = copy(M,p) # since p=q might be in place\n closed_form_solution!(M, q, L, U, p, -X)\n q_orig = copy(M,q) # since we do the following in place of q\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n s = 1.0\n d = distance(M, p_last, q_orig);\n # if we are close to zero, we reduce faster.\n α = d < 1/(n^2) ? 0.66 : 0.9995;\n i=0\n while (a < 0) || (b < 0)\n s *= α\n shortest_geodesic!(M, q, p_last, q_orig, s)\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n #println(\"$i a: $a, b = $b with s=$s\")\n i=i+1\n if (i>100) # safety fallback\n #@warn \" $i steps where not enough $s ($α)\\n$a $b\\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs\"\n qe = eigen(q)\n if a < 0\n qe.values .+= min(1e-8, n*abs(min(a,b)))\n else\n qe.values .-= min(1e-8, n*abs(min(a,b)))\n end\n q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n return q\n end\n end\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-DoC-solver-run","page":"Frank Wolfe comparison","title":"The DoC solver run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s compare both methods when they have the same stopping criteria","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;\n gradient=grad_f_dc!,\n sub_problem=dc_sub_solution_safe!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(300) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 30, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(p): -0.77661458292831\n# 30 F(p): -0.78442484721750 |Δp|: 0.05540912123673 |grad f(p)|: 0.17699249 |Δgrad f(p)|: 0.17568860\n# 60 F(p): -0.78442249424985 |Δp|: 0.01271970630910 |grad f(p)|: 0.17696800 |Δgrad f(p)|: 0.02560503\n# 90 F(p): -0.78442062994525 |Δp|: 0.00775000850811 |grad f(p)|: 0.17694808 |Δgrad f(p)|: 0.01425163\nAt iteration 94 the change of the gradient (2.7191299073631735e-13) was less than 1.0e-9.\n 18.916444 seconds (16.97 M allocations: 2.515 GiB, 4.10% gc time, 71.57% compilation time)\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 94 iterations\n\n## Parameters\n* sub solver state:\n | InplaceEvaluation()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 300: not reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 30]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s extract the final point and look at its cost","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_dc = get_solver_result(state1_dc);\nf_dc(M, p1_dc)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844202524356105","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (7.982181192947889e-13, 0.0671963429079244)\n (1.48264011328508e-6, 0.06661167049818745)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For the statistics we extract the recordings from the state","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Define-the-Frank-Wolfe-functions","page":"Frank Wolfe comparison","title":"Define the Frank-Wolfe functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For Frank wolfe, the cost is just defined as -h(p) but the minimisation is constraint to mathcal C, which is enfored by the oracle.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_fw(M, p) = -h(M, p, w, q)\nfunction grad_f_fw!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend\noracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-FW-Solver-Run","page":"Frank Wolfe comparison","title":"The FW Solver Run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Similarly we can run the Frank-Wolfe algorithm with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;\n sub_problem=oracle_fw!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(10^4) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), :Cost, (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 2*10^3, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial f(x): -0.776615\n# 2000 f(x): -0.784420 |Δp|: 0.04611942377572 |grad f(p)|: 0.17693408 |Δgrad f(p)|: 0.17555618\n# 4000 f(x): -0.784421 |Δp|: 0.00372201631976 |grad f(p)|: 0.17694619 |Δgrad f(p)|: 0.00749427\n# 6000 f(x): -0.784422 |Δp|: 0.00205683506786 |grad f(p)|: 0.17695204 |Δgrad f(p)|: 0.00414088\n# 8000 f(x): -0.784422 |Δp|: 0.00140675676260 |grad f(p)|: 0.17695565 |Δgrad f(p)|: 0.00283200\n# 10000 f(x): -0.784422 |Δp|: 0.00106177438598 |grad f(p)|: 0.17695815 |Δgrad f(p)|: 0.00213746\nThe algorithm reached its maximal number of iterations (10000).\n284.845470 seconds (56.00 M allocations: 93.631 GiB, 2.87% gc time, 0.36% compilation time)\n\n# Solver state for `Manopt.jl`s Frank Wolfe Method\nAfter 10000 iterations\n\n## Parameters\n* inverse retraction method: LogarithmicInverseRetraction()\n* retraction method: ExponentialRetraction()\n* sub solver state:\n | InplaceEvaluation()\n\n## Stepsize\nDecreasingStepsize(; length=2.0, factor=1.0, subtrahend=0.0, shift=2)\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 10000: reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"f(x): %f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 2000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we take a look at this result as well","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_fw = get_solver_result(state1_fw);\nf_dc(M, p1_fw)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844220281765091","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And its feasibility","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.91517933333972e-10, 0.06659173821659133)\n (3.2456549803073825e-5, 0.06713970236060221)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Statistics","page":"Frank Wolfe comparison","title":"Statistics","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We extract the recorded values","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"# DoC\niter1_dc = get_record(state1_dc, :Iteration, :Iteration)\npk_dc = get_record(state1_dc,:Iteration,:Iterate)\ncosts1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))\ndc_min = minimum(costs1_dc)\n# FW\niter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]\npk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]\ncosts1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x_k)-f^*$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-8, 10^-2),\n xaxis=:log,\n xlims=(1,10^4),\n)\nplot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label=\"Difference of Convex\")\nplot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label=\"Frank-Wolfe\")","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Literature","page":"Frank Wolfe comparison","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Pages = [\"examples/Difference-of-Convex-Frank-Wolfe.md\"]\nCanonical=false","category":"page"},{"location":"references/#Literature","page":"References","title":"Literature","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/ManoptExamples.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-of-the-Difference-of-Convex-Algorithms","page":"A Benchmark","title":"Benchmark of the Difference of Convex Algorithms","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Introduction","page":"A Benchmark","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where ghcolon mathcal M to mathbb R are geodesically convex function on the Riemannian manifold mathcal M.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#The-DC-Problem","page":"A Benchmark","title":"The DC Problem","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We start with defining the two convex functions gh and their gradients as well as the DC problem f and its gradient for the problem","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":" operatorname*argmin_pinmathcal M bigl( logbigr(det(p)bigr)bigr)^4 - bigl(log det(p) bigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where the critical points obtain a functional value of -frac14.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where mathcal M is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We first define the corresponding functions","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"g(M, p) = log(det(p))^4\nh(M, p) = log(det(p))^2\nf(M, p) = g(M, p) - h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and their gradients","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"grad_g(M, p) = 4 * (log(det(p)))^3 * p\ngrad_h(M, p) = 2 * log(det(p)) * p\ngrad_f(M, p) = grad_g(M, p) - grad_h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which we can use to verify that the gradients of g and h are correct. We use for that","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"n = 6\nM = SymmetricPositiveDefinite(n)\np0 = log(n) * Matrix{Float64}(I, n, n);\nX0 = 1 / n * Matrix{Float64}(I, n, n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"to tall both checks","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, g, grad_g, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, h, grad_h, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which both pass the test. We continue to define their inplace variants","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"function grad_g!(M, X, p)\n copyto!(M, X, p)\n X .*= 4 * (log(det(p)))^3\n return X\nend\nfunction grad_h!(M, X, p)\n copyto!(M, X, p)\n X .*= 2 * (log(det(p)))\n return X\nend\nfunction grad_f!(M, X, p)\n grad_g!(M, X, p)\n Y = copy(M, p, X)\n grad_h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And compare times for both algorithms, with a bit of debug output.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dca = difference_of_convex_algorithm(\n M,\n f,\n g,\n grad_h!,\n p0;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n (:GradientNorm, \" |grad_f(p)|: %1.9f\"),\n (:Change, \" |δp|: %1.9f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState(M, copy(M, p0)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470\n# 5 f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127\n# 10 f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103\n# 15 f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.000000003 |δp|: 0.000000011\nThe algorithm reached approximately critical point after 24 iterations; the gradient norm (3.9079528504063575e-11) is less than 1.0e-10.\n 6.353254 seconds (8.13 M allocations: 556.599 MiB, 3.68% gc time, 99.43% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The cost is","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dca)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Similarly the DCPPA performs","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dcppa = difference_of_convex_proximal_point(\n M,\n grad_h!,\n p0;\n g=g,\n grad_g=grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n \" \",\n (:GradientNorm, \"|grad_f(p)|: %1.10f\"),\n (:Change, \"|δp|: %1.10f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState(M, copy(M, p0)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470 \n# 5 f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692\n# 10 f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316\n# 15 f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968\n# 25 f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530\n# 30 f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048\n# 35 f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001\nThe algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.\n 1.587924 seconds (1.77 M allocations: 123.450 MiB, 1.54% gc time, 96.62% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dcppa)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-I:-Time-comparison","page":"A Benchmark","title":"Benchmark I: Time comparison","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()\ndcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()\nN_max=14\nN = 2:N_max","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and run a benchmark for both algorithms","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"for n in N\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I, n, n)\n bdca = @benchmark difference_of_convex_algorithm(\n $Mn,\n $f,\n $g,\n $grad_h!,\n $pn;\n grad_g=$grad_g!,\n gradient=$grad_f!,\n evaluation=InplaceEvaluation(),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dca_benchmarks[n] = bdca\n bdcppa = @benchmark difference_of_convex_proximal_point(\n $Mn,\n $grad_h!,\n $pn;\n g=$g,\n grad_g=$grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dcppa_benchmarks[n] = bdcppa\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]\ndca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]\ndcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Time (sec.)\")\nplot!(dims, dca_times; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims, dcppa_times; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-II:-Iterations-and-cost.","page":"A Benchmark","title":"Benchmark II: Iterations and cost.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"N2 = [5,10,20,40,80]\ndims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]\ndca_iterations = Dict{Int,Int}()\ndca_costs = Dict{Int,Vector{Float64}}()\ndcppa_iterations = Dict{Int,Int}()\ndcppa_costs = Dict{Int,Vector{Float64}}()","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time for n in N2\n println(n)\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I,n,n);\n @time dca_st = difference_of_convex_algorithm(\n Mn, f, g, grad_h!, pn;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation = InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state = TrustRegionsState(Mn, copy(Mn, pn)),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dca_costs[n] = get_record(dca_st, :Iteration, :Cost)\n dca_iterations[n] = length(dca_costs[n])\n @time dcppa_st = difference_of_convex_proximal_point(\n Mn, grad_h!, pn;\n g=g,\n grad_g=grad_g!,\n λ = i -> 1/(2*n),\n cost = f,\n gradient= grad_f!,\n evaluation = InplaceEvaluation(),\n stepsize = ConstantStepsize(1.0),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state = TrustRegionsState(Mn, copy(Mn, pn)),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)\n dcppa_iterations[n] = length(dcppa_costs[n])\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The iterations are like","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Iterations\")\nplot!(dims2, [values(dca_iterations)...]; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims2, [values(dcppa_iterations)...]; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And for the developtment of the cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where we can see that the DCA needs less iterations than the DCPPA.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Literature","page":"A Benchmark","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Pages = [\"examples/Difference-of-Convex-Benchmark.md\"]\nCanonical=false","category":"page"},{"location":"objectives/#List-of-Objectives-defined-for-the-Examples","page":"Objectives","title":"List of Objectives defined for the Examples","text":"","category":"section"},{"location":"objectives/#Rayleigh","page":"Objectives","title":"Rayleigh Quotient on the Sphere","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rayleigh example (TODO) to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RayleighQuotient.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RayleighQuotientCost","page":"Objectives","title":"ManoptExamples.RayleighQuotientCost","text":"RayleighQuotientCost\n\nA functor representing the Rayleigh Quotient cost function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either\n\nf(p) = p^mathrmTApqquad p 𝕊^n-1\n\nor extended into the embedding as\n\nf(x) = x^mathrmTAx qquad x ℝ^n\n\nwhich is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of 𝕊^n-1.\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientCost(A)\n\nCreate the Rayleigh cost function.\n\nSee also\n\nRayleighQuotientGrad!!, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientGrad!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientGrad!!","text":"RayleighQuotientGrad!!\n\nA functor representing the Rayleigh Quotient gradient function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either\n\noperatornamegrad f(p) = 2 Ap - 2 (p^mathrmTAp)*pqquad p 𝕊^n-1\n\nor taking the Euclidean gradient of the Rayleigh quotient on the sphere as\n\nf(x) = 2Ax qquad x ℝ^n\n\nFor details, see Example 3.62 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientGrad!!(A)\n\nCreate the Rayleigh quotient gradient function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientHess!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientHess!!","text":"RayleighQuotientHess!!\n\nA functor representing the Rayleigh Quotient Hessian.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either\n\noperatornameHess f(p)X = 2 bigl(AX - (p^mathrmTAX)p - (p^mathrmTAp)Xbigr)qquad p 𝕊^n-1 X in T_p𝕊^n-1\n\nor taking the Euclidean Hessian of the Rayleigh quotient on the sphere as\n\n^2f(x)V = 2AV qquad x V ℝ^n\n\nFor details, see Example 5.27 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientHess!!(A)\n\nCreate the Rayleigh quotient Hessian function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientGrad!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective-Tuple{AbstractVector}","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also 📖 Rosenbrock (with slightly different parameter naming).\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\ngrad_f!!(M,p)\ngrad_f!!(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockMetric","page":"Objectives","title":"ManoptExamples.RosenbrockMetric","text":"RosenbrockMetric <: AbstractMetric\n\nA metric related to the Rosenbrock problem, where the metric at a point pmathbb R^2 is given by\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\nwhere the mathrmRb stands for Rosenbrock\n\n\n\n\n\n","category":"type"},{"location":"objectives/#Base.exp-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Number}","page":"Objectives","title":"Base.exp","text":"q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)\nexp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)\n\nCompute the exponential map with respect to the RosenbrockMetric.\n\n q = beginpmatrix p_1 + X_1 p_2+X_2+X_1^2endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Base.log-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any}","page":"Objectives","title":"Base.log","text":"X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)\nlog!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)\n\nCompute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any j 1m\n\nX = beginpmatrix\n q_1 - p_1 \n q_2 - p_2 + (q_1 - p_1)^2\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.inverse_local_metric-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.inverse_local_metric","text":"inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG^-1_p =\nbeginpmatrix\n 1 2p_1\n 2p_1 1+4p_1^2 \nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.local_metric-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.local_metric","text":"local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.change_representer-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, ManifoldsBase.EuclideanMetric, Any, Any}","page":"Objectives","title":"ManifoldsBase.change_representer","text":"Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)\nchange_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)\n\nGiven the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.\n\nthis function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.inner-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Any}","page":"Objectives","title":"ManifoldsBase.inner","text":"inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)\n\nCompute the inner product on mathbb R^2 with respect to the RosenbrockMetric, i.e. for XY in T_pmathcal M we have\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1\n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Literature","page":"Objectives","title":"Literature","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Pages = [\"objectives/index.md\"]\nCanonical=false","category":"page"},{"location":"examples/#List-of-Examples","page":"Overview","title":"List of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation Comment\nA Benchmark for Difference of Convex contains a few simple functions \nSolving Rosenbrock with Difference of Convex DoC split of Rosenbrock 📚 uses a Rosenbrock based metric\nDifference of Convex vs. Frank-Wolfe closed-form sub solver\nRiemannian Mean f, operatornamegradf (A/I), objective 📚 \nRobust PCA f, operatornamegradf (A/I), objective 📚 \nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚 \nThe Rayleigh Quotient f, operatornamegradf (A/I), operatornameHessf (A/I), objective 📚 ","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Solving-Rosenbrock-with-the-Difference-of-Convex-Algorithm","page":"Rosenbrock Metric","title":"Solving Rosenbrock with the Difference of Convex Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Introduction","page":"Rosenbrock Metric","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Both the Rosenbrock problem","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":" operatorname*argmin_xinmathbb R^2 abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where ab0 and usually b=1 and a gg b, we know the minimizer x^* = (bb^2)^mathrmT, and also the (Euclidean) gradient","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"nabla f(x) =\n beginpmatrix\n 4a(x_1^2-x_2) -2a(x_1^2-x_2)\n endpmatrix\n +\n beginpmatrix\n 2(x_1-b) 0\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Furthermore, the RosenbrockMetric can be used on mathbb R^2, that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"XY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"The Euclidean Gradient\nThe Riemannian gradient descent with respect to the RosenbrockMetric\nThe Euclidean Difference of Convex Algorithm\nThe Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Where we obtain a difference of convex problem by writing","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f(x) = abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2\n = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 - bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"g(x) = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 quadtext and quad h(x) = bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nimport Manopt: set_manopt_parameter!\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\ngreen = paul_tol[\"mutedgreen\"]\nsand = paul_tol[\"mutedsand\"]\nteal = paul_tol[\"mutedteal\"]\ngrey = paul_tol[\"mutedgrey\"]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"To emphasize the effect, we choose a quite large value of a.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"a = 2*10^5\nb = 1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and use the starting point and a direction to check gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"p0 = [0.1, 0.2]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Euclidean Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Euclidean gradient we can just use the same approach as in the Rosenbrock example","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M = ℝ^2\nf = ManoptExamples.RosenbrockCost(M; a=a, b=b)\n∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"define a common debug vector","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"debug_vec = [\n (:Iteration, \"# %-8d \"),\n (:Cost, \"F(x): %1.4e\"),\n \" \",\n (:Change, \"|δp|: %1.4e | \"),\n (:GradientNorm, \"|grad f|: %1.6e\"),\n :Stop,\n \"\\n\",\n ]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and call the gradient descent algorithm","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^7],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03\n# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04\n# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06\n# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08\n# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 53073227 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Riemannian Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Riemannian case, we define","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"MetricManifold(Euclidean(2; field = ℝ), ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and the gradient is now adopted to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_f!(M, X, p)\n ∇f!!(M, X, p)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_f(M, p)\n X = zero_vector(M, p)\n return grad_f!(M, X, p)\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^6],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 1000000 F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04\n# 2000000 F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 2443750 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Euclidean Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the convex case, we have to first introduce the two parts of the cost.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;\nf2(M, p; a=100, b=1) = (p[1] - b[1])^2;\ng(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)\nh(M, p; a=100, b=1) = f2(M, p; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and their (Euclidan) gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function ∇h!(M, X, p; a=100, b=1)\n X[1] = 2*(p[1]-b)\n X[2] = 0\n return X\nend\nfunction ∇h(M, p; a=100, b=1)\n X = zero(p)\n ∇h!(M, X, p; a=a, b=b)\n return X\nend\nfunction ∇g!(M, X, p; a=100, b=1)\n X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)\n X[2] = -2*a*(p[1]^2-p[2])\n return X\nend\nfunction ∇g(M, p; a=100, b=1)\n X = zero(p)\n ∇g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and we define for convenience","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docE_g(M, p) = g(M, p; a=a, b=b)\ndocE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)\ndocE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)\ndocE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)\nfunction docE_∇f!(M, X, p)\n Y = zero_vector(M, p)\n docE_∇g!(M, X, p)\n docE_∇h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we call the difference of convex algorithm on Eucldiean space mathbb R^2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"E_doc_state = difference_of_convex_algorithm(\n M, docE_f, docE_g, docE_∇h!, p0;\n gradient=docE_∇f!,\n grad_g = docE_∇g!,\n debug=[debug_vec..., 10^4],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_hess=nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000 F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04\n# 20000 F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 26549 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Riemannian Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"We first have to again defined the gradients with respect to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_h!(M, X, p; a=100, b=1)\n ∇h!(M, X, p; a=a, b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_h(M, p; a=100, b=1)\n X = zero(p)\n grad_h!(M, X, p; a=a, b=b)\n return X\nend\nfunction grad_g!(M, X, p; a=100, b=1)\n ∇g!(M, X, p; a=a,b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_g(M, p; a=100, b=1)\n X = zero(p)\n grad_g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For X in partial h(p^(k)) the sunproblem top determine p^(k+1) reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatorname*argmin_pinmathcal M g(p) - langle X log_p^(k)prangle","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with X = operatornamegrad h(p^(k)) that","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"phi(p) = g(p) - langle X log_p^(k)prangle\n= abigl( p_1^2-p_2bigr)^2\n + 2bigl(p_1-bbigr)^2 - 2(p^(k)_1-b)p_1 + 2(p^(k)_1-b)p^(k)_1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"its Euclidean gradient reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatornamegradphi(p) =\n nabla varphi(p)\n = beginpmatrix\n 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^(k)_1-b)\n -2a(p_1^2-p_2)\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where we can again employ the gradient conversion from before to obtain the Riemannian gradient.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"mutable struct SubGrad{P,T,V}\n pk::P\n Xk::T\n a::V\n b::V\nend\nfunction (ϕ::SubGrad)(M, p)\n X = zero_vector(M, p)\n ϕ(M, X, p)\n return X\nend\nfunction (ϕ::SubGrad)(M, X, p)\n X .= [\n 4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),\n -2 * ϕ.a * (p[1]^2 - p[2]),\n ]\n riemannian_gradient!(M, X, p, X) # convert\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And in orer to update the subsolvers gradient correctly, we have to overwrite","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)\nset_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we again introduce for ease of use","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docR_g(M, p) = g(M, p; a=a, b=b)\ndocR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)\ndocR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)\ndocR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)\nfunction docR_grad_f!(M, X, p)\n Y = zero_vector(M, p)\n docR_grad_g!(M, X, p)\n docR_grad_h!(M, Y, p)\n X .-= Y\n return X\nend\ndocR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_doc_state = difference_of_convex_algorithm(\n M_rb, docR_f, docR_g, docR_grad_h!, p0;\n gradient=docR_grad_f!,\n grad_g = docR_grad_g!,\n debug=[debug_vec..., 10^6],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_grad=docR_sub_grad,\n sub_hess = nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 1235 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Comparison-in-Iterations","page":"Rosenbrock Metric","title":"Comparison in Iterations","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x)$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-16, 5*1e5),\n xaxis=:log,\n xlims=(1,10^8),\n)\nscatter!(fig, [1,], [f(M,p0),], label=raw\"$f(p_0)$\", markercolor=grey)\negi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries\negc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries\nplot!(fig, egi, egc, color=teal, label=\"Euclidean GD\")\n#\nrgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries\nrgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries\nplot!(fig, rgi, rgc, color=indigo, label=\"Riemannian GD\")\n#\nedi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries\nedc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries\nplot!(fig, edi, edc, color=sand, label=\"Euclidean DoC\")\n#\nrdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries\nrdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries\nplot!(fig, rdi, rdc, color=green, label=\"Riemannian DoC\")","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Literature","page":"Rosenbrock Metric","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Pages = [\"examples/Difference-of-Convex-Rosenbrock.md\"]\nCanonical=false","category":"page"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny BergmannLaura Weigl 2023-07-02","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139397\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.430690947905521","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412973804873698","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 2023-01-03","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field = ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 44 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector trnasport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |grad f| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"2.070121545761584e-14","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 2023-07-02","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794810916\n 0.006531600679186576\n 0.7267799820815527","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794810916\n 0.006531600679186576\n 0.7267799820815527","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393352364576\n 0.006531560027851705\n 0.7267799297555925","category":"page"},{"location":"examples/RayleighQuotient/#The-Rayleigh-Quotient","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Ronny Bergmann 2024-03-09","category":"page"},{"location":"examples/RayleighQuotient/#Introduction","page":"The Rayleigh Quotient","title":"Introduction","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For a symmetric matrix A in mathbb R^ntimes n we consider the 📖 Rayleigh Quotient","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"operatorname*argmin_x in mathbb R^n backslash 0\nfracx^mathrmTAxlVert x rVert^2","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"On the sphere we can omit the denominator and obtain","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f(p) = p^mathrmTApqquad p 𝕊^n-1","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"which by itself we can again continue in the embedding as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"tilde f(x) = x^mathrmTAxqquad x in mathbb R^n","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This cost has the nice feature that at the minimizer p^*inmathbb S^n-1 the function falue f(p^*) is the smalles eigenvalue of A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For the embedded function tilde f the gradient and Hessian can be computed with classical methods as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\ntilde f(x) = 2Ax qquad x ℝ^n\n\n^2tilde f(x)V = 2AV qquad x V ℝ^n\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold mathcal M = mathbb S^n-1 are given by","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\noperatornamegrad f(p) = 2Ap - 2(p^mathrmTAp)*pqquad p 𝕊^n-1\n\noperatornameHess f(p)X = 2AX - 2(p^mathrmTAX)p - 2(p^mathrmTAp)Xqquad p 𝕊^n-1 X in T_p𝕊^n-1\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first generate an example martrx A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random\nRandom.seed!(42)\nn = 500\nA = Symmetric(randn(n,n))","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And the manifolds","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"M = Sphere(n-1)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Sphere(499, ℝ)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"E = get_embedding(M)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean(500; field = ℝ)","category":"page"},{"location":"examples/RayleighQuotient/#Setup-the-corresponding-functions","page":"The Rayleigh Quotient","title":"Setup the corresponding functions","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute f is called with M as their first argument and tilde f if called with E.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We instantiate","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f = ManoptExamples.RayleighQuotientCost(A)\ngrad_f = ManoptExamples.RayleighQuotientGrad!!(A)\nHess_f = ManoptExamples.RayleighQuotientHess!!(A)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"p0 = [1.0, zeros(n-1)...]\nX = zero_vector(M, p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"we can both call","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Y = grad_f(M,p0) # Allocates memory\ngrad_f(M,X,p0) # Computes in place of X and returns the result in X.\nnorm(M, p0, X-Y)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"0.0","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"λ = min(eigvals(A)...)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"-44.83860504694063","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-on-gradient-information","page":"The Rayleigh Quotient","title":"A Solver based on gradient information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient nabla tilde f. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n return_state=true,\n)\nq1 = get_solver_result(s)\ns","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 50 f(x): -44.206244|grad f(p)|:2.3878466243532603\n# 100 f(x): -44.546883|grad f(p)|:2.256125365459932\n# 150 f(x): -44.765220|grad f(p)|:1.3051578932969494\n# 200 f(x): -44.824730|grad f(p)|:0.5758153603739898\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n [(:Iteration, \"# %-6d\"), (:Cost, \"f(x): %f\"), (:GradientNorm, \"|grad f(p)|:%s\"), \"\\n\", 50]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q2 = gradient_descent(M, f, grad_f, p0;\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n)\n#Test that both are the same\nisapprox(M, q1,q2)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 50 f(x): -44.206244|grad f(p)|:2.3878466243532843\n# 100 f(x): -44.546883|grad f(p)|:2.2561253654599445\n# 150 f(x): -44.765220|grad f(p)|:1.3051578932969203\n# 200 f(x): -44.824730|grad f(p)|:0.5758153603739693\n\ntrue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We can also benchmark both","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 9 samples with 1 evaluation.\n Range (min … max): 560.157 ms … 588.184 ms ┊ GC (min … max): 5.67% … 5.45%\n Time (median): 570.733 ms ┊ GC (median): 5.65%\n Time (mean ± σ): 570.970 ms ± 8.136 ms ┊ GC (mean ± σ): 5.67% ± 0.11%\n\n █ ██ █ █ █ █ █ █ \n █▁▁▁▁▁▁▁██▁▁▁▁▁▁▁▁▁▁█▁▁█▁█▁▁▁█▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 560 ms Histogram: frequency by time 588 ms <\n\n Memory estimate: 1.13 GiB, allocs estimate: 3852.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 62 samples with 1 evaluation.\n Range (min … max): 78.280 ms … 85.791 ms ┊ GC (min … max): 0.00% … 3.75%\n Time (median): 81.195 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 81.608 ms ± 2.007 ms ┊ GC (mean ± σ): 1.07% ± 1.70%\n\n ▁ ▄██▁▁▁ ▄▁ ▁▁ ▁ ▁ ▁ ▁ ▄ ▁ \n ▆▁▁▁█▁▁▁▆▁██████▆▆▆██▁▆▁██▆▆▆█▁█▁▁▁▆▆▆▆█▁▆▆▆▁▆▁▁█▁▁▁▆▁█▁▆▆█ ▁\n 78.3 ms Histogram: frequency by time 85.4 ms <\n\n Memory estimate: 12.02 MiB, allocs estimate: 3246.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see, that the conversion costs a bit of performance, but if the Euclidean gradient is easier to compute, this might still be ok.","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-(also)-on-(approximate)-Hessian-information","page":"The Rayleigh Quotient","title":"A Solver based (also) on (approximate) Hessian information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To also involve the Hessian, we consider the trust regions solver with three cases:","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean, approximating the Hessian\nEuclidean, providing the Hessian\nRiemannian, providing the Hessian but also using in-place evaluations.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -43.522431|grad f(p)|:9.779418323358204\n# 20 f(x): -44.838605|grad f(p)|:1.3152995004883475e-11","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -43.522431|grad f(p)|:9.779418323423842\n# 20 f(x): -44.838605|grad f(p)|:1.7393361141546583e-11","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;\n evaluation=InplaceEvaluation(),\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -43.522431|grad f(p)|:9.779418323423855\n# 20 f(x): -44.838605|grad f(p)|:1.41150798598445e-11","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $p0;\n objective_type=:Euclidean,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 3 samples with 1 evaluation.\n Range (min … max): 2.333 s … 2.364 s ┊ GC (min … max): 5.71% … 5.58%\n Time (median): 2.350 s ┊ GC (median): 5.67%\n Time (mean ± σ): 2.349 s ± 15.696 ms ┊ GC (mean ± σ): 5.66% ± 0.07%\n\n █ █ █ \n █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 2.33 s Histogram: frequency by time 2.36 s <\n\n Memory estimate: 3.81 GiB, allocs estimate: 21948.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n objective_type=:Euclidean\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 4 samples with 1 evaluation.\n Range (min … max): 1.510 s … 1.536 s ┊ GC (min … max): 6.00% … 5.80%\n Time (median): 1.520 s ┊ GC (median): 5.99%\n Time (mean ± σ): 1.522 s ± 10.909 ms ┊ GC (mean ± σ): 5.96% ± 0.11%\n\n █ █ █ █ \n █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 1.51 s Histogram: frequency by time 1.54 s <\n\n Memory estimate: 2.56 GiB, allocs estimate: 19277.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 51 samples with 1 evaluation.\n Range (min … max): 93.198 ms … 103.528 ms ┊ GC (min … max): 0.00% … 3.32%\n Time (median): 99.301 ms ┊ GC (median): 3.37%\n Time (mean ± σ): 99.434 ms ± 1.940 ms ┊ GC (mean ± σ): 2.72% ± 1.35%\n\n ▂ ▂█ ▅ ▂ \n ▅▁▁▁▁▁▁▁▁▁▁▁▁▁▅▁▁▁█▁▁▅▅▅▅▁▁▅▅▅█▁████▁▅█▅█████▅█▁▁▁▁▁▁█▁▅▁▁▁▅ ▁\n 93.2 ms Histogram: frequency by time 103 ms <\n\n Memory estimate: 35.42 MiB, allocs estimate: 15927.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q1, q) for q ∈ [q2,q3] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 2.095490120148314e-15\n 0.1301942153129163","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q3, q) for q ∈ [q4,q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 2.8330211010163085e-14\n 7.010102023470712e-15","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Which we can also see in the final cost, comparing it to the Eigenvalue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"5-element Vector{Float64}:\n 0.013874911807342016\n 0.013874911807512547\n 5.186961971048731e-12\n 7.723599537712289e-12\n 5.7909232964448165e-12","category":"page"},{"location":"examples/RayleighQuotient/#Summary","page":"The Rayleigh Quotient","title":"Summary","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.","category":"page"},{"location":"examples/RayleighQuotient/#Literature","page":"The Rayleigh Quotient","title":"Literature","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Pages = [\"examples/RayleighQuotient.md\"]\nCanonical=false","category":"page"},{"location":"#Welcome-to-ManoptExample.jl","page":"Home","title":"Welcome to ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = ManoptExamples","category":"page"},{"location":"","page":"Home","title":"Home","text":"ManoptExamples.ManoptExamples","category":"page"},{"location":"#ManoptExamples.ManoptExamples","page":"Home","title":"ManoptExamples.ManoptExamples","text":"🏔️⛷️ ManoptExamples.jl – A collection of research and tutorial example problems for Manopt.jl\n\n📚 Documentation: juliamanifolds.github.io/ManoptExamples.jl\n📦 Repository: github.com/JuliaManifolds/ManoptExamples.jl\n💬 Discussions: github.com/JuliaManifolds/ManoptExamples.jl/discussions\n🎯 Issues: github.com/JuliaManifolds/ManoptExamples.jl/issues\n\n\n\n\n\n","category":"module"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/previews/PR10/siteinfo.js b/previews/PR10/siteinfo.js new file mode 100644 index 0000000..c76cf63 --- /dev/null +++ b/previews/PR10/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "previews/PR10"; diff --git a/previews/PR11/assets/documenter.js b/previews/PR11/assets/documenter.js new file mode 100644 index 0000000..4248476 --- /dev/null +++ b/previews/PR11/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +window.MathJax = { + "tex": { + "packages": [ + "base", + "ams", + "autoload" + ], + "inlineMath": [ + [ + "$", + "$" + ], + [ + "\\(", + "\\)" + ] + ], + "tags": "ams" + }, + "options": { + "ignoreHtmlClass": "tex2jax_ignore", + "processHtmlClass": "tex2jax_process" + } +} +; + +(function () { + var script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.js'; + script.async = true; + document.head.appendChild(script); +})(); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// 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() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/previews/PR11/assets/search.js b/previews/PR11/assets/search.js new file mode 100644 index 0000000..c133f74 --- /dev/null +++ b/previews/PR11/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/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'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + 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) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + 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/PR11/assets/themes/documenter-dark.css b/previews/PR11/assets/themes/documenter-dark.css new file mode 100644 index 0000000..c94a294 --- /dev/null +++ b/previews/PR11/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable,html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .list:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .highlight:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-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 .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size: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 .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}/*! 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:.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:.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:.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:.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:.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:.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:.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:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-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 Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.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{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align: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:.75em;padding-right:.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:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:#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:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color: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:.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:.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:.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.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align: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:.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:.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:#fff}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:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:#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:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #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:.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:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:#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:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right: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 .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:15px}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-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 .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.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 .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.85em}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:15px}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius: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:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title+.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:.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:.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 .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.85em}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius: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 .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox{color:#fff;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:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.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:#fff}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.is-loading:after{font-size:.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:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:#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:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.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:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#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:.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:.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:.85em;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right: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:.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-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.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.is-loading:after{font-size:.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 .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:.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:#fff;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:rgba(0,0,0,0);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:.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:.75rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #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:.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:.4em;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align: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:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .list{background-color:#fff;border-radius:.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:.4em;border-top-right-radius:.4em}html.theme--documenter-dark .list-item:last-child{border-bottom-left-radius:.4em;border-bottom-right-radius:.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:.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:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size: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:.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:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff;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:#fff}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:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left: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:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),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:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:#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:rgba(0,0,0,0);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:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item{display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:15px;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.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:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.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:.4em .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:.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:#fff;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:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-radius:.4em 0 0 .4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-radius:0 .4em .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:.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:.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.6666666667%}.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.3333333333%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.3333333333%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.6666666667%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.3333333333%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.6666666667%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.3333333333%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.6666666667%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.3333333333%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.6666666667%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:#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 .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#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 .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{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:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:#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 .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 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 pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size: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:.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;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .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:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-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;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:15px;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size: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 .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2} diff --git a/previews/PR11/assets/themes/documenter-light.css b/previews/PR11/assets/themes/documenter-light.css new file mode 100644 index 0000000..9b9a14b --- /dev/null +++ b/previews/PR11/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable,.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.message:not(:last-child),.list:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.highlight:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-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}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.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}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}/*! 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:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:left}table th{color:#222}.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:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-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:#1081cb !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:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.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:#fff;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:#222;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:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:.75em;padding-right:.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:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:#363636}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;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:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#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:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#f5f5f5}.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:#f5f5f5}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5;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:#f5f5f5;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !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:#f5f5f5}.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 #f5f5f5 #f5f5f5 !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:#f5f5f5;color:#f5f5f5}.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:#f5f5f5;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:#f5f5f5;box-shadow:none;color:#f5f5f5}.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:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color: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:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color: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:.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:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius: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:.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:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:left}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-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:#f5f5f5;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:#fff}.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:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:#363636}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#f5f5f5}.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:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #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:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #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, #222 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:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#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:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#f5f5f5}.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:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right: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 .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:#363636}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#f5f5f5}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius: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:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#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:.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:.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:#f5f5f5;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}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(54,54,54,0.3)}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(54,54,54,0.3)}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(54,54,54,0.3)}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius: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}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#363636}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox{color:#6b6b6b;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:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b}.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.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:#363636}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#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:#f5f5f5;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:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right: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:.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:#6b6b6b}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.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.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right: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:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#222;max-width:100%;position:relative}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:.75rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem}.card-image{display:block;position:relative}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #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:.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:#fff;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:.5rem;padding-top:.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:#f5f5f5;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:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.list{background-color:#fff;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:#222}.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:#f5f5f5;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:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff;color:#4d4d4d}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a;color:#090909}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:#363636}.message.is-light .message-body{border-color:#f5f5f5;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:#f5f5f5}.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:#12537d}.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:#3c3108}.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:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left: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:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),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:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:0.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:#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:#f5f5f5;color:#363636}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#f5f5f5}@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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#f5f5f5}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#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:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item{display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius: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:.25rem;padding-left:.5em;padding-right:.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:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;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:#f5f5f5;border-radius:4px 4px 0 0;color:#222;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:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right: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:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right: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:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right: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:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-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:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.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.3333333333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>.column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>.column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>.column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>.column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-mobile{margin-left:8.3333333333%}.column.is-2-mobile{flex:none;width:16.6666666667%}.column.is-offset-2-mobile{margin-left:16.6666666667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.3333333333%}.column.is-offset-4-mobile{margin-left:33.3333333333%}.column.is-5-mobile{flex:none;width:41.6666666667%}.column.is-offset-5-mobile{margin-left:41.6666666667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.3333333333%}.column.is-offset-7-mobile{margin-left:58.3333333333%}.column.is-8-mobile{flex:none;width:66.6666666667%}.column.is-offset-8-mobile{margin-left:66.6666666667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.3333333333%}.column.is-offset-10-mobile{margin-left:83.3333333333%}.column.is-11-mobile{flex:none;width:91.6666666667%}.column.is-offset-11-mobile{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.3333333333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.6666666667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.6666666667%}.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.3333333333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.3333333333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.6666666667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.6666666667%}.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.3333333333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.3333333333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.6666666667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.6666666667%}.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.3333333333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.3333333333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.6666666667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-touch{margin-left:8.3333333333%}.column.is-2-touch{flex:none;width:16.6666666667%}.column.is-offset-2-touch{margin-left:16.6666666667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.3333333333%}.column.is-offset-4-touch{margin-left:33.3333333333%}.column.is-5-touch{flex:none;width:41.6666666667%}.column.is-offset-5-touch{margin-left:41.6666666667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.3333333333%}.column.is-offset-7-touch{margin-left:58.3333333333%}.column.is-8-touch{flex:none;width:66.6666666667%}.column.is-offset-8-touch{margin-left:66.6666666667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.3333333333%}.column.is-offset-10-touch{margin-left:83.3333333333%}.column.is-11-touch{flex:none;width:91.6666666667%}.column.is-offset-11-touch{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-desktop{margin-left:8.3333333333%}.column.is-2-desktop{flex:none;width:16.6666666667%}.column.is-offset-2-desktop{margin-left:16.6666666667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.3333333333%}.column.is-offset-4-desktop{margin-left:33.3333333333%}.column.is-5-desktop{flex:none;width:41.6666666667%}.column.is-offset-5-desktop{margin-left:41.6666666667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.3333333333%}.column.is-offset-7-desktop{margin-left:58.3333333333%}.column.is-8-desktop{flex:none;width:66.6666666667%}.column.is-offset-8-desktop{margin-left:66.6666666667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.3333333333%}.column.is-offset-10-desktop{margin-left:83.3333333333%}.column.is-11-desktop{flex:none;width:91.6666666667%}.column.is-offset-11-desktop{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-widescreen{margin-left:8.3333333333%}.column.is-2-widescreen{flex:none;width:16.6666666667%}.column.is-offset-2-widescreen{margin-left:16.6666666667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.3333333333%}.column.is-offset-4-widescreen{margin-left:33.3333333333%}.column.is-5-widescreen{flex:none;width:41.6666666667%}.column.is-offset-5-widescreen{margin-left:41.6666666667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.3333333333%}.column.is-offset-7-widescreen{margin-left:58.3333333333%}.column.is-8-widescreen{flex:none;width:66.6666666667%}.column.is-offset-8-widescreen{margin-left:66.6666666667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.3333333333%}.column.is-offset-10-widescreen{margin-left:83.3333333333%}.column.is-11-widescreen{flex:none;width:91.6666666667%}.column.is-offset-11-widescreen{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-fullhd{margin-left:8.3333333333%}.column.is-2-fullhd{flex:none;width:16.6666666667%}.column.is-offset-2-fullhd{margin-left:16.6666666667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.3333333333%}.column.is-offset-4-fullhd{margin-left:33.3333333333%}.column.is-5-fullhd{flex:none;width:41.6666666667%}.column.is-offset-5-fullhd{margin-left:41.6666666667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.3333333333%}.column.is-offset-7-fullhd{margin-left:58.3333333333%}.column.is-8-fullhd{flex:none;width:66.6666666667%}.column.is-offset-8-fullhd{margin-left:66.6666666667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.3333333333%}.column.is-offset-10-fullhd{margin-left:83.3333333333%}.column.is-11-fullhd{flex:none;width:91.6666666667%}.column.is-offset-11-fullhd{margin-left:91.6666666667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.3333333333%}.tile.is-2{flex:none;width:16.6666666667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.3333333333%}.tile.is-5{flex:none;width:41.6666666667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.3333333333%}.tile.is-8{flex:none;width:66.6666666667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.3333333333%}.tile.is-11{flex:none;width:91.6666666667%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:#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:#f5f5f5}}.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:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}@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:#f5f5f5}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#f5f5f5;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:#f5f5f5}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#f5f5f5;border-color:#f5f5f5;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,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{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:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 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}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;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:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}#documenter .docs-main header.docs-navbar .docs-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;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 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:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}#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}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{background:#F0F0F0;color:#444}.hljs-comment{color:#888888}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold} diff --git a/previews/PR11/assets/themeswap.js b/previews/PR11/assets/themeswap.js new file mode 100644 index 0000000..c58e993 --- /dev/null +++ b/previews/PR11/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/PR11/assets/warner.js b/previews/PR11/assets/warner.js new file mode 100644 index 0000000..5531c88 --- /dev/null +++ b/previews/PR11/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
      Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/previews/PR11/contributing/index.html b/previews/PR11/contributing/index.html new file mode 100644 index 0000000..e6460d5 --- /dev/null +++ b/previews/PR11/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

      Contributing to Manopt.jl

      First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

      The following is a set of guidelines to ManoptExamples.jl.

      Table of Contents

      I just have a question

      The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

      How can I file an issue?

      If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

      How can I contribute?

      Add an objective

      The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

      If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

      If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

      • cost functions are always of the form cost_ and a fitting name
      • gradient functions are always of the the gradient_ and a fitting name, followed by an !

      for in-place gradients and by !! if it is a struct that can provide both.

      It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

      Add an example

      If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

      Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

      Code style

      We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

      We also follow a few internal conventions:

      • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
      • within a file the structs should come first and functions second. The only exception are constructors for the structs
      • within both blocks an alphabetical order is preferable.
      • The above implies that the mutating variant of a function follows the non-mutating variant.
      • There should be no dangling = signs.
      • Always add a newline between things of different types (struct/method/const).
      • Always add a newline between methods for different functions (including in-place/non-mutating variants).
      • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
      • All import/using/include should be in the main module file.
      • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
      • the Quarto Markdown files are excluded from this formatting.
      diff --git a/previews/PR11/examples/Difference-of-Convex-Benchmark/index.html b/previews/PR11/examples/Difference-of-Convex-Benchmark/index.html new file mode 100644 index 0000000..5461efa --- /dev/null +++ b/previews/PR11/examples/Difference-of-Convex-Benchmark/index.html @@ -0,0 +1,178 @@ + +A Benchmark · ManoptExamples.jl

      Benchmark of the Difference of Convex Algorithms

      Ronny Bergmann 2023-06-06

      Introduction

      In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.

      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ \ g(p) - h(p)\]

      where $g,h\colon \mathcal M \to \mathbb R$ are geodesically convex function on the Riemannian manifold $\mathcal M$.

      using LinearAlgebra, Random, Statistics, BenchmarkTools
      +using Manifolds, Manopt, ManoptExamples
      +using NamedColors, Plots
      +Random.seed!(42)

      and we load a few nice colors

      paul_tol = load_paul_tol()
      +indigo = paul_tol["mutedindigo"]
      +teal = paul_tol["mutedteal"]

      The DC Problem

      We start with defining the two convex functions $g,h$ and their gradients as well as the DC problem $f$ and its gradient for the problem

      \[ \operatorname*{arg\,min}_{p\in\mathcal M}\ \ \bigl( \log\bigr(\det(p)\bigr)\bigr)^4 - \bigl(\log \det(p) \bigr)^2.\]

      where the critical points obtain a functional value of $-\frac{1}{4}$.

      where $\mathcal M$ is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.

      We first define the corresponding functions

      g(M, p) = log(det(p))^4
      +h(M, p) = log(det(p))^2
      +f(M, p) = g(M, p) - h(M, p)

      and their gradients

      grad_g(M, p) = 4 * (log(det(p)))^3 * p
      +grad_h(M, p) = 2 * log(det(p)) * p
      +grad_f(M, p) = grad_g(M, p) - grad_h(M, p)

      which we can use to verify that the gradients of $g$ and $h$ are correct. We use for that

      n = 6
      +M = SymmetricPositiveDefinite(n)
      +p0 = log(n) * Matrix{Float64}(I, n, n);
      +X0 = 1 / n * Matrix{Float64}(I, n, n);

      to tall both checks

      check_gradient(M, g, grad_g, p0, X0; plot=true)

      and

      check_gradient(M, h, grad_h, p0, X0; plot=true)

      which both pass the test. We continue to define their inplace variants

      function grad_g!(M, X, p)
      +    copyto!(M, X, p)
      +    X .*= 4 * (log(det(p)))^3
      +    return X
      +end
      +function grad_h!(M, X, p)
      +    copyto!(M, X, p)
      +    X .*= 2 * (log(det(p)))
      +    return X
      +end
      +function grad_f!(M, X, p)
      +    grad_g!(M, X, p)
      +    Y = copy(M, p, X)
      +    grad_h!(M, Y, p)
      +    X .-= Y
      +    return X
      +end

      And compare times for both algorithms, with a bit of debug output.

      @time p_min_dca = difference_of_convex_algorithm(
      +    M,
      +    f,
      +    g,
      +    grad_h!,
      +    p0;
      +    grad_g=grad_g!,
      +    gradient=grad_f!,
      +    evaluation=InplaceEvaluation(),
      +    debug=[
      +        :Iteration,
      +        (:Cost, "f(p): %1.9f"),
      +        (:GradientNorm, " |grad_f(p)|: %1.9f"),
      +        (:Change, " |δp|: %1.9f"),
      +        :Stop,
      +        5,
      +        "\n",
      +    ],
      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
      +    sub_state=TrustRegionsState(M, copy(M, p0)),
      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
      +);
      Initial f(p): 137.679053470
      +# 5     f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127
      +# 10    f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103
      +# 15    f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574
      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.000000003 |δp|: 0.000000011
      +The algorithm reached approximately critical point after 24 iterations; the gradient norm (3.9079528504063575e-11) is less than 1.0e-10.
      +  6.570523 seconds (8.12 M allocations: 555.671 MiB, 3.50% gc time, 99.32% compilation time)

      The cost is

      f(M, p_min_dca)
      -0.25

      Similarly the DCPPA performs

      @time p_min_dcppa = difference_of_convex_proximal_point(
      +    M,
      +    grad_h!,
      +    p0;
      +    g=g,
      +    grad_g=grad_g!,
      +    λ=i -> 1 / (2 * n),
      +    cost=f,
      +    gradient=grad_f!,
      +    debug=[
      +        :Iteration,
      +        (:Cost, "f(p): %1.9f"),
      +        " ",
      +        (:GradientNorm, "|grad_f(p)|: %1.10f"),
      +        (:Change, "|δp|: %1.10f"),
      +        :Stop,
      +        5,
      +        "\n",
      +    ],
      +    evaluation=InplaceEvaluation(),
      +    stepsize=ConstantStepsize(1.0),
      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
      +    sub_state=TrustRegionsState(M, copy(M, p0)),
      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
      +);
      Initial f(p): 137.679053470 
      +# 5     f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692
      +# 10    f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316
      +# 15    f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676
      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968
      +# 25    f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530
      +# 30    f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048
      +# 35    f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001
      +The algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.
      +  1.676814 seconds (1.77 M allocations: 123.378 MiB, 3.58% gc time, 94.55% compilation time)

      It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost

      f(M, p_min_dcppa)
      -0.25

      Benchmark I: Time comparison

      We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test

      dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()
      +dcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()
      +N_max=14
      +N = 2:N_max

      and run a benchmark for both algorithms

      for n in N
      +    Mn = SymmetricPositiveDefinite(n)
      +    pn = log(n) * Matrix{Float64}(I, n, n)
      +    bdca = @benchmark difference_of_convex_algorithm(
      +        $Mn,
      +        $f,
      +        $g,
      +        $grad_h!,
      +        $pn;
      +        grad_g=$grad_g!,
      +        gradient=$grad_f!,
      +        evaluation=InplaceEvaluation(),
      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
      +        sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),
      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
      +    )
      +    dca_benchmarks[n] = bdca
      +    bdcppa = @benchmark difference_of_convex_proximal_point(
      +        $Mn,
      +        $grad_h!,
      +        $pn;
      +        g=$g,
      +        grad_g=$grad_g!,
      +        λ=i -> 1 / (2 * n),
      +        cost=f,
      +        gradient=grad_f!,
      +        evaluation=InplaceEvaluation(),
      +        stepsize=ConstantStepsize(1.0),
      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
      +        sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),
      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
      +    )
      +    dcppa_benchmarks[n] = bdcppa
      +end

      Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds

      dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]
      +dca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]
      +dcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]
      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Time (sec.)")
      +plot!(dims, dca_times; label="DCA", color=indigo, linewidth=2)
      +plot!(dims, dcppa_times; label="DCPPA", color=teal, linewidth=2)

      Benchmark II: Iterations and cost.

      As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.

      N2 = [5,10,20,40,80]
      +dims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]
      +dca_iterations = Dict{Int,Int}()
      +dca_costs = Dict{Int,Vector{Float64}}()
      +dcppa_iterations = Dict{Int,Int}()
      +dcppa_costs = Dict{Int,Vector{Float64}}()
      @time for n in N2
      +    println(n)
      +    Mn = SymmetricPositiveDefinite(n)
      +    pn = log(n) * Matrix{Float64}(I,n,n);
      +    @time dca_st = difference_of_convex_algorithm(
      +        Mn, f, g, grad_h!, pn;
      +        grad_g=grad_g!,
      +        gradient=grad_f!,
      +        evaluation = InplaceEvaluation(),
      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
      +        sub_state = TrustRegionsState(Mn, copy(Mn, pn)),
      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
      +        record = [:Iteration, :Cost],
      +        return_state = true,
      +    );
      +    dca_costs[n] = get_record(dca_st, :Iteration, :Cost)
      +    dca_iterations[n] = length(dca_costs[n])
      +    @time dcppa_st = difference_of_convex_proximal_point(
      +        Mn, grad_h!, pn;
      +        g=g,
      +        grad_g=grad_g!,
      +        λ = i -> 1/(2*n),
      +        cost = f,
      +        gradient= grad_f!,
      +        evaluation = InplaceEvaluation(),
      +        stepsize = ConstantStepsize(1.0),
      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
      +        sub_state = TrustRegionsState(Mn, copy(Mn, pn)),
      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
      +        record = [:Iteration, :Cost],
      +        return_state = true,
      +    );
      +    dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)
      +    dcppa_iterations[n] = length(dcppa_costs[n])
      +end

      The iterations are like

      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Iterations")
      +plot!(dims2, [values(dca_iterations)...]; label="DCA", color=indigo, linewidth=2)
      +plot!(dims2, [values(dcppa_iterations)...]; label="DCPPA", color=teal, linewidth=2)

      And for the developtment of the cost

      where we can see that the DCA needs less iterations than the DCPPA.

      Literature

      [BFSS23]
      +
      +
      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
      +
      [SO15]
      +
      +
      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
      +
      +
      diff --git a/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg b/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg new file mode 100644 index 0000000..be55d29 --- /dev/null +++ b/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg b/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg new file mode 100644 index 0000000..e9a29c9 --- /dev/null +++ b/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg b/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..35ae8d4 --- /dev/null +++ b/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg b/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg new file mode 100644 index 0000000..9b9ecb3 --- /dev/null +++ b/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg b/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..4516590 --- /dev/null +++ b/previews/PR11/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR11/examples/Difference-of-Convex-Frank-Wolfe/index.html b/previews/PR11/examples/Difference-of-Convex-Frank-Wolfe/index.html new file mode 100644 index 0000000..7216887 --- /dev/null +++ b/previews/PR11/examples/Difference-of-Convex-Frank-Wolfe/index.html @@ -0,0 +1,221 @@ + +Frank Wolfe comparison · ManoptExamples.jl

      A comparison of the Difference of Convex and Frank Wolfe Algorithm

      Ronny Bergmann 2023-11-06

      Introduction

      In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.

      using LinearAlgebra, Random, Statistics, BenchmarkTools
      +using ManifoldsBase, Manifolds, Manopt, ManoptExamples
      +using NamedColors, Plots

      and we load a few nice colors

      paul_tol = load_paul_tol()
      +indigo = paul_tol["mutedindigo"]
      +teal = paul_tol["mutedteal"]

      We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices $\mathcal P(n)$ with the affine invariant metric. Let $q_1,\ldots,q_m \in \mathcal P(n)$ be a set of points and $\mu_1,\ldots,\mu_m$ be a set of weights, such that they sum to one. We consider then

      \[\operatorname*{arg\,max}_{p\in\mathcal C}\ \ h(p)\]

      with

      \[h(p) = +\sum_{j=1}^m \mu_j d^2(p,q_i), +\quad \text{ where } +d^2(p,q_i) = \operatorname{tr}\bigl( + \log^2(p^{-\frac{1}{2}}q_jp^{-\frac{1}{2}}) +\big) +\qquad\text{and}\qquad +\mathcal C = \{ p\in {\mathcal M}\ |\ \bar L\preceq p \preceq \bar U \},\]

      for a lower bound $L$ and an upper bound $U$ for the matrices in the positive definite sense $A \preceq B \Leftrightarrow (B-A)$ is positive semi-definite

      When every one of the weights ${\mu}_1, \ldots {\mu}_m$ are equal, this function $h$ is known as the of the set $\{q_1, \dots, q_m\}$.

      And for our example we set

      Random.seed!(42)
      +n = 20
      +m = 100
      +M = SymmetricPositiveDefinite(n)
      +q = [rand(M) for _ in 1:m];
      +w = rand(m)
      +w ./=sum(w)

      We use as lower and upper bound the arithmetic and geometric mean $L$ and $U$, respectively.

      L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )
      +U = sum( wi * qi for (wi, qi) in zip(w,q) )

      As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use

      p0 = (L+U)/2

      And we can check that it is feasible

      Common Functions

      Given $p \in \mathcal M$, $X \in T_p\mathcal M$ on the symmetric positive definite matrices M, this method computes the closed form solution to

      \[\operatorname*{arg\,min}_{q\in {\mathcal C}}\ \langle X, \log_p q\rangle + = \operatorname*{arg\,min}_{q\in {\mathcal C}}\ \operatorname{tr}(S\log(YqY))\]

      where $\mathcal C = \{ q | L \preceq q \preceq U \}$, $S = p^{-1/2}Xp^{-1/2}$, and $Y=p^{-1/2}$.

      The solution is given by $Z=X^{-1}Q\bigl( P^{\mathrm{T}}[-\operatorname{sgn}(D)]_{+}P+\hat{L}\bigr)Q^{\mathrm{T}}X^{-1}$,@ where $S=QDQ^{\mathrm{T}}$ is a diagonalization of $S$, $\hat{U}-\hat{L}=P^{\mathrm{T}}P$ with $\hat{L}=Q^{\mathrm{T}}XLXQ$ and $\hat{U}=Q^{\mathrm{T}}XUXQ$, where $[-\mbox{sgn}(D)]_{+}$ is the diagonal matrix

      \[\operatorname{diag}\bigl( + [-\operatorname{sgn}(d_{11})]_{+}, \ldots, [-\operatorname{sgn}(d_{nn})]_{+} +\bigr)\]

      and $D=(d_{ij})$.

      @doc raw"""
      +    closed_form_solution!(M, q, L, U, p X)
      +
      +Compute the closeed form solution of the constraint sub problem in place of ``q``.
      +"""
      +function closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)
      +    # extract p^1/2 and p^{-1/2}
      +    (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)
      +    # Compute D & Q
      +    e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk  = QDQ'
      +    D = Diagonal(1.0 .* (e2.values .< 0))
      +    Q = e2.vectors
      +    #println(p)
      +    Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q
      +    Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q
      +    P = cholesky(Hermitian(Uprime - Lprime))
      +    z = P.U' * D * P.U + Lprime
      +    copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)
      +    return q
      +end

      The Difference of Convex Formulation

      We use $g(p) = \iota_{\mathcal C}(p)$ as the indicator funtion of the set $\mathcal C$. We use

      function is_pos_def(p; atol=5e-13)
      +    e = eigen(Symmetric(p))
      +    return all((e.values .+ atol) .> 0)
      +end
      +function g(p, L, U)
      +    return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf
      +end
      +h(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )

      So we can first check that p0 is feasible

      g(p0,L,U) == 0.0
      true

      Now setting

      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ g(p) - h(p)\]

      We look for a maximum of $h$, where $g$ is minimal, i.e. $g(p)$ is zero or in other words $p \in \mathcal C$.

      The gradient of $h$ can also be implemented in closed form as

      grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))
      +function grad_h!(M, X, p, w, q)
      +    Y = copy(M, p, X)
      +    zero_vector!(M, X, p)
      +    for (wi, qi) in zip(w,q)
      +        log!(M, Y, p, qi)
      +        Y .*= - 2.0*wi
      +        X .+= Y
      +    end
      +    return X
      +end

      And we can further define the cost, which will just be $+\infty$ outside of $\mathcal C$. We define

      f_dc(M, p) = g(p, L, U) - h(M, p, w, q)
      +grad_h!(M, X, p) = grad_h!(M, X, p, w, q)
      +function grad_f_dc!(M,X, p)
      +    grad_h!(M, X, p, w, q)
      +    X .*= -1.0
      +    return X
      +end

      Here we can omit the gradient of $g$ in the definition of $\operatorname{grad} f$, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of $\mathcal C$.

      As the last step, we can provide the closed form solver for the DC sub problem given at iteration $k$ by

      \[\operatorname*{arg\,min}_{p\in \mathcal C}\ + \big\langle -\operatorname{grad} h(p^{(k)}), \exp^{-1}_{p^{(k)}}p\big\rangle.\]

      Which we con compute

      function dc_sub_solution!(M, q, p, X)
      +    closed_form_solution!(M, q, L, U, p, -X)
      +    return q
      +end

      For safety, we might want to avoid ending up at the boundary of $\mathcal C$. That is we reduce the distance we walk towards the solution $q$ a bit.

      function dc_sub_solution_safe!(M, q, p, X)
      +    p_last = copy(M,p) # since p=q might be in place
      +    closed_form_solution!(M, q, L, U, p, -X)
      +    q_orig = copy(M,q) # since we do the following in place of q
      +    a = minimum(real.(eigen(q-L).values))
      +    b = minimum(real.(eigen(U-q).values))
      +    s = 1.0
      +    d = distance(M, p_last, q_orig);
      +    # if we are close to zero, we reduce faster.
      +    α = d < 1/(n^2) ? 0.66 : 0.9995;
      +    i=0
      +    while (a < 0) || (b < 0)
      +        s *= α
      +        shortest_geodesic!(M, q, p_last, q_orig, s)
      +        a = minimum(real.(eigen(q-L).values))
      +        b = minimum(real.(eigen(U-q).values))
      +        #println("$i a: $a, b = $b with s=$s")
      +        i=i+1
      +        if (i>100) # safety fallback
      +            #@warn " $i steps where not enough $s ($α)\n$a $b\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs"
      +            qe = eigen(q)
      +            if a < 0
      +                qe.values .+= min(1e-8, n*abs(min(a,b)))
      +            else
      +                qe.values .-= min(1e-8, n*abs(min(a,b)))
      +            end
      +            q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'
      +            a = minimum(real.(eigen(q-L).values))
      +            b = minimum(real.(eigen(U-q).values))
      +            return q
      +        end
      +    end
      +    return q
      +end

      The DoC solver run

      Let’s compare both methods when they have the same stopping criteria

      @time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;
      +    gradient=grad_f_dc!,
      +    sub_problem=dc_sub_solution_safe!,
      +    evaluation=InplaceEvaluation(),
      +    stopping_criterion = StopAfterIteration(300) |
      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
      +    debug = [
      +        (:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "),
      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
      +        30, :Stop, "\n"],
      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
      +    return_state=true,
      +)
      Initial F(p): -0.77661458292831
      +At iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.
      + 16.362823 seconds (16.44 M allocations: 1.558 GiB, 4.79% gc time, 85.93% compilation time)
      +
      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
      +After 23 iterations
      +
      +## Parameters
      +* sub solver state:
      +    | InplaceEvaluation()
      +
      +## Stopping Criterion
      +Stop When _one_ of the following are fulfilled:
      +    Max Iteration 300:  not reached
      +    |Δp| < 1.0e-14: not reached
      +    |Δgrad f| < 1.0e-9: reached
      +Overall: reached
      +This indicates convergence: No
      +
      +## Debug
      +    :Stop = :Stop
      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 30]
      +
      +## Record
      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

      Let’s extract the final point and look at its cost

      p1_dc = get_solver_result(state1_dc);
      +f_dc(M, p1_dc)
      -0.784425242474807

      As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.

      [ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]
      2-element Vector{Tuple{Float64, Float64}}:
      + (1.1886583723800445e-12, 0.06669240322431051)
      + (1.3411042178831775e-5, 0.0671353506908023)

      For the statistics we extract the recordings from the state

      Define the Frank-Wolfe functions

      For Frank wolfe, the cost is just defined as $-h(p)$ but the minimisation is constraint to $\mathcal C$, which is enfored by the oracle.

      f_fw(M, p) = -h(M, p, w, q)
      +function grad_f_fw!(M,X, p)
      +    grad_h!(M, X, p, w, q)
      +    X .*= -1.0
      +    return X
      +end
      +oracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)

      The FW Solver Run

      Similarly we can run the Frank-Wolfe algorithm with

      @time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;
      +    sub_problem=oracle_fw!,
      +    evaluation=InplaceEvaluation(),
      +    stopping_criterion = StopAfterIteration(10^4) |
      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
      +    debug = [
      +        (:Iteration, "# %-8d "), :Cost, (:Change, " |Δp|: %0.14f "),
      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
      +        2*10^3, :Stop, "\n"],
      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
      +    return_state=true,
      +)
      Initial f(x): -0.776615
      +# 2000     f(x): -0.784420 |Δp|: 0.04611942377596  |grad f(p)|: 0.17693408  |Δgrad f(p)|: 0.17555618
      +# 4000     f(x): -0.784421 |Δp|: 0.00372201632005  |grad f(p)|: 0.17694619  |Δgrad f(p)|: 0.00749427
      +# 6000     f(x): -0.784422 |Δp|: 0.00205683506784  |grad f(p)|: 0.17695204  |Δgrad f(p)|: 0.00414088
      +# 8000     f(x): -0.784422 |Δp|: 0.00140675676260  |grad f(p)|: 0.17695565  |Δgrad f(p)|: 0.00283200
      +# 10000    f(x): -0.784422 |Δp|: 0.00106177438611  |grad f(p)|: 0.17695815  |Δgrad f(p)|: 0.00213746
      +The algorithm reached its maximal number of iterations (10000).
      +316.048927 seconds (56.05 M allocations: 93.634 GiB, 4.13% gc time, 0.35% compilation time)
      +
      +# Solver state for `Manopt.jl`s Frank Wolfe Method
      +After 10000 iterations
      +
      +## Parameters
      +* inverse retraction method: LogarithmicInverseRetraction()
      +* retraction method: ExponentialRetraction()
      +* sub solver state:
      +    | InplaceEvaluation()
      +
      +## Stepsize
      +DecreasingStepsize(; length=2.0,  factor=1.0,  subtrahend=0.0,  shift=2)
      +
      +## Stopping Criterion
      +Stop When _one_ of the following are fulfilled:
      +    Max Iteration 10000:    reached
      +    |Δp| < 1.0e-14: not reached
      +    |Δgrad f| < 1.0e-9: not reached
      +Overall: reached
      +This indicates convergence: No
      +
      +## Debug
      +    :Stop = :Stop
      +    :All = [(:Iteration, "# %-8d "), (:Cost, "f(x): %f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 2000]
      +
      +## Record
      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

      And we take a look at this result as well

      p1_fw = get_solver_result(state1_fw);
      +f_dc(M, p1_fw)
      -0.7844220281765162

      And its feasibility

      [extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]
      2-element Vector{Tuple{Float64, Float64}}:
      + (4.904818928410655e-10, 0.06659173821656107)
      + (3.245654983213335e-5, 0.06713970236096602)

      Statistics

      We extract the recorded values

      # DoC
      +iter1_dc = get_record(state1_dc, :Iteration, :Iteration)
      +pk_dc = get_record(state1_dc,:Iteration,:Iterate)
      +costs1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))
      +dc_min = minimum(costs1_dc)
      +# FW
      +iter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]
      +pk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]
      +costs1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))

      And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.

      fig = plot(;
      +    legend=:topright,
      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x_k)-f^*$ (log. scale)",
      +    yaxis=:log,
      +    ylims=(1e-8, 10^-2),
      +    xaxis=:log,
      +    xlims=(1,10^4),
      +)
      +plot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label="Difference of Convex")
      +plot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label="Frank-Wolfe")

      This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.

      On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.

      Literature

      [BFSS23]
      +
      +
      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
      +
      [WS22]
      +
      +
      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
      +
      +
      diff --git a/previews/PR11/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg b/previews/PR11/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg new file mode 100644 index 0000000..233e403 --- /dev/null +++ b/previews/PR11/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR11/examples/Difference-of-Convex-Rosenbrock/index.html b/previews/PR11/examples/Difference-of-Convex-Rosenbrock/index.html new file mode 100644 index 0000000..82279ac --- /dev/null +++ b/previews/PR11/examples/Difference-of-Convex-Rosenbrock/index.html @@ -0,0 +1,337 @@ + +Rosenbrock Metric · ManoptExamples.jl

      Solving Rosenbrock with the Difference of Convex Algorithm

      Ronny Bergmann 2023-06-06

      Introduction

      This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.

      Both the Rosenbrock problem

      \[ \operatorname*{argmin}_{x\in\mathbb R^2} a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2,\]

      where $a,b>0$ and usually $b=1$ and $a \gg b$, we know the minimizer $x^* = (b,b^2)^\mathrm{T}$, and also the (Euclidean) gradient

      \[\nabla f(x) = + \begin{pmatrix} + 4a(x_1^2-x_2)\\ -2a(x_1^2-x_2) + \end{pmatrix} + + + \begin{pmatrix} + 2(x_1-b)\\ 0 + \end{pmatrix}.\]

      They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.

      Furthermore, the RosenbrockMetric can be used on $\mathbb R^2$, that is

      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix},\]

      In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.

      1. The Euclidean Gradient
      2. The Riemannian gradient descent with respect to the RosenbrockMetric
      3. The Euclidean Difference of Convex Algorithm
      4. The Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric

      Where we obtain a difference of convex problem by writing

      \[f(x) = a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2 + = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 - \bigl(x_1-b\bigr)^2\]

      that is

      \[g(x) = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 \quad\text{ and }\quad h(x) = \bigl(x_1-b\bigr)^2\]

      using LinearAlgebra, Random, Statistics
      +using Manifolds, Manopt, ManoptExamples
      +using NamedColors, Plots
      +import Manopt: set_manopt_parameter!
      +Random.seed!(42)
      paul_tol = load_paul_tol()
      +indigo = paul_tol["mutedindigo"]
      +green = paul_tol["mutedgreen"]
      +sand = paul_tol["mutedsand"]
      +teal = paul_tol["mutedteal"]
      +grey = paul_tol["mutedgrey"]

      To emphasize the effect, we choose a quite large value of a.

      a = 2*10^5
      +b = 1

      and use the starting point and a direction to check gradients

      p0 = [0.1, 0.2]

      The Euclidean Gradient Descent.

      For the Euclidean gradient we can just use the same approach as in the Rosenbrock example

      M = ℝ^2
      +f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
      +∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)

      define a common debug vector

      debug_vec = [
      +        (:Iteration, "# %-8d "),
      +        (:Cost, "F(x): %1.4e"),
      +        " ",
      +        (:Change, "|δp|: %1.4e | "),
      +        (:GradientNorm, "|grad f|: %1.6e"),
      +        :Stop,
      +        "\n",
      +    ]

      and call the gradient descent algorithm

      Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;
      +    evaluation=InplaceEvaluation(),
      +    debug=[debug_vec...,10^7],
      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
      +    record=[:Iteration, :Cost],
      +    return_state=true,
      +)
      Initial F(x): 7.2208e+03 
      +# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03
      +# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04
      +# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06
      +# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08
      +# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10
      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
      +
      +# Solver state for `Manopt.jl`s Gradient Descent
      +After 53073227 iterations
      +
      +## Parameters
      +* retraction method: ExponentialRetraction()
      +
      +## Stepsize
      +ArmijoLinesearch() with keyword parameters
      +  * initial_stepsize    = 1.0
      +  * retraction_method   = ExponentialRetraction()
      +  * contraction_factor  = 0.95
      +  * sufficient_decrease = 0.1
      +
      +## Stopping Criterion
      +Stop When _one_ of the following are fulfilled:
      +    Max Iteration 100000000:    not reached
      +    |Δp| < 1.0e-16: reached
      +Overall: reached
      +This indicates convergence: Yes
      +
      +## Debug
      +    :Stop = :Stop
      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000000]
      +
      +## Record
      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

      The Riemannian Gradient Descent.

      For the Riemannian case, we define

      M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())
      MetricManifold(Euclidean(2; field = ℝ), ManoptExamples.RosenbrockMetric())

      and the gradient is now adopted to the new metric

      function grad_f!(M, X, p)
      +    ∇f!!(M, X, p)
      +    riemannian_gradient!(M, X, p, X)
      +    return X
      +end
      +function grad_f(M, p)
      +    X = zero_vector(M, p)
      +    return grad_f!(M, X, p)
      +end
      R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;
      +    evaluation=InplaceEvaluation(),
      +    debug=[debug_vec...,10^6],
      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
      +    record=[:Iteration, :Cost],
      +    return_state=true,
      +)
      Initial F(x): 7.2208e+03 
      +# 1000000  F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04
      +# 2000000  F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09
      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
      +
      +# Solver state for `Manopt.jl`s Gradient Descent
      +After 2443750 iterations
      +
      +## Parameters
      +* retraction method: ExponentialRetraction()
      +
      +## Stepsize
      +ArmijoLinesearch() with keyword parameters
      +  * initial_stepsize    = 1.0
      +  * retraction_method   = ExponentialRetraction()
      +  * contraction_factor  = 0.95
      +  * sufficient_decrease = 0.1
      +
      +## Stopping Criterion
      +Stop When _one_ of the following are fulfilled:
      +    Max Iteration 100000000:    not reached
      +    |Δp| < 1.0e-16: reached
      +Overall: reached
      +This indicates convergence: Yes
      +
      +## Debug
      +    :Stop = :Stop
      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
      +
      +## Record
      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

      The Euclidean Difference of Convex

      For the convex case, we have to first introduce the two parts of the cost.

      f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;
      +f2(M, p; a=100, b=1) = (p[1] - b[1])^2;
      +g(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)
      +h(M, p; a=100, b=1) = f2(M, p; a=a, b=b)

      and their (Euclidan) gradients

      function ∇h!(M, X, p; a=100, b=1)
      +    X[1] = 2*(p[1]-b)
      +    X[2] = 0
      +    return X
      +end
      +function ∇h(M, p; a=100, b=1)
      +    X = zero(p)
      +    ∇h!(M, X, p; a=a, b=b)
      +    return X
      +end
      +function ∇g!(M, X, p; a=100, b=1)
      +    X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)
      +    X[2] = -2*a*(p[1]^2-p[2])
      +    return X
      +end
      +function ∇g(M, p; a=100, b=1)
      +    X = zero(p)
      +    ∇g!(M, X, p; a=a, b=b)
      +    return X
      +end

      and we define for convenience

      docE_g(M, p) = g(M, p; a=a, b=b)
      +docE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)
      +docE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)
      +docE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)
      +function docE_∇f!(M, X, p)
      +  Y = zero_vector(M, p)
      +  docE_∇g!(M, X, p)
      +  docE_∇h!(M, Y, p)
      +  X .-= Y
      +  return X
      +end

      Then we call the difference of convex algorithm on Eucldiean space $\mathbb R^2$.

      E_doc_state = difference_of_convex_algorithm(
      +    M, docE_f, docE_g, docE_∇h!, p0;
      +    gradient=docE_∇f!,
      +    grad_g = docE_∇g!,
      +    debug=[debug_vec..., 10^4],
      +    evaluation=InplaceEvaluation(),
      +    record=[:Iteration, :Cost],
      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
      +    sub_hess=nothing, # Use gradient descent
      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
      +    return_state=true,
      +)
      Initial F(x): 7.2208e+03 
      +# 10000    F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04
      +# 20000    F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08
      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
      +
      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
      +After 26549 iterations
      +
      +## Parameters
      +* sub solver state:
      +    | # Solver state for `Manopt.jl`s Gradient Descent
      +    | After 2000 iterations
      +    | 
      +    | ## Parameters
      +    | * retraction method: ExponentialRetraction()
      +    | 
      +    | ## Stepsize
      +    | ArmijoLinesearch() with keyword parameters
      +    |   * initial_stepsize    = 1.0
      +    |   * retraction_method   = ExponentialRetraction()
      +    |   * contraction_factor  = 0.95
      +    |   * sufficient_decrease = 0.1
      +    | 
      +    | ## Stopping Criterion
      +    | Stop When _one_ of the following are fulfilled:
      +    |     Max Iteration 2000:   reached
      +    |     |grad f| < 1.0e-16: not reached
      +    | Overall: reached
      +    | This indicates convergence: No
      +
      +## Stopping Criterion
      +Stop When _one_ of the following are fulfilled:
      +    Max Iteration 100000000:    not reached
      +    |Δp| < 1.0e-16: reached
      +Overall: reached
      +This indicates convergence: Yes
      +
      +## Debug
      +    :Stop = :Stop
      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000]
      +
      +## Record
      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

      The Riemannian Difference of Convex

      We first have to again defined the gradients with respect to the new metric

      function grad_h!(M, X, p; a=100, b=1)
      +    ∇h!(M, X, p; a=a, b=b)
      +    riemannian_gradient!(M, X, p, X)
      +    return X
      +end
      +function grad_h(M, p; a=100, b=1)
      +    X = zero(p)
      +    grad_h!(M, X, p; a=a, b=b)
      +    return X
      +end
      +function grad_g!(M, X, p; a=100, b=1)
      +    ∇g!(M, X, p; a=a,b=b)
      +    riemannian_gradient!(M, X, p, X)
      +    return X
      +end
      +function grad_g(M, p; a=100, b=1)
      +    X = zero(p)
      +    grad_g!(M, X, p; a=a, b=b)
      +    return X
      +end

      While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For $X \in \partial h(p^{(k)})$ the sunproblem top determine $p^{(k+1)}$ reads

      \[\operatorname*{argmin}_{p\in\mathcal M} g(p) - \langle X, \log_{p^{(k)}}p\rangle\]

      for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with $X = \operatorname{grad} h(p^{(k)})$ that

      \[\phi(p) = g(p) - \langle X, \log_{p^{(k)}}p\rangle += a\bigl( p_{1}^2-p_{2}\bigr)^2 + + 2\bigl(p_{1}-b\bigr)^2 - 2(p^{(k)}_1-b)p_1 + 2(p^{(k)}_1-b)p^{(k)}_1,\]

      its Euclidean gradient reads

      \[\operatorname{grad}\phi(p) = + \nabla \varphi(p) + = \begin{pmatrix} + 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^{(k)}_1-b)\\ + -2a(p_1^2-p_2) + \end{pmatrix}\]

      where we can again employ the gradient conversion from before to obtain the Riemannian gradient.

      mutable struct SubGrad{P,T,V}
      +    pk::P
      +    Xk::T
      +    a::V
      +    b::V
      +end
      +function (ϕ::SubGrad)(M, p)
      +    X = zero_vector(M, p)
      +    ϕ(M, X, p)
      +    return X
      +end
      +function (ϕ::SubGrad)(M, X, p)
      +    X .= [
      +        4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),
      +        -2 * ϕ.a * (p[1]^2 - p[2]),
      +    ]
      +    riemannian_gradient!(M, X, p, X) # convert
      +    return X
      +end

      And in orer to update the subsolvers gradient correctly, we have to overwrite

      set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)
      +set_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)

      And we again introduce for ease of use

      docR_g(M, p) = g(M, p; a=a, b=b)
      +docR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)
      +docR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)
      +docR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)
      +function docR_grad_f!(M, X, p)
      +    Y = zero_vector(M, p)
      +    docR_grad_g!(M, X, p)
      +    docR_grad_h!(M, Y, p)
      +    X .-= Y
      +    return X
      +end
      +docR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)

      Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.

      R_doc_state = difference_of_convex_algorithm(
      +    M_rb, docR_f, docR_g, docR_grad_h!, p0;
      +    gradient=docR_grad_f!,
      +    grad_g = docR_grad_g!,
      +    debug=[debug_vec..., 10^6],
      +    evaluation=InplaceEvaluation(),
      +    record=[:Iteration, :Cost],
      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
      +    sub_grad=docR_sub_grad,
      +    sub_hess = nothing, # Use gradient descent
      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
      +    return_state=true,
      +)
      Initial F(x): 7.2208e+03 
      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
      +
      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
      +After 1235 iterations
      +
      +## Parameters
      +* sub solver state:
      +    | # Solver state for `Manopt.jl`s Gradient Descent
      +    | After 2000 iterations
      +    | 
      +    | ## Parameters
      +    | * retraction method: ExponentialRetraction()
      +    | 
      +    | ## Stepsize
      +    | ArmijoLinesearch() with keyword parameters
      +    |   * initial_stepsize    = 1.0
      +    |   * retraction_method   = ExponentialRetraction()
      +    |   * contraction_factor  = 0.95
      +    |   * sufficient_decrease = 0.1
      +    | 
      +    | ## Stopping Criterion
      +    | Stop When _one_ of the following are fulfilled:
      +    |     Max Iteration 2000:   reached
      +    |     |grad f| < 1.0e-16: not reached
      +    | Overall: reached
      +    | This indicates convergence: No
      +
      +## Stopping Criterion
      +Stop When _one_ of the following are fulfilled:
      +    Max Iteration 100000000:    not reached
      +    |Δp| < 1.0e-16: reached
      +Overall: reached
      +This indicates convergence: Yes
      +
      +## Debug
      +    :Stop = :Stop
      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
      +
      +## Record
      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

      Comparison in Iterations

      fig = plot(;
      +    legend=:topright,
      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x)$ (log. scale)",
      +    yaxis=:log,
      +    ylims=(1e-16, 5*1e5),
      +    xaxis=:log,
      +    xlims=(1,10^8),
      +)
      +scatter!(fig, [1,], [f(M,p0),], label=raw"$f(p_0)$", markercolor=grey)
      +egi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries
      +egc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries
      +plot!(fig, egi, egc, color=teal, label="Euclidean GD")
      +#
      +rgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries
      +rgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries
      +plot!(fig, rgi, rgc, color=indigo, label="Riemannian GD")
      +#
      +edi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries
      +edc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries
      +plot!(fig, edi, edc, color=sand, label="Euclidean DoC")
      +#
      +rdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries
      +rdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries
      +plot!(fig, rdi, rdc, color=green, label="Riemannian DoC")

      And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.

      Literature

      [BFSS23]
      +
      +
      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
      +
      +
      diff --git a/previews/PR11/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg b/previews/PR11/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..f4b540a --- /dev/null +++ b/previews/PR11/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR11/examples/RayleighQuotient/index.html b/previews/PR11/examples/RayleighQuotient/index.html new file mode 100644 index 0000000..3e6f963 --- /dev/null +++ b/previews/PR11/examples/RayleighQuotient/index.html @@ -0,0 +1,142 @@ + +The Rayleigh Quotient · ManoptExamples.jl

      The Rayleigh Quotient

      Ronny Bergmann 2024-03-09

      Introduction

      This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.

      For a symmetric matrix $A \in \mathbb R^{n\times n}$ we consider the 📖 Rayleigh Quotient

      \[\operatorname*{arg\,min}_{x \in \mathbb R^n \backslash \{0\}} +\frac{x^{\mathrm{T}}Ax}{\lVert x \rVert^2}.\]

      On the sphere we can omit the denominator and obtain

      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

      which by itself we can again continue in the embedding as

      \[\tilde f(x) = x^{\mathrm{T}}Ax,\qquad x \in \mathbb R^n.\]

      This cost has the nice feature that at the minimizer $p^*\in\mathbb S^{n-1}$ the function falue $f(p^*)$ is the smalles eigenvalue of $A$.

      For the embedded function $\tilde f$ the gradient and Hessian can be computed with classical methods as

      \[\begin{align*} +∇\tilde f(x) &= 2Ax, \qquad x ∈ ℝ^n, +\\ +∇^2\tilde f(x)[V] &= 2AV, \qquad x, V ∈ ℝ^n. +\end{align*}\]

      Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold $\mathcal M = \mathbb S^{n-1}$ are given by

      \[\begin{align*} +\operatorname{grad} f(p) &= 2Ap - 2(p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1}, +\\ +\operatorname{Hess} f(p)[X] &= 2AX - 2(p^{\mathrm{T}}AX)p - 2(p^{\mathrm{T}}Ap)X,\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1} +\end{align*}\]

      Let’s first generate an example martrx $A$.

      using Pkg;
      +cd(@__DIR__)
      +Pkg.activate("."); # use the example environment,
      using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random
      +Random.seed!(42)
      +n = 500
      +A = Symmetric(randn(n,n))

      And the manifolds

      M = Sphere(n-1)
      Sphere(499, ℝ)
      E = get_embedding(M)
      Euclidean(500; field = ℝ)

      Setup the corresponding functions

      Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute $f$ is called with M as their first argument and $\tilde f$ if called with E.

      We instantiate

      f = ManoptExamples.RayleighQuotientCost(A)
      +grad_f = ManoptExamples.RayleighQuotientGrad!!(A)
      +Hess_f = ManoptExamples.RayleighQuotientHess!!(A)

      the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory

      p0 = [1.0, zeros(n-1)...]
      +X = zero_vector(M, p0)

      we can both call

      Y = grad_f(M,p0)  # Allocates memory
      +grad_f(M,X,p0)    # Computes in place of X and returns the result in X.
      +norm(M, p0, X-Y)
      0.0

      Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.

      First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute

      λ = min(eigvals(A)...)
      -44.838605046940486

      A Solver based on gradient information

      Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient $\nabla \tilde f$. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].

      But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent

      s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,
      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
      +    return_state=true,
      +)
      +q1 = get_solver_result(s)
      +s
      Initial f(x): -0.363357
      +# 50    f(x): -44.206244|grad f(p)|:2.387846624353276
      +# 100   f(x): -44.546883|grad f(p)|:2.256125365459942
      +# 150   f(x): -44.765220|grad f(p)|:1.3051578932969472
      +# 200   f(x): -44.824730|grad f(p)|:0.5758153603739719
      +
      +# Solver state for `Manopt.jl`s Gradient Descent
      +After 200 iterations
      +
      +## Parameters
      +* retraction method: ExponentialRetraction()
      +
      +## Stepsize
      +ArmijoLinesearch() with keyword parameters
      +  * initial_stepsize    = 1.0
      +  * retraction_method   = ExponentialRetraction()
      +  * contraction_factor  = 0.95
      +  * sufficient_decrease = 0.1
      +
      +## Stopping Criterion
      +Stop When _one_ of the following are fulfilled:
      +    Max Iteration 200:  reached
      +    |grad f| < 1.0e-9: not reached
      +Overall: reached
      +This indicates convergence: No
      +
      +## Debug
      +    [(:Iteration, "# %-6d"), (:Cost, "f(x): %f"), (:GradientNorm, "|grad f(p)|:%s"), "\n", 50]

      From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.

      And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.

      q2 = gradient_descent(M, f, grad_f, p0;
      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
      +)
      +#Test that both are the same
      +isapprox(M, q1,q2)
      Initial f(x): -0.363357
      +# 50    f(x): -44.206244|grad f(p)|:2.387846624353294
      +# 100   f(x): -44.546883|grad f(p)|:2.2561253654599915
      +# 150   f(x): -44.765220|grad f(p)|:1.305157893296954
      +# 200   f(x): -44.824730|grad f(p)|:0.5758153603739878
      +
      +true

      We can also benchmark both

      @benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)
      BenchmarkTools.Trial: 9 samples with 1 evaluation.
      + Range (min … max):  608.169 ms … 640.193 ms  ┊ GC (min … max): 7.37% … 7.11%
      + Time  (median):     615.895 ms               ┊ GC (median):    7.38%
      + Time  (mean ± σ):   617.565 ms ±   9.721 ms  ┊ GC (mean ± σ):  7.37% ± 0.18%
      +
      +  ▁ ▁     █     ▁▁     ▁       ▁                              ▁  
      +  █▁█▁▁▁▁▁█▁▁▁▁▁██▁▁▁▁▁█▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
      +  608 ms           Histogram: frequency by time          640 ms <
      +
      + Memory estimate: 1.13 GiB, allocs estimate: 3852.
      @benchmark gradient_descent($M, $f, $grad_f, $p0)
      BenchmarkTools.Trial: 51 samples with 1 evaluation.
      + Range (min … max):  92.767 ms … 108.453 ms  ┊ GC (min … max): 0.00% … 3.90%
      + Time  (median):     98.474 ms               ┊ GC (median):    0.00%
      + Time  (mean ± σ):   99.068 ms ±   3.786 ms  ┊ GC (mean ± σ):  1.16% ± 1.85%
      +
      +            ▁  ▁ █▁  ▄▁       ▁▄ ▁ ▁          ▁                 
      +  ▆▆▆▆▁▆▆▁▁▆█▁▁█▆██▆▆██▁▆▆▆▆▁▁██▁█▆█▆▁▆▁▆▁▁▁▁▆█▁▆▁▆▆▁▆▁▁▁▁▁▁▁▆ ▁
      +  92.8 ms         Histogram: frequency by time          108 ms <
      +
      + Memory estimate: 12.02 MiB, allocs estimate: 3246.

      We see, that the conversion costs a bit of performance, but if the Euclidean gradient is easier to compute, this might still be ok.

      A Solver based (also) on (approximate) Hessian information

      To also involve the Hessian, we consider the trust regions solver with three cases:

      1. Euclidean, approximating the Hessian
      2. Euclidean, providing the Hessian
      3. Riemannian, providing the Hessian but also using in-place evaluations.
      q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,
      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
      +);
      Initial f(x): -0.363357
      +# 10    f(x): -43.522431|grad f(p)|:9.779418323323288
      +# 20    f(x): -44.838605|grad f(p)|:8.451144677175197e-12

      To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.

      q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,
      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
      +);
      Initial f(x): -0.363357
      +# 10    f(x): -43.522431|grad f(p)|:9.779418323423874
      +# 20    f(x): -44.838605|grad f(p)|:1.1638484603322704e-11
      q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;
      +    evaluation=InplaceEvaluation(),
      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
      +);
      Initial f(x): -0.363357
      +# 10    f(x): -43.522431|grad f(p)|:9.779418323423881
      +# 20    f(x): -44.838605|grad f(p)|:1.1445271377332597e-11

      Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.

      @benchmark trust_regions($M, $f, $grad_f, $p0;
      +  objective_type=:Euclidean,
      +  evaluation=InplaceEvaluation(),
      +)
      BenchmarkTools.Trial: 3 samples with 1 evaluation.
      + Range (min … max):  2.015 s …   2.073 s  ┊ GC (min … max): 9.18% … 8.97%
      + Time  (median):     2.043 s              ┊ GC (median):    9.10%
      + Time  (mean ± σ):   2.044 s ± 29.057 ms  ┊ GC (mean ± σ):  9.09% ± 0.11%
      +
      +  █                          █                            █  
      +  █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
      +  2.01 s         Histogram: frequency by time        2.07 s <
      +
      + Memory estimate: 3.81 GiB, allocs estimate: 21954.
      @benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;
      +  evaluation=InplaceEvaluation(),
      +  objective_type=:Euclidean
      +)
      BenchmarkTools.Trial: 4 samples with 1 evaluation.
      + Range (min … max):  1.364 s …   1.389 s  ┊ GC (min … max): 9.36% … 9.17%
      + Time  (median):     1.373 s              ┊ GC (median):    9.27%
      + Time  (mean ± σ):   1.375 s ± 10.702 ms  ┊ GC (mean ± σ):  9.25% ± 0.08%
      +
      +  █                 █   █                                 █  
      +  █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
      +  1.36 s         Histogram: frequency by time        1.39 s <
      +
      + Memory estimate: 2.56 GiB, allocs estimate: 19283.
      @benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;
      +    evaluation=InplaceEvaluation(),
      +)
      BenchmarkTools.Trial: 104 samples with 1 evaluation.
      + Range (min … max):  43.071 ms … 56.913 ms  ┊ GC (min … max): 0.00% … 7.68%
      + Time  (median):     47.405 ms              ┊ GC (median):    0.00%
      + Time  (mean ± σ):   48.179 ms ±  2.909 ms  ┊ GC (mean ± σ):  3.35% ± 4.22%
      +
      +         ▁▁▁▆▆ ▆▁▃▆▃▃  ▁▁    ▃   █▆  ▁▁     ▁                  
      +  ▄▁▁▄▄▇▄█████▇██████▄▇██▄▄▄▄█▄▇▄██▇▄██▁▁▄▄▁█▁▁▁▁▄▁▁▄▁▄▄▁▁▁▁▄ ▄
      +  43.1 ms         Histogram: frequency by time        56.4 ms <
      +
      + Memory estimate: 16.23 MiB, allocs estimate: 6802.

      We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.

      Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.

      [distance(M, q1, q) for q ∈ [q2,q3] ]
      2-element Vector{Float64}:
      + 1.5505190490543112e-15
      + 0.1301942153125503
      [distance(M, q3, q) for q ∈ [q4,q5] ]
      2-element Vector{Float64}:
      + 5.325642276241738e-14
      + 5.1713218623657045e-14

      Which we can also see in the final cost, comparing it to the Eigenvalue

      [f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]
      5-element Vector{Float64}:
      +  0.013874911807278067
      +  0.01387491180739886
      +  6.679101716144942e-13
      + -4.106937012693379e-12
      + -3.964828465541359e-12

      Summary

      We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.

      Literature

      diff --git a/previews/PR11/examples/Riemannian-mean/index.html b/previews/PR11/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..93118f9 --- /dev/null +++ b/previews/PR11/examples/Riemannian-mean/index.html @@ -0,0 +1,33 @@ + +Riemannian Mean · ManoptExamples.jl

      The Riemannian Center of Mass (mean)

      Ronny Bergmann 2023-07-02

      Preliminary Notes

      Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

      For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.

      The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

      There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

      For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

      using Pkg;
      +cd(@__DIR__)
      +Pkg.activate("."); # use the example environment,

      Loading packages and defining data

      Loading the necessary packages and defining a data set on a manifold

      using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
      +Random.seed!(42)
      +M = Sphere(2)
      +n = 100
      +σ = π / 8
      +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
      +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

      Variant 1: Using the functions

      We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.

      f = ManoptExamples.RiemannianMeanCost(data)
      +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

      Then we can for example directly call a gradient descent as

      x1 = gradient_descent(M, f, grad_f, first(data))
      3-element Vector{Float64}:
      + 0.6868392794750908
      + 0.00653160068349042
      + 0.7267799820871861

      Variant 2: Using the objective

      A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

      rmo = ManoptExamples.Riemannian_mean_objective(
      +    M, data,
      +    evaluation=InplaceEvaluation(),
      +)

      Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

      rmp = DefaultManoptProblem(M, rmo)

      This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

      s1 = GradientDescentState(M, copy(M, first(data)))
      +solve!(rmp, s1)
      +x2 = get_solver_result(s1)
      3-element Vector{Float64}:
      + 0.6868392794750908
      + 0.00653160068349042
      + 0.7267799820871861

      but we can easily use a conjugate gradient instead

      s2 = ConjugateGradientDescentState(
      +    M,
      +    copy(M, first(data)),
      +    StopAfterIteration(100),
      +    ArmijoLinesearch(M),
      +    FletcherReevesCoefficient(),
      +)
      +solve!(rmp, s2)
      +x3 = get_solver_result(s2)
      3-element Vector{Float64}:
      + 0.6868393613136017
      + 0.006531541407458413
      + 0.7267799052788726
      diff --git a/previews/PR11/examples/Robust-PCA/index.html b/previews/PR11/examples/Robust-PCA/index.html new file mode 100644 index 0000000..c26528e --- /dev/null +++ b/previews/PR11/examples/Robust-PCA/index.html @@ -0,0 +1,64 @@ + +Robust PCA · ManoptExamples.jl

      The Robust PCA computed on the Grassmann manifold

      Ronny BergmannLaura Weigl 2023-07-02

      For this example we first load the necessary packages.

      using Pkg;
      +cd(@__DIR__)
      +Pkg.activate("."); # use the example environment,
      using LinearAlgebra, Random, Statistics
      +using Manifolds, Manopt, ManoptExamples
      +using Plots
      +Random.seed!(42)

      Computing a Robust PCA

      For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

      We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

      \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

      The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

      \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

      where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

      The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

      First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

      n = 40
      +d = 2
      +outliers = 15
      +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
      +# Outliers:
      +permute = shuffle(1:size(data, 2))'
      +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
      +# We are looking for a line here so we set
      +m = 1

      We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

      M = Grassmann(d,m);

      For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

      Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

      Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

      The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

      We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

      ε = 1.0
      +iterations = 6
      +reduction = 0.5
      +U, S, V = svd(data);
      +p0 = U[:, 1:m]
      2×1 Matrix{Float64}:
      + -0.7494248652139397
      +  0.6620893983436593

      Let’s generate the cost and gradient we aim to use here

      f = ManoptExamples.RobustPCACost(M, data, ε)
      +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
      ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

      and check the initial cost

      f(M, p0)
      9.430690947905521

      Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

      q = copy(M, p0)
      +εi = ε
      +for i in 1:iterations
      +    f.ε = εi
      +    grad_f.ε = εi
      +    global q = trust_regions(
      +        M,
      +        f,
      +        grad_f,
      +        ApproxHessianFiniteDifference(
      +            M, q, f;
      +            vector_transport_method=ProjectionTransport(),
      +            retraction_method=PolarRetraction(),
      +        ),
      +        q;
      +        (project!)=project!,
      +    )
      +    global εi *= reduction
      +end

      When finally setting ε we can investigate the final cost

      f.ε = 0.0
      +f(M, q)
      9.412973804873698

      Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

      fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
      +plot!(
      +    fig,
      +    q[1] * [-1, 1] * 100,
      +    q[2] * [-1, 1] * 100;
      +    linecolor=:red,
      +    linewidth=2,
      +    label="Robust PCA",
      +);
      +plot!(
      +    fig,
      +    p0[1] * [-1, 1] * 100,
      +    p0[2] * [-1, 1] * 100;
      +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
      +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
      +    linewidth=2,
      +    linecolor=:black,
      +    label="Standard SVD",
      +)

      Figure 1: The result of the robust PCA vs. SVD

      diff --git a/previews/PR11/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg b/previews/PR11/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..183256d --- /dev/null +++ b/previews/PR11/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR11/examples/Rosenbrock/index.html b/previews/PR11/examples/Rosenbrock/index.html new file mode 100644 index 0000000..a3a6a88 --- /dev/null +++ b/previews/PR11/examples/Rosenbrock/index.html @@ -0,0 +1,57 @@ + +Rosenbrock · ManoptExamples.jl

      The Rosenbrock Function

      Ronny Bergmann 2023-01-03

      After loading the necessary packages

      using Pkg;
      +cd(@__DIR__)
      +Pkg.activate("."); # use the example environment,
      using Manifolds, Manopt, ManoptExamples
      +using Plots

      We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).

      a = 100.0
      +b = 1.0
      +p0 = [1/10, 2/10]

      which is defined on $\mathbb R^2$, so we need

      M = ℝ^2
      Euclidean(2; field = ℝ)

      and can then generate both the cost and the gradient

      f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
      +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
      ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

      For comparison, we look at the initial cost

      f(M, p0)
      4.42

      And to illustrate, we run two small solvers with their default settings as a comparison.

      Gradient Descent

      We start with the gradient descent solver.

      Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

      gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
      # Solver state for `Manopt.jl`s Gradient Descent
      +After 200 iterations
      +
      +## Parameters
      +* retraction method: ExponentialRetraction()
      +
      +## Stepsize
      +ArmijoLinesearch() with keyword parameters
      +  * initial_stepsize    = 1.0
      +  * retraction_method   = ExponentialRetraction()
      +  * contraction_factor  = 0.95
      +  * sufficient_decrease = 0.1
      +
      +## Stopping Criterion
      +Stop When _one_ of the following are fulfilled:
      +    Max Iteration 200:  reached
      +    |grad f| < 1.0e-9: not reached
      +Overall: reached
      +This indicates convergence: No
      +
      +## Record
      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

      From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

      gd_x = get_record(gd_state, :Iteration, :Iteration)
      +gd_y =  get_record(gd_state, :Iteration, :Cost)
      +f(M, get_solver_result(gd_state))
      0.10562873187751265

      Quasi Newton

      We can improve this using the quasi Newton algorithm

      qn_state = quasi_Newton(M, f, grad_f, p0;
      +    record = [:Iteration, :Cost], return_state=true
      +)
      # Solver state for `Manopt.jl`s Quasi Newton Method
      +After 44 iterations
      +
      +## Parameters
      +* direction update:        limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.
      +* retraction method:       ExponentialRetraction()
      +* vector trnasport method: ParallelTransport()
      +
      +## Stepsize
      +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
      +  * retraction_method = ExponentialRetraction()
      +  * vector_transport_method = ParallelTransport()
      +
      +## Stopping Criterion
      +Stop When _one_ of the following are fulfilled:
      +    Max Iteration 1000: not reached
      +    |grad f| < 1.0e-6: reached
      +Overall: reached
      +This indicates convergence: Yes
      +
      +## Record
      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

      And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

      qn_x = get_record(qn_state, :Iteration, :Iteration)
      +qn_y =  get_record(qn_state, :Iteration, :Cost)
      +f(M, get_solver_result(qn_state))
      2.359559352025148e-14

      and see that the final value is close to the one of the minimizer

      f(M, ManoptExamples.minimizer(f))
      0.0

      which we also see if we plot the recorded cost.

      fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
      +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

      Figure 1: The result of the robust PCA vs. SVD

      diff --git a/previews/PR11/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg b/previews/PR11/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..759da13 --- /dev/null +++ b/previews/PR11/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/previews/PR11/examples/index.html b/previews/PR11/examples/index.html new file mode 100644 index 0000000..2b588ba --- /dev/null +++ b/previews/PR11/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

      List of Examples

      NameprovidesDocumentationComment
      A Benchmark for Difference of Convexcontains a few simple functions
      Solving Rosenbrock with Difference of ConvexDoC split of Rosenbrock📚uses a Rosenbrock based metric
      Difference of Convex vs. Frank-Wolfeclosed-form sub solver
      Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
      Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
      Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚
      The Rayleigh Quotient$f$, $\operatorname{grad}f$ (A/I), $\operatorname{Hess}f$ (A/I), objective📚

      Symbols:

      • A Allocating variant
      • I In-place variant
      • 📚 link to documented functions in the documentation
      diff --git a/previews/PR11/index.html b/previews/PR11/index.html new file mode 100644 index 0000000..4ae0600 --- /dev/null +++ b/previews/PR11/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

      Welcome to ManoptExample.jl

      This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

      Each example usually consists of

      • a cost function and additional objects, like the gradient or proximal maps, see objectives
      • an example explaining how to use these, see examples

      Helping functions that are used in one or more examples can be found in the section of functions in the menu.

      diff --git a/previews/PR11/objectives/index.html b/previews/PR11/objectives/index.html new file mode 100644 index 0000000..20e4c15 --- /dev/null +++ b/previews/PR11/objectives/index.html @@ -0,0 +1,42 @@ + +Objectives · ManoptExamples.jl

      List of Objectives defined for the Examples

      Rayleigh Quotient on the Sphere

      See the Rayleigh example (TODO) to see these in use.

      ManoptExamples.RayleighQuotientCostType
      RayleighQuotientCost

      A functor representing the Rayleigh Quotient cost function.

      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either

      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

      or extended into the embedding as

      \[f(x) = x^{\mathrm{T}}Ax, \qquad x ∈ ℝ^n,\]

      which is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of $𝕊^{n-1}$.

      Fields

      • A – storing the matrix internally

      Constructor

      RayleighQuotientCost(A)

      Create the Rayleigh cost function.

      See also

      RayleighQuotientGrad!!, RayleighQuotientHess!!

      source
      ManoptExamples.RayleighQuotientGrad!!Type
      RayleighQuotientGrad!!

      A functor representing the Rayleigh Quotient gradient function.

      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either

      \[\operatorname{grad} f(p) = 2 Ap - 2 (p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1},\]

      or taking the Euclidean gradient of the Rayleigh quotient on the sphere as

      \[∇f(x) = 2Ax, \qquad x ∈ ℝ^n.\]

      For details, see Example 3.62 of [Bou23].

      Fields

      • A – storing the matrix internally

      Constructor

      RayleighQuotientGrad!!(A)

      Create the Rayleigh quotient gradient function.

      See also

      RayleighQuotientCost, RayleighQuotientHess!!

      source
      ManoptExamples.RayleighQuotientHess!!Type
      RayleighQuotientHess!!

      A functor representing the Rayleigh Quotient Hessian.

      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either

      \[\operatorname{Hess} f(p)[X] = 2 \bigl(AX - (p^{mathrm{T}}AX)p - (p^{\mathrm{T}}Ap)X\bigr),\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1}\]

      or taking the Euclidean Hessian of the Rayleigh quotient on the sphere as

      \[∇^2f(x)[V] = 2AV, \qquad x, V ∈ ℝ^n.\]

      For details, see Example 5.27 of [Bou23].

      Fields

      • A – storing the matrix internally

      Constructor

      RayleighQuotientHess!!(A)

      Create the Rayleigh quotient Hessian function.

      See also

      RayleighQuotientCost, RayleighQuotientGrad!!

      source

      Riemannian Mean

      See the Riemannian mean example to see these in use.

      ManoptExamples.RiemannianMeanCostType
      RiemannianMeanCost{P}

      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

      \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

      where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

      Constructor

      RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

      Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

      See also

      RiemannianMeanGradient!!, Riemannian_mean_objective

      source
      ManoptExamples.RiemannianMeanGradient!!Type
      RiemannianMeanGradient!!{P} where P

      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

      \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

      where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

      This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

      Constructors

      RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

      Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

      RiemannianMeanGradient!!(
      +    M::AbstractManifold,
      +    data::AbstractVector{P};
      +    initial_vector::T=zero_vector(M, first(data)),
      +) where {P,T}

      Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

      See also

      RiemannianMeanCost, Riemannian_mean_objective

      source
      ManoptExamples.Riemannian_mean_objectiveMethod
      Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
      +Riemannian_mean_objective(M, data;
      +initial_vector=zero_vector(M, first(data)),
      +evaluation=AllocatingEvaluton()
      +)

      Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

      See also

      RiemannianMeanCost, RiemannianMeanGradient!!

      Note

      The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

      source

      Robust PCA

      See the Robust PCA example to see these in use.

      ManoptExamples.RobustPCACostType
      RobustPCACost{D,F}

      A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

      \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

      This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

      \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

      Note that this is a mutable struct so you can adapt the $ε$ later on.

      Constructor

      RobustPCACost(data::AbstractMatrix, ε=1.0)
      +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

      source
      ManoptExamples.RobustPCAGrad!!Type
      RobustPCAGrad!!{D,F}

      A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

      Note that this is a mutable struct so you can adapt the $ε$ later on.

      Constructor

      RobustPCAGrad!!(data, ε=1.0)
      +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

      source
      ManoptExamples.robust_PCA_objectiveFunction
      robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
      +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

      Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

      See also

      RobustPCACost, RobustPCAGrad!!

      Note

      Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.

      source

      Rosenbrock Function

      See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.

      ManoptExamples.RosenbrockCostType
      RosenbrockCost

      Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

      \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

      which means that for the 2D case, the manifold $\mathcal M$ is ignored.

      See also 📖 Rosenbrock (with slightly different parameter naming).

      Constructor

      f = Rosenbrock(a,b)

      generates the struct/function of the Rosenbrock cost.

      source
      ManoptExamples.RosenbrockGradient!!Type
      RosenbrockGradient

      Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

      \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

      i.e. also here the manifold is ignored.

      Constructor

      RosenbrockGradient(a,b)

      Functors

      grad_f!!(M,p)
      +grad_f!!(M, X, p)

      evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

      source
      ManoptExamples.RosenbrockMetricType
      RosenbrockMetric <: AbstractMetric

      A metric related to the Rosenbrock problem, where the metric at a point $p∈\mathbb R^2$ is given by

      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_{1}^2 & -2p_{1} \\ + -2p_{1} & 1 +\end{pmatrix},\]

      where the $\mathrm{Rb}$ stands for Rosenbrock

      source
      Base.expMethod
      q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)
      +exp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)

      Compute the exponential map with respect to the RosenbrockMetric.

      \[ q = \begin{pmatrix} p_1 + X_1 \\ p_2+X_2+X_1^2\end{pmatrix}\]

      source
      Base.logMethod
      X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)
      +log!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)

      Compute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any $j ∈ \{1,…,m\}$

      \[X = \begin{pmatrix} + q_1 - p_1 \\ + q_2 - p_2 + (q_1 - p_1)^2 +\end{pmatrix}\]

      source
      Manifolds.inverse_local_metricMethod
      inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

      Return the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

      \[G^{-1}_p = +\begin{pmatrix} + 1 & 2p_1\\ + 2p_1 & 1+4p_1^2 \\ +\end{pmatrix}.\]

      source
      Manifolds.local_metricMethod
      local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

      Return the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

      \[G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix}\]

      source
      ManifoldsBase.change_representerMethod
      Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)
      +change_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)

      Given the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.

      this function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.

      source
      ManifoldsBase.innerMethod
      inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)

      Compute the inner product on $\mathbb R^2$ with respect to the RosenbrockMetric, i.e. for $X,Y \in T_p\mathcal M$ we have

      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1\\ + -2p_1 & 1 +\end{pmatrix},\]

      source

      Literature

      diff --git a/previews/PR11/references.bib b/previews/PR11/references.bib new file mode 100644 index 0000000..e65e411 --- /dev/null +++ b/previews/PR11/references.bib @@ -0,0 +1,46 @@ +@article{BergmannFerreiraSantosSouza:2023, + AUTHOR = {Bergmann, R. and Ferreira, O. P. and Santos, E. M. and Souza, J. C. O.}, + JOURNAL = {arXiv preprint}, + TITLE = {The difference of convex algorithm on Hadamard manifolds}, + URL = {https://arxiv.org/abs/2112.05250}, + YEAR = {2023} +} + +@book{Boumal:2023, + TITLE = {An Introduction to Optimization on Smooth Manifolds}, + AUTHOR = {Boumal, Nicolas}, + YEAR = {2023}, + MONTH = mar, + EDITION = {First}, + PUBLISHER = {Cambridge University Press}, + DOI = {10.1017/9781009166164}, + ABSTRACT = {Optimization on Riemannian manifolds-the result of smooth geometry and optimization merging into one elegant modern framework-spans many areas of science and engineering, including machine learning, computer vision, signal processing, dynamical systems and scientific computing. This text introduces the differential geometry and Riemannian geometry concepts that will help students and researchers in applied mathematics, computer science and engineering gain a firm mathematical grounding to use these tools confidently in their research. Its charts-last approach will prove more intuitive from an optimizer's viewpoint, and all definitions and theorems are motivated to build time-tested optimization algorithms. Starting from first principles, the text goes on to cover current research on topics including worst-case complexity and geodesic convexity. Readers will appreciate the tricks of the trade for conducting research and for numerical implementations sprinkled throughout the book.}, + ISBN = {978-1-00-916616-4}, + URL = {https://www.nicolasboumal.net/#book} +} + +@article{SouzaOliveira:2015, + AUTHOR = {J. C. O. Souza and P. R. Oliveira}, + DOI = {10.1007/s10898-015-0282-7}, + JOURNAL = {Journal of Global Optimization}, + MONTH = feb, + NUMBER = {4}, + PAGES = {797--810}, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {63}, + TITLE = {A proximal point algorithm for DC fuctions on Hadamard manifolds}, + YEAR = {2015} +} + +@article{WeberSra:2022, + DOI = {10.1007/s10107-022-01840-5}, + YEAR = {2022}, + MONTH = jul, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {199}, + NUMBER = {1-2}, + PAGES = {525--556}, + AUTHOR = {Melanie Weber and Suvrit Sra}, + TITLE = {Riemannian Optimization via Frank-Wolfe Methods}, + JOURNAL = {Mathematical Programming} +} \ No newline at end of file diff --git a/previews/PR11/references/index.html b/previews/PR11/references/index.html new file mode 100644 index 0000000..6e4b3c5 --- /dev/null +++ b/previews/PR11/references/index.html @@ -0,0 +1,15 @@ + +References · ManoptExamples.jl

      Literature

      [BFSS23]
      +
      +
      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
      +
      [Bou23]
      +
      + +
      [SO15]
      +
      +
      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
      +
      [WS22]
      +
      +
      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
      +
      +
      diff --git a/previews/PR11/search/index.html b/previews/PR11/search/index.html new file mode 100644 index 0000000..f739f55 --- /dev/null +++ b/previews/PR11/search/index.html @@ -0,0 +1,2 @@ + +Search · ManoptExamples.jl

      Loading search...

        diff --git a/previews/PR11/search_index.js b/previews/PR11/search_index.js new file mode 100644 index 0000000..0aec9e2 --- /dev/null +++ b/previews/PR11/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Difference-of-Convex-Frank-Wolfe/#A-comparison-of-the-Difference-of-Convex-and-Frank-Wolfe-Algorithm","page":"Frank Wolfe comparison","title":"A comparison of the Difference of Convex and Frank Wolfe Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Ronny Bergmann 2023-11-06","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Introduction","page":"Frank Wolfe comparison","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing ManifoldsBase, Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices mathcal P(n) with the affine invariant metric. Let q_1ldotsq_m in mathcal P(n) be a set of points and mu_1ldotsmu_m be a set of weights, such that they sum to one. We consider then","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmax_pinmathcal C h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"h(p) =\nsum_j=1^m mu_j d^2(pq_i)\nquad text where \nd^2(pq_i) = operatornametrbigl(\n log^2(p^-frac12q_jp^-frac12)\nbig)\nqquadtextandqquad\nmathcal C = pin mathcal M bar Lpreceq p preceq bar U ","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"for a lower bound L and an upper bound U for the matrices in the positive definite sense A preceq B Leftrightarrow (B-A) is positive semi-definite","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"When every one of the weights mu_1 ldots mu_m are equal, this function h is known as the of the set q_1 dots q_m.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And for our example we set","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Random.seed!(42)\nn = 20\nm = 100\nM = SymmetricPositiveDefinite(n)\nq = [rand(M) for _ in 1:m];\nw = rand(m)\nw ./=sum(w)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use as lower and upper bound the arithmetic and geometric mean L and U, respectively.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )\nU = sum( wi * qi for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p0 = (L+U)/2","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can check that it is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Common-Functions","page":"Frank Wolfe comparison","title":"Common Functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Given p in mathcal M, X in T_pmathcal M on the symmetric positive definite matrices M, this method computes the closed form solution to","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_qin mathcal C langle X log_p qrangle\n = operatorname*argmin_qin mathcal C operatornametr(Slog(YqY))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"where mathcal C = q L preceq q preceq U , S = p^-12Xp^-12, and Y=p^-12.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The solution is given by Z=X^-1Qbigl( P^mathrmT-operatornamesgn(D)_+P+hatLbigr)Q^mathrmTX^-1,@ where S=QDQ^mathrmT is a diagonalization of S, hatU-hatL=P^mathrmTP with hatL=Q^mathrmTXLXQ and hatU=Q^mathrmTXUXQ, where -mboxsgn(D)_+ is the diagonal matrix","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatornamediagbigl(\n -operatornamesgn(d_11)_+ ldots -operatornamesgn(d_nn)_+\nbigr)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and D=(d_ij).","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@doc raw\"\"\"\n closed_form_solution!(M, q, L, U, p X)\n\nCompute the closeed form solution of the constraint sub problem in place of ``q``.\n\"\"\"\nfunction closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)\n # extract p^1/2 and p^{-1/2}\n (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)\n # Compute D & Q\n e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk = QDQ'\n D = Diagonal(1.0 .* (e2.values .< 0))\n Q = e2.vectors\n #println(p)\n Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q\n Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q\n P = cholesky(Hermitian(Uprime - Lprime))\n z = P.U' * D * P.U + Lprime\n copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-Difference-of-Convex-Formulation","page":"Frank Wolfe comparison","title":"The Difference of Convex Formulation","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use g(p) = iota_mathcal C(p) as the indicator funtion of the set mathcal C. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function is_pos_def(p; atol=5e-13)\n e = eigen(Symmetric(p))\n return all((e.values .+ atol) .> 0)\nend\nfunction g(p, L, U)\n return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf\nend\nh(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"So we can first check that p0 is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"g(p0,L,U) == 0.0","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"true","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Now setting","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We look for a maximum of h, where g is minimal, i.e. g(p) is zero or in other words p in mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The gradient of h can also be implemented in closed form as","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))\nfunction grad_h!(M, X, p, w, q)\n Y = copy(M, p, X)\n zero_vector!(M, X, p)\n for (wi, qi) in zip(w,q)\n log!(M, Y, p, qi)\n Y .*= - 2.0*wi\n X .+= Y\n end\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can further define the cost, which will just be +infty outside of mathcal C. We define","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_dc(M, p) = g(p, L, U) - h(M, p, w, q)\ngrad_h!(M, X, p) = grad_h!(M, X, p, w, q)\nfunction grad_f_dc!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Here we can omit the gradient of g in the definition of operatornamegrad f, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As the last step, we can provide the closed form solver for the DC sub problem given at iteration k by","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pin mathcal C\n biglangle -operatornamegrad h(p^(k)) exp^-1_p^(k)pbigrangle","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Which we con compute","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution!(M, q, p, X)\n closed_form_solution!(M, q, L, U, p, -X)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For safety, we might want to avoid ending up at the boundary of mathcal C. That is we reduce the distance we walk towards the solution q a bit.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution_safe!(M, q, p, X)\n p_last = copy(M,p) # since p=q might be in place\n closed_form_solution!(M, q, L, U, p, -X)\n q_orig = copy(M,q) # since we do the following in place of q\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n s = 1.0\n d = distance(M, p_last, q_orig);\n # if we are close to zero, we reduce faster.\n α = d < 1/(n^2) ? 0.66 : 0.9995;\n i=0\n while (a < 0) || (b < 0)\n s *= α\n shortest_geodesic!(M, q, p_last, q_orig, s)\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n #println(\"$i a: $a, b = $b with s=$s\")\n i=i+1\n if (i>100) # safety fallback\n #@warn \" $i steps where not enough $s ($α)\\n$a $b\\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs\"\n qe = eigen(q)\n if a < 0\n qe.values .+= min(1e-8, n*abs(min(a,b)))\n else\n qe.values .-= min(1e-8, n*abs(min(a,b)))\n end\n q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n return q\n end\n end\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-DoC-solver-run","page":"Frank Wolfe comparison","title":"The DoC solver run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s compare both methods when they have the same stopping criteria","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;\n gradient=grad_f_dc!,\n sub_problem=dc_sub_solution_safe!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(300) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 30, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(p): -0.77661458292831\nAt iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.\n 16.362823 seconds (16.44 M allocations: 1.558 GiB, 4.79% gc time, 85.93% compilation time)\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 23 iterations\n\n## Parameters\n* sub solver state:\n | InplaceEvaluation()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 300: not reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 30]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s extract the final point and look at its cost","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_dc = get_solver_result(state1_dc);\nf_dc(M, p1_dc)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.784425242474807","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (1.1886583723800445e-12, 0.06669240322431051)\n (1.3411042178831775e-5, 0.0671353506908023)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For the statistics we extract the recordings from the state","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Define-the-Frank-Wolfe-functions","page":"Frank Wolfe comparison","title":"Define the Frank-Wolfe functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For Frank wolfe, the cost is just defined as -h(p) but the minimisation is constraint to mathcal C, which is enfored by the oracle.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_fw(M, p) = -h(M, p, w, q)\nfunction grad_f_fw!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend\noracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-FW-Solver-Run","page":"Frank Wolfe comparison","title":"The FW Solver Run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Similarly we can run the Frank-Wolfe algorithm with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;\n sub_problem=oracle_fw!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(10^4) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), :Cost, (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 2*10^3, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial f(x): -0.776615\n# 2000 f(x): -0.784420 |Δp|: 0.04611942377596 |grad f(p)|: 0.17693408 |Δgrad f(p)|: 0.17555618\n# 4000 f(x): -0.784421 |Δp|: 0.00372201632005 |grad f(p)|: 0.17694619 |Δgrad f(p)|: 0.00749427\n# 6000 f(x): -0.784422 |Δp|: 0.00205683506784 |grad f(p)|: 0.17695204 |Δgrad f(p)|: 0.00414088\n# 8000 f(x): -0.784422 |Δp|: 0.00140675676260 |grad f(p)|: 0.17695565 |Δgrad f(p)|: 0.00283200\n# 10000 f(x): -0.784422 |Δp|: 0.00106177438611 |grad f(p)|: 0.17695815 |Δgrad f(p)|: 0.00213746\nThe algorithm reached its maximal number of iterations (10000).\n316.048927 seconds (56.05 M allocations: 93.634 GiB, 4.13% gc time, 0.35% compilation time)\n\n# Solver state for `Manopt.jl`s Frank Wolfe Method\nAfter 10000 iterations\n\n## Parameters\n* inverse retraction method: LogarithmicInverseRetraction()\n* retraction method: ExponentialRetraction()\n* sub solver state:\n | InplaceEvaluation()\n\n## Stepsize\nDecreasingStepsize(; length=2.0, factor=1.0, subtrahend=0.0, shift=2)\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 10000: reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"f(x): %f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 2000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we take a look at this result as well","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_fw = get_solver_result(state1_fw);\nf_dc(M, p1_fw)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844220281765162","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And its feasibility","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.904818928410655e-10, 0.06659173821656107)\n (3.245654983213335e-5, 0.06713970236096602)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Statistics","page":"Frank Wolfe comparison","title":"Statistics","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We extract the recorded values","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"# DoC\niter1_dc = get_record(state1_dc, :Iteration, :Iteration)\npk_dc = get_record(state1_dc,:Iteration,:Iterate)\ncosts1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))\ndc_min = minimum(costs1_dc)\n# FW\niter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]\npk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]\ncosts1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x_k)-f^*$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-8, 10^-2),\n xaxis=:log,\n xlims=(1,10^4),\n)\nplot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label=\"Difference of Convex\")\nplot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label=\"Frank-Wolfe\")","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Literature","page":"Frank Wolfe comparison","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Pages = [\"examples/Difference-of-Convex-Frank-Wolfe.md\"]\nCanonical=false","category":"page"},{"location":"references/#Literature","page":"References","title":"Literature","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/ManoptExamples.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-of-the-Difference-of-Convex-Algorithms","page":"A Benchmark","title":"Benchmark of the Difference of Convex Algorithms","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Introduction","page":"A Benchmark","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where ghcolon mathcal M to mathbb R are geodesically convex function on the Riemannian manifold mathcal M.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#The-DC-Problem","page":"A Benchmark","title":"The DC Problem","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We start with defining the two convex functions gh and their gradients as well as the DC problem f and its gradient for the problem","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":" operatorname*argmin_pinmathcal M bigl( logbigr(det(p)bigr)bigr)^4 - bigl(log det(p) bigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where the critical points obtain a functional value of -frac14.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where mathcal M is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We first define the corresponding functions","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"g(M, p) = log(det(p))^4\nh(M, p) = log(det(p))^2\nf(M, p) = g(M, p) - h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and their gradients","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"grad_g(M, p) = 4 * (log(det(p)))^3 * p\ngrad_h(M, p) = 2 * log(det(p)) * p\ngrad_f(M, p) = grad_g(M, p) - grad_h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which we can use to verify that the gradients of g and h are correct. We use for that","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"n = 6\nM = SymmetricPositiveDefinite(n)\np0 = log(n) * Matrix{Float64}(I, n, n);\nX0 = 1 / n * Matrix{Float64}(I, n, n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"to tall both checks","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, g, grad_g, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, h, grad_h, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which both pass the test. We continue to define their inplace variants","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"function grad_g!(M, X, p)\n copyto!(M, X, p)\n X .*= 4 * (log(det(p)))^3\n return X\nend\nfunction grad_h!(M, X, p)\n copyto!(M, X, p)\n X .*= 2 * (log(det(p)))\n return X\nend\nfunction grad_f!(M, X, p)\n grad_g!(M, X, p)\n Y = copy(M, p, X)\n grad_h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And compare times for both algorithms, with a bit of debug output.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dca = difference_of_convex_algorithm(\n M,\n f,\n g,\n grad_h!,\n p0;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n (:GradientNorm, \" |grad_f(p)|: %1.9f\"),\n (:Change, \" |δp|: %1.9f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState(M, copy(M, p0)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470\n# 5 f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127\n# 10 f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103\n# 15 f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.000000003 |δp|: 0.000000011\nThe algorithm reached approximately critical point after 24 iterations; the gradient norm (3.9079528504063575e-11) is less than 1.0e-10.\n 6.570523 seconds (8.12 M allocations: 555.671 MiB, 3.50% gc time, 99.32% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The cost is","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dca)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Similarly the DCPPA performs","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dcppa = difference_of_convex_proximal_point(\n M,\n grad_h!,\n p0;\n g=g,\n grad_g=grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n \" \",\n (:GradientNorm, \"|grad_f(p)|: %1.10f\"),\n (:Change, \"|δp|: %1.10f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState(M, copy(M, p0)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470 \n# 5 f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692\n# 10 f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316\n# 15 f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968\n# 25 f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530\n# 30 f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048\n# 35 f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001\nThe algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.\n 1.676814 seconds (1.77 M allocations: 123.378 MiB, 3.58% gc time, 94.55% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dcppa)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-I:-Time-comparison","page":"A Benchmark","title":"Benchmark I: Time comparison","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()\ndcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()\nN_max=14\nN = 2:N_max","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and run a benchmark for both algorithms","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"for n in N\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I, n, n)\n bdca = @benchmark difference_of_convex_algorithm(\n $Mn,\n $f,\n $g,\n $grad_h!,\n $pn;\n grad_g=$grad_g!,\n gradient=$grad_f!,\n evaluation=InplaceEvaluation(),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dca_benchmarks[n] = bdca\n bdcppa = @benchmark difference_of_convex_proximal_point(\n $Mn,\n $grad_h!,\n $pn;\n g=$g,\n grad_g=$grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dcppa_benchmarks[n] = bdcppa\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]\ndca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]\ndcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Time (sec.)\")\nplot!(dims, dca_times; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims, dcppa_times; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-II:-Iterations-and-cost.","page":"A Benchmark","title":"Benchmark II: Iterations and cost.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"N2 = [5,10,20,40,80]\ndims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]\ndca_iterations = Dict{Int,Int}()\ndca_costs = Dict{Int,Vector{Float64}}()\ndcppa_iterations = Dict{Int,Int}()\ndcppa_costs = Dict{Int,Vector{Float64}}()","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time for n in N2\n println(n)\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I,n,n);\n @time dca_st = difference_of_convex_algorithm(\n Mn, f, g, grad_h!, pn;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation = InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state = TrustRegionsState(Mn, copy(Mn, pn)),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dca_costs[n] = get_record(dca_st, :Iteration, :Cost)\n dca_iterations[n] = length(dca_costs[n])\n @time dcppa_st = difference_of_convex_proximal_point(\n Mn, grad_h!, pn;\n g=g,\n grad_g=grad_g!,\n λ = i -> 1/(2*n),\n cost = f,\n gradient= grad_f!,\n evaluation = InplaceEvaluation(),\n stepsize = ConstantStepsize(1.0),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state = TrustRegionsState(Mn, copy(Mn, pn)),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)\n dcppa_iterations[n] = length(dcppa_costs[n])\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The iterations are like","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Iterations\")\nplot!(dims2, [values(dca_iterations)...]; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims2, [values(dcppa_iterations)...]; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And for the developtment of the cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where we can see that the DCA needs less iterations than the DCPPA.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Literature","page":"A Benchmark","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Pages = [\"examples/Difference-of-Convex-Benchmark.md\"]\nCanonical=false","category":"page"},{"location":"objectives/#List-of-Objectives-defined-for-the-Examples","page":"Objectives","title":"List of Objectives defined for the Examples","text":"","category":"section"},{"location":"objectives/#Rayleigh","page":"Objectives","title":"Rayleigh Quotient on the Sphere","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rayleigh example (TODO) to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RayleighQuotient.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RayleighQuotientCost","page":"Objectives","title":"ManoptExamples.RayleighQuotientCost","text":"RayleighQuotientCost\n\nA functor representing the Rayleigh Quotient cost function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either\n\nf(p) = p^mathrmTApqquad p 𝕊^n-1\n\nor extended into the embedding as\n\nf(x) = x^mathrmTAx qquad x ℝ^n\n\nwhich is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of 𝕊^n-1.\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientCost(A)\n\nCreate the Rayleigh cost function.\n\nSee also\n\nRayleighQuotientGrad!!, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientGrad!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientGrad!!","text":"RayleighQuotientGrad!!\n\nA functor representing the Rayleigh Quotient gradient function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either\n\noperatornamegrad f(p) = 2 Ap - 2 (p^mathrmTAp)*pqquad p 𝕊^n-1\n\nor taking the Euclidean gradient of the Rayleigh quotient on the sphere as\n\nf(x) = 2Ax qquad x ℝ^n\n\nFor details, see Example 3.62 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientGrad!!(A)\n\nCreate the Rayleigh quotient gradient function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientHess!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientHess!!","text":"RayleighQuotientHess!!\n\nA functor representing the Rayleigh Quotient Hessian.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either\n\noperatornameHess f(p)X = 2 bigl(AX - (p^mathrmTAX)p - (p^mathrmTAp)Xbigr)qquad p 𝕊^n-1 X in T_p𝕊^n-1\n\nor taking the Euclidean Hessian of the Rayleigh quotient on the sphere as\n\n^2f(x)V = 2AV qquad x V ℝ^n\n\nFor details, see Example 5.27 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientHess!!(A)\n\nCreate the Rayleigh quotient Hessian function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientGrad!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective-Tuple{AbstractVector}","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also 📖 Rosenbrock (with slightly different parameter naming).\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\ngrad_f!!(M,p)\ngrad_f!!(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockMetric","page":"Objectives","title":"ManoptExamples.RosenbrockMetric","text":"RosenbrockMetric <: AbstractMetric\n\nA metric related to the Rosenbrock problem, where the metric at a point pmathbb R^2 is given by\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\nwhere the mathrmRb stands for Rosenbrock\n\n\n\n\n\n","category":"type"},{"location":"objectives/#Base.exp-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Number}","page":"Objectives","title":"Base.exp","text":"q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)\nexp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)\n\nCompute the exponential map with respect to the RosenbrockMetric.\n\n q = beginpmatrix p_1 + X_1 p_2+X_2+X_1^2endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Base.log-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any}","page":"Objectives","title":"Base.log","text":"X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)\nlog!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)\n\nCompute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any j 1m\n\nX = beginpmatrix\n q_1 - p_1 \n q_2 - p_2 + (q_1 - p_1)^2\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.inverse_local_metric-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.inverse_local_metric","text":"inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG^-1_p =\nbeginpmatrix\n 1 2p_1\n 2p_1 1+4p_1^2 \nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.local_metric-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.local_metric","text":"local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.change_representer-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, ManifoldsBase.EuclideanMetric, Any, Any}","page":"Objectives","title":"ManifoldsBase.change_representer","text":"Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)\nchange_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)\n\nGiven the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.\n\nthis function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.inner-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Any}","page":"Objectives","title":"ManifoldsBase.inner","text":"inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)\n\nCompute the inner product on mathbb R^2 with respect to the RosenbrockMetric, i.e. for XY in T_pmathcal M we have\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1\n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Literature","page":"Objectives","title":"Literature","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Pages = [\"objectives/index.md\"]\nCanonical=false","category":"page"},{"location":"examples/#List-of-Examples","page":"Overview","title":"List of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation Comment\nA Benchmark for Difference of Convex contains a few simple functions \nSolving Rosenbrock with Difference of Convex DoC split of Rosenbrock 📚 uses a Rosenbrock based metric\nDifference of Convex vs. Frank-Wolfe closed-form sub solver\nRiemannian Mean f, operatornamegradf (A/I), objective 📚 \nRobust PCA f, operatornamegradf (A/I), objective 📚 \nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚 \nThe Rayleigh Quotient f, operatornamegradf (A/I), operatornameHessf (A/I), objective 📚 ","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Solving-Rosenbrock-with-the-Difference-of-Convex-Algorithm","page":"Rosenbrock Metric","title":"Solving Rosenbrock with the Difference of Convex Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Introduction","page":"Rosenbrock Metric","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Both the Rosenbrock problem","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":" operatorname*argmin_xinmathbb R^2 abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where ab0 and usually b=1 and a gg b, we know the minimizer x^* = (bb^2)^mathrmT, and also the (Euclidean) gradient","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"nabla f(x) =\n beginpmatrix\n 4a(x_1^2-x_2) -2a(x_1^2-x_2)\n endpmatrix\n +\n beginpmatrix\n 2(x_1-b) 0\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Furthermore, the RosenbrockMetric can be used on mathbb R^2, that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"XY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"The Euclidean Gradient\nThe Riemannian gradient descent with respect to the RosenbrockMetric\nThe Euclidean Difference of Convex Algorithm\nThe Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Where we obtain a difference of convex problem by writing","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f(x) = abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2\n = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 - bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"g(x) = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 quadtext and quad h(x) = bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nimport Manopt: set_manopt_parameter!\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\ngreen = paul_tol[\"mutedgreen\"]\nsand = paul_tol[\"mutedsand\"]\nteal = paul_tol[\"mutedteal\"]\ngrey = paul_tol[\"mutedgrey\"]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"To emphasize the effect, we choose a quite large value of a.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"a = 2*10^5\nb = 1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and use the starting point and a direction to check gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"p0 = [0.1, 0.2]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Euclidean Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Euclidean gradient we can just use the same approach as in the Rosenbrock example","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M = ℝ^2\nf = ManoptExamples.RosenbrockCost(M; a=a, b=b)\n∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"define a common debug vector","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"debug_vec = [\n (:Iteration, \"# %-8d \"),\n (:Cost, \"F(x): %1.4e\"),\n \" \",\n (:Change, \"|δp|: %1.4e | \"),\n (:GradientNorm, \"|grad f|: %1.6e\"),\n :Stop,\n \"\\n\",\n ]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and call the gradient descent algorithm","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^7],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03\n# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04\n# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06\n# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08\n# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 53073227 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Riemannian Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Riemannian case, we define","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"MetricManifold(Euclidean(2; field = ℝ), ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and the gradient is now adopted to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_f!(M, X, p)\n ∇f!!(M, X, p)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_f(M, p)\n X = zero_vector(M, p)\n return grad_f!(M, X, p)\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^6],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 1000000 F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04\n# 2000000 F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 2443750 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Euclidean Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the convex case, we have to first introduce the two parts of the cost.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;\nf2(M, p; a=100, b=1) = (p[1] - b[1])^2;\ng(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)\nh(M, p; a=100, b=1) = f2(M, p; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and their (Euclidan) gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function ∇h!(M, X, p; a=100, b=1)\n X[1] = 2*(p[1]-b)\n X[2] = 0\n return X\nend\nfunction ∇h(M, p; a=100, b=1)\n X = zero(p)\n ∇h!(M, X, p; a=a, b=b)\n return X\nend\nfunction ∇g!(M, X, p; a=100, b=1)\n X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)\n X[2] = -2*a*(p[1]^2-p[2])\n return X\nend\nfunction ∇g(M, p; a=100, b=1)\n X = zero(p)\n ∇g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and we define for convenience","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docE_g(M, p) = g(M, p; a=a, b=b)\ndocE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)\ndocE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)\ndocE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)\nfunction docE_∇f!(M, X, p)\n Y = zero_vector(M, p)\n docE_∇g!(M, X, p)\n docE_∇h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we call the difference of convex algorithm on Eucldiean space mathbb R^2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"E_doc_state = difference_of_convex_algorithm(\n M, docE_f, docE_g, docE_∇h!, p0;\n gradient=docE_∇f!,\n grad_g = docE_∇g!,\n debug=[debug_vec..., 10^4],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_hess=nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000 F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04\n# 20000 F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 26549 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Riemannian Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"We first have to again defined the gradients with respect to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_h!(M, X, p; a=100, b=1)\n ∇h!(M, X, p; a=a, b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_h(M, p; a=100, b=1)\n X = zero(p)\n grad_h!(M, X, p; a=a, b=b)\n return X\nend\nfunction grad_g!(M, X, p; a=100, b=1)\n ∇g!(M, X, p; a=a,b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_g(M, p; a=100, b=1)\n X = zero(p)\n grad_g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For X in partial h(p^(k)) the sunproblem top determine p^(k+1) reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatorname*argmin_pinmathcal M g(p) - langle X log_p^(k)prangle","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with X = operatornamegrad h(p^(k)) that","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"phi(p) = g(p) - langle X log_p^(k)prangle\n= abigl( p_1^2-p_2bigr)^2\n + 2bigl(p_1-bbigr)^2 - 2(p^(k)_1-b)p_1 + 2(p^(k)_1-b)p^(k)_1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"its Euclidean gradient reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatornamegradphi(p) =\n nabla varphi(p)\n = beginpmatrix\n 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^(k)_1-b)\n -2a(p_1^2-p_2)\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where we can again employ the gradient conversion from before to obtain the Riemannian gradient.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"mutable struct SubGrad{P,T,V}\n pk::P\n Xk::T\n a::V\n b::V\nend\nfunction (ϕ::SubGrad)(M, p)\n X = zero_vector(M, p)\n ϕ(M, X, p)\n return X\nend\nfunction (ϕ::SubGrad)(M, X, p)\n X .= [\n 4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),\n -2 * ϕ.a * (p[1]^2 - p[2]),\n ]\n riemannian_gradient!(M, X, p, X) # convert\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And in orer to update the subsolvers gradient correctly, we have to overwrite","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)\nset_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we again introduce for ease of use","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docR_g(M, p) = g(M, p; a=a, b=b)\ndocR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)\ndocR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)\ndocR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)\nfunction docR_grad_f!(M, X, p)\n Y = zero_vector(M, p)\n docR_grad_g!(M, X, p)\n docR_grad_h!(M, Y, p)\n X .-= Y\n return X\nend\ndocR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_doc_state = difference_of_convex_algorithm(\n M_rb, docR_f, docR_g, docR_grad_h!, p0;\n gradient=docR_grad_f!,\n grad_g = docR_grad_g!,\n debug=[debug_vec..., 10^6],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_grad=docR_sub_grad,\n sub_hess = nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 1235 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Comparison-in-Iterations","page":"Rosenbrock Metric","title":"Comparison in Iterations","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x)$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-16, 5*1e5),\n xaxis=:log,\n xlims=(1,10^8),\n)\nscatter!(fig, [1,], [f(M,p0),], label=raw\"$f(p_0)$\", markercolor=grey)\negi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries\negc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries\nplot!(fig, egi, egc, color=teal, label=\"Euclidean GD\")\n#\nrgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries\nrgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries\nplot!(fig, rgi, rgc, color=indigo, label=\"Riemannian GD\")\n#\nedi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries\nedc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries\nplot!(fig, edi, edc, color=sand, label=\"Euclidean DoC\")\n#\nrdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries\nrdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries\nplot!(fig, rdi, rdc, color=green, label=\"Riemannian DoC\")","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Literature","page":"Rosenbrock Metric","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Pages = [\"examples/Difference-of-Convex-Rosenbrock.md\"]\nCanonical=false","category":"page"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny BergmannLaura Weigl 2023-07-02","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139397\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.430690947905521","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412973804873698","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 2023-01-03","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field = ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 44 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector trnasport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |grad f| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"2.359559352025148e-14","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 2023-07-02","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794750908\n 0.00653160068349042\n 0.7267799820871861","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794750908\n 0.00653160068349042\n 0.7267799820871861","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393613136017\n 0.006531541407458413\n 0.7267799052788726","category":"page"},{"location":"examples/RayleighQuotient/#The-Rayleigh-Quotient","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Ronny Bergmann 2024-03-09","category":"page"},{"location":"examples/RayleighQuotient/#Introduction","page":"The Rayleigh Quotient","title":"Introduction","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For a symmetric matrix A in mathbb R^ntimes n we consider the 📖 Rayleigh Quotient","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"operatorname*argmin_x in mathbb R^n backslash 0\nfracx^mathrmTAxlVert x rVert^2","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"On the sphere we can omit the denominator and obtain","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f(p) = p^mathrmTApqquad p 𝕊^n-1","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"which by itself we can again continue in the embedding as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"tilde f(x) = x^mathrmTAxqquad x in mathbb R^n","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This cost has the nice feature that at the minimizer p^*inmathbb S^n-1 the function falue f(p^*) is the smalles eigenvalue of A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For the embedded function tilde f the gradient and Hessian can be computed with classical methods as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\ntilde f(x) = 2Ax qquad x ℝ^n\n\n^2tilde f(x)V = 2AV qquad x V ℝ^n\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold mathcal M = mathbb S^n-1 are given by","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\noperatornamegrad f(p) = 2Ap - 2(p^mathrmTAp)*pqquad p 𝕊^n-1\n\noperatornameHess f(p)X = 2AX - 2(p^mathrmTAX)p - 2(p^mathrmTAp)Xqquad p 𝕊^n-1 X in T_p𝕊^n-1\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first generate an example martrx A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random\nRandom.seed!(42)\nn = 500\nA = Symmetric(randn(n,n))","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And the manifolds","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"M = Sphere(n-1)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Sphere(499, ℝ)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"E = get_embedding(M)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean(500; field = ℝ)","category":"page"},{"location":"examples/RayleighQuotient/#Setup-the-corresponding-functions","page":"The Rayleigh Quotient","title":"Setup the corresponding functions","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute f is called with M as their first argument and tilde f if called with E.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We instantiate","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f = ManoptExamples.RayleighQuotientCost(A)\ngrad_f = ManoptExamples.RayleighQuotientGrad!!(A)\nHess_f = ManoptExamples.RayleighQuotientHess!!(A)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"p0 = [1.0, zeros(n-1)...]\nX = zero_vector(M, p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"we can both call","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Y = grad_f(M,p0) # Allocates memory\ngrad_f(M,X,p0) # Computes in place of X and returns the result in X.\nnorm(M, p0, X-Y)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"0.0","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"λ = min(eigvals(A)...)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"-44.838605046940486","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-on-gradient-information","page":"The Rayleigh Quotient","title":"A Solver based on gradient information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient nabla tilde f. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n return_state=true,\n)\nq1 = get_solver_result(s)\ns","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 50 f(x): -44.206244|grad f(p)|:2.387846624353276\n# 100 f(x): -44.546883|grad f(p)|:2.256125365459942\n# 150 f(x): -44.765220|grad f(p)|:1.3051578932969472\n# 200 f(x): -44.824730|grad f(p)|:0.5758153603739719\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n [(:Iteration, \"# %-6d\"), (:Cost, \"f(x): %f\"), (:GradientNorm, \"|grad f(p)|:%s\"), \"\\n\", 50]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q2 = gradient_descent(M, f, grad_f, p0;\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n)\n#Test that both are the same\nisapprox(M, q1,q2)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 50 f(x): -44.206244|grad f(p)|:2.387846624353294\n# 100 f(x): -44.546883|grad f(p)|:2.2561253654599915\n# 150 f(x): -44.765220|grad f(p)|:1.305157893296954\n# 200 f(x): -44.824730|grad f(p)|:0.5758153603739878\n\ntrue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We can also benchmark both","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 9 samples with 1 evaluation.\n Range (min … max): 608.169 ms … 640.193 ms ┊ GC (min … max): 7.37% … 7.11%\n Time (median): 615.895 ms ┊ GC (median): 7.38%\n Time (mean ± σ): 617.565 ms ± 9.721 ms ┊ GC (mean ± σ): 7.37% ± 0.18%\n\n ▁ ▁ █ ▁▁ ▁ ▁ ▁ \n █▁█▁▁▁▁▁█▁▁▁▁▁██▁▁▁▁▁█▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 608 ms Histogram: frequency by time 640 ms <\n\n Memory estimate: 1.13 GiB, allocs estimate: 3852.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 51 samples with 1 evaluation.\n Range (min … max): 92.767 ms … 108.453 ms ┊ GC (min … max): 0.00% … 3.90%\n Time (median): 98.474 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 99.068 ms ± 3.786 ms ┊ GC (mean ± σ): 1.16% ± 1.85%\n\n ▁ ▁ █▁ ▄▁ ▁▄ ▁ ▁ ▁ \n ▆▆▆▆▁▆▆▁▁▆█▁▁█▆██▆▆██▁▆▆▆▆▁▁██▁█▆█▆▁▆▁▆▁▁▁▁▆█▁▆▁▆▆▁▆▁▁▁▁▁▁▁▆ ▁\n 92.8 ms Histogram: frequency by time 108 ms <\n\n Memory estimate: 12.02 MiB, allocs estimate: 3246.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see, that the conversion costs a bit of performance, but if the Euclidean gradient is easier to compute, this might still be ok.","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-(also)-on-(approximate)-Hessian-information","page":"The Rayleigh Quotient","title":"A Solver based (also) on (approximate) Hessian information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To also involve the Hessian, we consider the trust regions solver with three cases:","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean, approximating the Hessian\nEuclidean, providing the Hessian\nRiemannian, providing the Hessian but also using in-place evaluations.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -43.522431|grad f(p)|:9.779418323323288\n# 20 f(x): -44.838605|grad f(p)|:8.451144677175197e-12","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -43.522431|grad f(p)|:9.779418323423874\n# 20 f(x): -44.838605|grad f(p)|:1.1638484603322704e-11","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;\n evaluation=InplaceEvaluation(),\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -43.522431|grad f(p)|:9.779418323423881\n# 20 f(x): -44.838605|grad f(p)|:1.1445271377332597e-11","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $p0;\n objective_type=:Euclidean,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 3 samples with 1 evaluation.\n Range (min … max): 2.015 s … 2.073 s ┊ GC (min … max): 9.18% … 8.97%\n Time (median): 2.043 s ┊ GC (median): 9.10%\n Time (mean ± σ): 2.044 s ± 29.057 ms ┊ GC (mean ± σ): 9.09% ± 0.11%\n\n █ █ █ \n █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 2.01 s Histogram: frequency by time 2.07 s <\n\n Memory estimate: 3.81 GiB, allocs estimate: 21954.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n objective_type=:Euclidean\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 4 samples with 1 evaluation.\n Range (min … max): 1.364 s … 1.389 s ┊ GC (min … max): 9.36% … 9.17%\n Time (median): 1.373 s ┊ GC (median): 9.27%\n Time (mean ± σ): 1.375 s ± 10.702 ms ┊ GC (mean ± σ): 9.25% ± 0.08%\n\n █ █ █ █ \n █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 1.36 s Histogram: frequency by time 1.39 s <\n\n Memory estimate: 2.56 GiB, allocs estimate: 19283.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 104 samples with 1 evaluation.\n Range (min … max): 43.071 ms … 56.913 ms ┊ GC (min … max): 0.00% … 7.68%\n Time (median): 47.405 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 48.179 ms ± 2.909 ms ┊ GC (mean ± σ): 3.35% ± 4.22%\n\n ▁▁▁▆▆ ▆▁▃▆▃▃ ▁▁ ▃ █▆ ▁▁ ▁ \n ▄▁▁▄▄▇▄█████▇██████▄▇██▄▄▄▄█▄▇▄██▇▄██▁▁▄▄▁█▁▁▁▁▄▁▁▄▁▄▄▁▁▁▁▄ ▄\n 43.1 ms Histogram: frequency by time 56.4 ms <\n\n Memory estimate: 16.23 MiB, allocs estimate: 6802.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q1, q) for q ∈ [q2,q3] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 1.5505190490543112e-15\n 0.1301942153125503","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q3, q) for q ∈ [q4,q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 5.325642276241738e-14\n 5.1713218623657045e-14","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Which we can also see in the final cost, comparing it to the Eigenvalue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"5-element Vector{Float64}:\n 0.013874911807278067\n 0.01387491180739886\n 6.679101716144942e-13\n -4.106937012693379e-12\n -3.964828465541359e-12","category":"page"},{"location":"examples/RayleighQuotient/#Summary","page":"The Rayleigh Quotient","title":"Summary","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.","category":"page"},{"location":"examples/RayleighQuotient/#Literature","page":"The Rayleigh Quotient","title":"Literature","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Pages = [\"examples/RayleighQuotient.md\"]\nCanonical=false","category":"page"},{"location":"#Welcome-to-ManoptExample.jl","page":"Home","title":"Welcome to ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = ManoptExamples","category":"page"},{"location":"","page":"Home","title":"Home","text":"ManoptExamples.ManoptExamples","category":"page"},{"location":"#ManoptExamples.ManoptExamples","page":"Home","title":"ManoptExamples.ManoptExamples","text":"🏔️⛷️ ManoptExamples.jl – A collection of research and tutorial example problems for Manopt.jl\n\n📚 Documentation: juliamanifolds.github.io/ManoptExamples.jl\n📦 Repository: github.com/JuliaManifolds/ManoptExamples.jl\n💬 Discussions: github.com/JuliaManifolds/ManoptExamples.jl/discussions\n🎯 Issues: github.com/JuliaManifolds/ManoptExamples.jl/issues\n\n\n\n\n\n","category":"module"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/previews/PR11/siteinfo.js b/previews/PR11/siteinfo.js new file mode 100644 index 0000000..06c127a --- /dev/null +++ b/previews/PR11/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "previews/PR11"; diff --git a/previews/PR3/assets/documenter.js b/previews/PR3/assets/documenter.js new file mode 100644 index 0000000..4248476 --- /dev/null +++ b/previews/PR3/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +window.MathJax = { + "tex": { + "packages": [ + "base", + "ams", + "autoload" + ], + "inlineMath": [ + [ + "$", + "$" + ], + [ + "\\(", + "\\)" + ] + ], + "tags": "ams" + }, + "options": { + "ignoreHtmlClass": "tex2jax_ignore", + "processHtmlClass": "tex2jax_process" + } +} +; + +(function () { + var script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.js'; + script.async = true; + document.head.appendChild(script); +})(); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// 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() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/previews/PR3/assets/search.js b/previews/PR3/assets/search.js new file mode 100644 index 0000000..c133f74 --- /dev/null +++ b/previews/PR3/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/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'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + 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) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + 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/PR3/assets/themes/documenter-dark.css b/previews/PR3/assets/themes/documenter-dark.css new file mode 100644 index 0000000..0bf1af7 --- /dev/null +++ b/previews/PR3/assets/themes/documenter-dark.css @@ -0,0 +1,7702 @@ +@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 .tabs, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .file, html.theme--documenter-dark .button, .is-unselectable, html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after, html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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 .admonition:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .title:not(:last-child), +html.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .box:not(:last-child) { + margin-bottom: 1.5rem; } + +html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -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 .modal-close::before, html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::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 .modal-close::before, html.theme--documenter-dark .delete::before { + height: 2px; + width: 50%; } + html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::after { + height: 50%; + width: 2px; } + html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:focus, html.theme--documenter-dark .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + html.theme--documenter-dark .modal-close:active, html.theme--documenter-dark .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close, html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + html.theme--documenter-dark .is-medium.modal-close, html.theme--documenter-dark .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + html.theme--documenter-dark .is-large.modal-close, html.theme--documenter-dark .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +html.theme--documenter-dark .control.is-loading::after, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdee0; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +html.theme--documenter-dark .hero-video, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .modal, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, +html.theme--documenter-dark .image.is-square .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +html.theme--documenter-dark .image.is-1by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +html.theme--documenter-dark .image.is-5by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +html.theme--documenter-dark .image.is-4by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +html.theme--documenter-dark .image.is-3by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +html.theme--documenter-dark .image.is-5by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +html.theme--documenter-dark .image.is-16by9 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +html.theme--documenter-dark .image.is-2by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +html.theme--documenter-dark .image.is-3by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +html.theme--documenter-dark .image.is-4by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +html.theme--documenter-dark .image.is-3by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +html.theme--documenter-dark .image.is-2by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +html.theme--documenter-dark .image.is-3by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +html.theme--documenter-dark .image.is-9by16 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +html.theme--documenter-dark .image.is-1by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +html.theme--documenter-dark .image.is-1by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .file-cta, +html.theme--documenter-dark .file-name, html.theme--documenter-dark .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 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 .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus, + html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .file-cta:focus, + html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .button:focus, html.theme--documenter-dark .is-focused.pagination-previous, + html.theme--documenter-dark .is-focused.pagination-next, + html.theme--documenter-dark .is-focused.pagination-link, + html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .is-focused.file-cta, + html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active, + html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .file-cta:active, + html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .button:active, html.theme--documenter-dark .is-active.pagination-previous, + html.theme--documenter-dark .is-active.pagination-next, + html.theme--documenter-dark .is-active.pagination-link, + html.theme--documenter-dark .is-active.pagination-ellipsis, html.theme--documenter-dark .is-active.file-cta, + html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.button { + outline: none; } + html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled], + html.theme--documenter-dark .pagination-ellipsis[disabled], html.theme--documenter-dark .file-cta[disabled], + html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .button[disabled], fieldset[disabled] html.theme--documenter-dark .pagination-previous, html.theme--documenter-dark fieldset[disabled] .pagination-previous, + fieldset[disabled] html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark fieldset[disabled] .pagination-next, + fieldset[disabled] html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark fieldset[disabled] .pagination-link, + fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis, fieldset[disabled] html.theme--documenter-dark .file-cta, html.theme--documenter-dark fieldset[disabled] .file-cta, + fieldset[disabled] html.theme--documenter-dark .file-name, + html.theme--documenter-dark fieldset[disabled] .file-name, fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark fieldset[disabled] .select select, html.theme--documenter-dark .select fieldset[disabled] select, html.theme--documenter-dark fieldset[disabled] .textarea, html.theme--documenter-dark fieldset[disabled] .input, html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] html.theme--documenter-dark .button, html.theme--documenter-dark fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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. + */ + /*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/ + /* 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + html.theme--documenter-dark code, + html.theme--documenter-dark pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + html.theme--documenter-dark body { + color: #fff; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + html.theme--documenter-dark a { + color: #1abc9c; + cursor: pointer; + text-decoration: none; } + html.theme--documenter-dark a strong { + color: currentColor; } + html.theme--documenter-dark a:hover { + color: #1dd2af; } + html.theme--documenter-dark code { + background-color: rgba(255, 255, 255, 0.05); + color: #ececec; + font-size: 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + html.theme--documenter-dark .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + html.theme--documenter-dark .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + html.theme--documenter-dark .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + html.theme--documenter-dark .content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + html.theme--documenter-dark .content ul ul ul { + list-style-type: square; } + html.theme--documenter-dark .content dd { + margin-left: 2em; } + html.theme--documenter-dark .content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + html.theme--documenter-dark .content figure:not(:first-child) { + margin-top: 2em; } + html.theme--documenter-dark .content figure:not(:last-child) { + margin-bottom: 2em; } + html.theme--documenter-dark .content figure img { + display: inline-block; } + html.theme--documenter-dark .content figure figcaption { + font-style: italic; } + html.theme--documenter-dark .content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark .content sup, + html.theme--documenter-dark .content sub { + font-size: 75%; } + html.theme--documenter-dark .content table { + width: 100%; } + html.theme--documenter-dark .content table td, + html.theme--documenter-dark .content table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .content table th { + color: #f2f2f2; } + html.theme--documenter-dark .content table th:not([align]) { + text-align: 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 .content kbd, html.theme--documenter-dark .content .tags kbd, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 15px; } + html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + html.theme--documenter-dark .tags.is-centered { + justify-content: center; } + html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + html.theme--documenter-dark .tags.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-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 .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + align-items: center; + background-color: #282f2f; + border-radius: 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 .content kbd:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + html.theme--documenter-dark .tag.is-white:not(body), html.theme--documenter-dark .content kbd.is-white:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .tag.is-black:not(body), html.theme--documenter-dark .content kbd.is-black:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .tag.is-light:not(body), html.theme--documenter-dark .content kbd.is-light:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .tag.is-dark:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-dark:not(body), html.theme--documenter-dark .content .docstring > section > kbd:not(body) { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .tag.is-primary:not(body), html.theme--documenter-dark .content kbd.is-primary:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .tag.is-link:not(body), html.theme--documenter-dark .content kbd.is-link:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .tag.is-info:not(body), html.theme--documenter-dark .content kbd.is-info:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .tag.is-success:not(body), html.theme--documenter-dark .content kbd.is-success:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .tag.is-warning:not(body), html.theme--documenter-dark .content kbd.is-warning:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .tag.is-danger:not(body), html.theme--documenter-dark .content kbd.is-danger:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .tag.is-normal:not(body), html.theme--documenter-dark .content kbd.is-normal:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.85em; } + html.theme--documenter-dark .tag.is-medium:not(body), html.theme--documenter-dark .content kbd.is-medium:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 15px; } + html.theme--documenter-dark .tag.is-large:not(body), html.theme--documenter-dark .content kbd.is-large:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag.is-delete:not(body), html.theme--documenter-dark .content kbd.is-delete:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + html.theme--documenter-dark .tag.is-delete:not(body):hover, html.theme--documenter-dark .content kbd.is-delete:not(body):hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, html.theme--documenter-dark .tag.is-delete:not(body):focus, html.theme--documenter-dark .content kbd.is-delete:not(body):focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #1d2122; } + html.theme--documenter-dark .tag.is-delete:not(body):active, html.theme--documenter-dark .content kbd.is-delete:not(body):active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #111414; } + html.theme--documenter-dark .tag.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:not(body), html.theme--documenter-dark .content kbd.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, html.theme--documenter-dark .content .title kbd, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, + html.theme--documenter-dark .subtitle .tag, + html.theme--documenter-dark .subtitle .content kbd, + html.theme--documenter-dark .content .subtitle kbd, + html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + html.theme--documenter-dark .title { + color: #fff; + font-size: 2rem; + font-weight: 500; + line-height: 1.125; } + html.theme--documenter-dark .title strong { + color: inherit; + font-weight: inherit; } + html.theme--documenter-dark .title + .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 .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #1f2424; + border-color: #5e6d6f; + border-radius: 0.4em; + color: #dbdee0; } + html.theme--documenter-dark .select select::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .select select.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #8c9b9d; } + html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + html.theme--documenter-dark .select select[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + html.theme--documenter-dark .textarea[readonly], html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + html.theme--documenter-dark .is-white.textarea, html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.is-active.textarea, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .is-black.textarea, html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.is-active.textarea, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .is-light.textarea, html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: #ecf0f1; } + html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.is-active.textarea, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea, html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .content kbd.input { + border-color: #282f2f; } + html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-focused, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink { + border-color: #375a7f; } + html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .is-link.textarea, html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #1abc9c; } + html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.is-active.textarea, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .is-info.textarea, html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #024c7d; } + html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.is-active.textarea, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .is-success.textarea, html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #008438; } + html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.is-active.textarea, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .is-warning.textarea, html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ad8100; } + html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.is-active.textarea, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .is-danger.textarea, html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #9e1b0d; } + html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.is-active.textarea, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .is-small.textarea, html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .is-medium.textarea, html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .is-large.textarea, html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .is-fullwidth.textarea, html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + html.theme--documenter-dark .is-inline.textarea, html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 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 .radio, html.theme--documenter-dark .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + html.theme--documenter-dark .radio input, html.theme--documenter-dark .checkbox input { + cursor: pointer; } + html.theme--documenter-dark .radio:hover, html.theme--documenter-dark .checkbox:hover { + color: #8c9b9d; } + html.theme--documenter-dark .radio[disabled], html.theme--documenter-dark .checkbox[disabled], fieldset[disabled] html.theme--documenter-dark .radio, fieldset[disabled] html.theme--documenter-dark .checkbox { + 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.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.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.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]), html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + html.theme--documenter-dark .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.has-addons.has-addons-centered { + justify-content: center; } + html.theme--documenter-dark .field.has-addons.has-addons-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.is-grouped > .control { + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + 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 1em; + 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: 1.25em 1.5em; } + 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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .tile.is-2 { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .tile.is-3 { + flex: none; + width: 25%; } + html.theme--documenter-dark .tile.is-4 { + flex: none; + width: 33.3333333333%; } + html.theme--documenter-dark .tile.is-5 { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .tile.is-6 { + flex: none; + width: 50%; } + html.theme--documenter-dark .tile.is-7 { + flex: none; + width: 58.3333333333%; } + html.theme--documenter-dark .tile.is-8 { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .tile.is-9 { + flex: none; + width: 75%; } + html.theme--documenter-dark .tile.is-10 { + flex: none; + width: 83.3333333333%; } + html.theme--documenter-dark .tile.is-11 { + flex: none; + width: 91.6666666667%; } + 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, #e8e3e4 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, #e8e3e4 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 .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: #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 .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } + html.theme--documenter-dark .hero.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-link strong { + color: inherit; } + html.theme--documenter-dark .hero.is-link .title { + color: #fff; } + html.theme--documenter-dark .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-link .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-link .navbar-menu { + background-color: #1abc9c; } } + html.theme--documenter-dark .hero.is-link .navbar-item, + html.theme--documenter-dark .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-link .navbar-link:hover, + html.theme--documenter-dark .hero.is-link .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-link .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs li.is-active a { + 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 .content kbd, html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + 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 pre { + position: relative; + overflow: hidden; } + html.theme--documenter-dark pre code, html.theme--documenter-dark pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + html.theme--documenter-dark pre code:first-of-type, html.theme--documenter-dark pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + html.theme--documenter-dark pre code:last-of-type, html.theme--documenter-dark pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + html.theme--documenter-dark pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #fff; + cursor: pointer; + text-align: center; } + html.theme--documenter-dark pre .copy-button:focus, html.theme--documenter-dark pre .copy-button:hover { + opacity: 1; + background: rgba(255, 255, 255, 0.1); + color: #1abc9c; } + html.theme--documenter-dark pre .copy-button.success { + color: #259a12; + opacity: 1; } + html.theme--documenter-dark pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + html.theme--documenter-dark pre:hover .copy-button { + opacity: 1; } + html.theme--documenter-dark .admonition { + background-color: #282f2f; + border-style: solid; + border-width: 1px; + border-color: #5e6d6f; + border-radius: 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.5rem 0.75rem; + position: relative; } + html.theme--documenter-dark .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + html.theme--documenter-dark .admonition-body { + color: #fff; + padding: 0.5rem 0.75rem; } + html.theme--documenter-dark .admonition-body pre { + background-color: #282f2f; } + html.theme--documenter-dark .admonition-body code { + background-color: rgba(255, 255, 255, 0.05); } + html.theme--documenter-dark .docstring { + margin-bottom: 1em; + background-color: 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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > section:last-child { + border-bottom: none; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + html.theme--documenter-dark .documenter-example-output { + background-color: #1f2424; } + html.theme--documenter-dark .outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #282f2f; + border-bottom: 3px solid #9e1b0d; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + html.theme--documenter-dark .outdated-warning-overlay a { + color: #1abc9c; } + html.theme--documenter-dark .outdated-warning-overlay a:hover { + color: #1dd2af; } + html.theme--documenter-dark .content pre { + border: 1px solid #5e6d6f; } + html.theme--documenter-dark .content code { + font-weight: inherit; } + html.theme--documenter-dark .content a code { + color: #1abc9c; } + html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code { + color: #f2f2f2; } + html.theme--documenter-dark .content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child { + margin-top: 0; } + html.theme--documenter-dark pre, html.theme--documenter-dark code { + font-variant-ligatures: no-contextual; } + html.theme--documenter-dark .breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover { + color: #f2f2f2; } + html.theme--documenter-dark .hljs { + background: initial !important; } + html.theme--documenter-dark .katex .katex-mathml { + top: 0; + right: 0; } + html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display { + margin: 0.5em 0 !important; } + html.theme--documenter-dark html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + html.theme--documenter-dark li.no-marker { + list-style: none; } + html.theme--documenter-dark #documenter .docs-main > article { + overflow-wrap: break-word; } + html.theme--documenter-dark #documenter .docs-main > article .math-container { + overflow-x: auto; + overflow-y: hidden; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main { + width: 100%; } + html.theme--documenter-dark #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + background-color: #1f2424; + border-bottom: 1px solid #5e6d6f; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-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-package-name a, html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover { + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #5e6d6f; + display: none; + padding: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #5e6d6f; + padding-bottom: 1.5rem; + /* 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 .ansi span.sgr1 { + font-weight: bolder; } + html.theme--documenter-dark .ansi span.sgr2 { + font-weight: lighter; } + html.theme--documenter-dark .ansi span.sgr3 { + font-style: italic; } + html.theme--documenter-dark .ansi span.sgr4 { + text-decoration: underline; } + html.theme--documenter-dark .ansi span.sgr7 { + color: #1f2424; + background-color: #fff; } + html.theme--documenter-dark .ansi span.sgr8 { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr8 span { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr9 { + text-decoration: line-through; } + html.theme--documenter-dark .ansi span.sgr30 { + color: #242424; } + html.theme--documenter-dark .ansi span.sgr31 { + color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr32 { + color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr33 { + color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr34 { + color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr35 { + color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr36 { + color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr37 { + color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr40 { + background-color: #242424; } + html.theme--documenter-dark .ansi span.sgr41 { + background-color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr42 { + background-color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr43 { + background-color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr44 { + background-color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr45 { + background-color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr46 { + background-color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr47 { + background-color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr90 { + color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr91 { + color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr92 { + color: #79d462; } + html.theme--documenter-dark .ansi span.sgr93 { + color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr94 { + color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr95 { + color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr96 { + color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr97 { + color: #ecf0f1; } + html.theme--documenter-dark .ansi span.sgr100 { + background-color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr101 { + background-color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr102 { + background-color: #79d462; } + html.theme--documenter-dark .ansi span.sgr103 { + background-color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr104 { + background-color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr105 { + background-color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr106 { + background-color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr107 { + background-color: #ecf0f1; } + html.theme--documenter-dark code.language-julia-repl > span.hljs-meta { + color: #4fb43a; + font-weight: bolder; } + html.theme--documenter-dark .hljs { + background: #2b2b2b; + color: #f8f8f2; } + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-quote { + color: #d4d0ab; } + html.theme--documenter-dark .hljs-variable, + html.theme--documenter-dark .hljs-template-variable, + html.theme--documenter-dark .hljs-tag, + html.theme--documenter-dark .hljs-name, + html.theme--documenter-dark .hljs-selector-id, + html.theme--documenter-dark .hljs-selector-class, + html.theme--documenter-dark .hljs-regexp, + html.theme--documenter-dark .hljs-deletion { + color: #ffa07a; } + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-link { + color: #f5ab35; } + html.theme--documenter-dark .hljs-attribute { + color: #ffd700; } + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-addition { + color: #abe338; } + html.theme--documenter-dark .hljs-title, + html.theme--documenter-dark .hljs-section { + color: #00e0e0; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + color: #dcc6e0; } + html.theme--documenter-dark .hljs-emphasis { + font-style: italic; } + html.theme--documenter-dark .hljs-strong { + font-weight: bold; } + @media screen and (-ms-high-contrast: active) { + html.theme--documenter-dark .hljs-addition, + html.theme--documenter-dark .hljs-attribute, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-link, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-quote { + color: highlight; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + font-weight: bold; } } + html.theme--documenter-dark .hljs-subst { + color: #f8f8f2; } diff --git a/previews/PR3/assets/themes/documenter-light.css b/previews/PR3/assets/themes/documenter-light.css new file mode 100644 index 0000000..9595d5b --- /dev/null +++ b/previews/PR3/assets/themes/documenter-light.css @@ -0,0 +1,7738 @@ +@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); } } + +.tabs, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .breadcrumb, .file, .button, .is-unselectable, .modal-close, .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.navbar-link:not(.is-arrowless)::after, .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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; } + +.admonition:not(:last-child), .tabs:not(:last-child), .message:not(:last-child), .list:not(:last-child), .level:not(:last-child), .breadcrumb:not(:last-child), .highlight:not(:last-child), .block:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .table-container:not(:last-child), .table:not(:last-child), .progress:not(:last-child), .notification:not(:last-child), .content:not(:last-child), .box:not(:last-child) { + margin-bottom: 1.5rem; } + +.modal-close, .delete { + -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; } + .modal-close::before, .delete::before, .modal-close::after, .delete::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .modal-close::before, .delete::before { + height: 2px; + width: 50%; } + .modal-close::after, .delete::after { + height: 50%; + width: 2px; } + .modal-close:hover, .delete:hover, .modal-close:focus, .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + .modal-close:active, .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close, .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.modal-close, .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.modal-close, .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.control.is-loading::after, .select.is-loading::after, .loader, .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.hero-video, .modal-background, .modal, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, +.image.is-square .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +.image.is-1by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +.image.is-5by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +.image.is-4by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +.image.is-3by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +.image.is-5by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +.image.is-16by9 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +.image.is-2by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +.image.is-3by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +.image.is-4by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +.image.is-3by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +.image.is-2by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +.image.is-3by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +.image.is-9by16 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +.image.is-1by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +.image.is-1by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .file-cta, +.file-name, .select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input, .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.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; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .file-cta:focus, + .file-name:focus, .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .button:focus, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .is-focused.file-cta, + .is-focused.file-name, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.button, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .file-cta:active, + .file-name:active, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .button:active, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis, .is-active.file-cta, + .is-active.file-name, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.button { + outline: none; } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled], .file-cta[disabled], + .file-name[disabled], .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .button[disabled], fieldset[disabled] .pagination-previous, + fieldset[disabled] .pagination-next, + fieldset[disabled] .pagination-link, + fieldset[disabled] .pagination-ellipsis, fieldset[disabled] .file-cta, + fieldset[disabled] .file-name, fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + +body { + color: #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: #1081cb !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: #6b6b6b !important; } + +.has-background-grey { + background-color: #6b6b6b !important; } + +.has-text-grey-light { + color: #b5b5b5 !important; } + +.has-background-grey-light { + background-color: #b5b5b5 !important; } + +.has-text-grey-lighter { + color: #dbdbdb !important; } + +.has-background-grey-lighter { + background-color: #dbdbdb !important; } + +.has-text-white-ter { + color: 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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: #3c5dcd; + color: #363636; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #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: #1497ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .button.is-info[disabled], fieldset[disabled] .button.is-info { + background-color: #209cee; + border-color: 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: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning[disabled], fieldset[disabled] .button.is-warning { + background-color: #ffdd57; + border-color: 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: #6b6b6b; + 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #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 .content kbd, .content .tags kbd, .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 1rem; } + .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag, .tags.is-centered .content kbd, .content .tags.is-centered kbd, .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + .tags.has-addons .tag, .tags.has-addons .content kbd, .content .tags.has-addons kbd, .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + +.tag:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink: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, .content kbd:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag.is-white:not(body), .content kbd.is-white:not(body), .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + .tag.is-black:not(body), .content kbd.is-black:not(body), .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + .tag.is-light:not(body), .content kbd.is-light:not(body), .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: whitesmoke; + color: #363636; } + .tag.is-dark:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink.is-dark:not(body), .content .docstring > section > kbd:not(body) { + background-color: #363636; + color: whitesmoke; } + .tag.is-primary:not(body), .content kbd.is-primary:not(body), .docstring > section > a.docs-sourcelink:not(body) { + background-color: #4eb5de; + color: #fff; } + .tag.is-link:not(body), .content kbd.is-link:not(body), .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #2e63b8; + color: #fff; } + .tag.is-info:not(body), .content kbd.is-info:not(body), .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #209cee; + color: #fff; } + .tag.is-success:not(body), .content kbd.is-success:not(body), .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #22c35b; + color: #fff; } + .tag.is-warning:not(body), .content kbd.is-warning:not(body), .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .tag.is-danger:not(body), .content kbd.is-danger:not(body), .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #da0b00; + color: #fff; } + .tag.is-normal:not(body), .content kbd.is-normal:not(body), .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.75rem; } + .tag.is-medium:not(body), .content kbd.is-medium:not(body), .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 1rem; } + .tag.is-large:not(body), .content kbd.is-large:not(body), .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag.is-delete:not(body), .content kbd.is-delete:not(body), .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + .tag.is-delete:not(body):hover, .content kbd.is-delete:not(body):hover, .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, .tag.is-delete:not(body):focus, .content kbd.is-delete:not(body):focus, .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #e8e8e8; } + .tag.is-delete:not(body):active, .content kbd.is-delete:not(body):active, .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #dbdbdb; } + .tag.is-rounded:not(body), #documenter .docs-sidebar form.docs-search > input:not(body), .content kbd.is-rounded:not(body), #documenter .docs-sidebar .content form.docs-search > input:not(body), .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, .content .title kbd, .title .docstring > section > a.docs-sourcelink, + .subtitle .tag, + .subtitle .content kbd, + .content .subtitle kbd, + .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + +.title { + color: #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; } + +.select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input { + background-color: white; + border-color: #dbdbdb; + border-radius: 4px; + color: #363636; } + .select select::-moz-placeholder, .textarea::-moz-placeholder, .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-moz-placeholder, .textarea:-moz-placeholder, .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-ms-input-placeholder, .textarea:-ms-input-placeholder, .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:hover, .textarea:hover, .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .select select.is-hovered, .is-hovered.textarea, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #b5b5b5; } + .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #2e63b8; + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #6b6b6b; } + .select select[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] .select select::-moz-placeholder, .select fieldset[disabled] select::-moz-placeholder, fieldset[disabled] .textarea::-moz-placeholder, fieldset[disabled] .input::-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] .select select::-webkit-input-placeholder, .select fieldset[disabled] select::-webkit-input-placeholder, fieldset[disabled] .textarea::-webkit-input-placeholder, fieldset[disabled] .input::-webkit-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] .select select:-moz-placeholder, .select fieldset[disabled] select:-moz-placeholder, fieldset[disabled] .textarea:-moz-placeholder, fieldset[disabled] .input:-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] .select select:-ms-input-placeholder, .select fieldset[disabled] select:-ms-input-placeholder, fieldset[disabled] .textarea:-ms-input-placeholder, fieldset[disabled] .input:-ms-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + +.textarea, .input, #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .textarea[readonly], .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + .is-white.textarea, .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + .is-white.textarea:focus, .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.is-focused.textarea, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-white.textarea:active, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.is-active.textarea, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .is-black.textarea, .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + .is-black.textarea:focus, .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.is-focused.textarea, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-black.textarea:active, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.is-active.textarea, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .is-light.textarea, .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: whitesmoke; } + .is-light.textarea:focus, .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.is-focused.textarea, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-light.textarea:active, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.is-active.textarea, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .is-dark.textarea, .content kbd.textarea, .is-dark.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .content kbd.input { + border-color: #363636; } + .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .content kbd.input:focus, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .content kbd.is-focused.input, #documenter .docs-sidebar .content form.docs-search > input.is-focused, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .content kbd.input:active, .is-dark.is-active.textarea, .content kbd.is-active.textarea, .is-dark.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .content kbd.is-active.input, #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink, .is-primary.input, #documenter .docs-sidebar form.docs-search > input.is-primary, .docstring > section > a.input.docs-sourcelink { + border-color: #4eb5de; } + .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.input:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .docstring > section > a.input.docs-sourcelink:focus, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .docstring > section > a.is-focused.input.docs-sourcelink, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.input:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .docstring > section > a.input.docs-sourcelink:active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink, .is-primary.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .is-link.textarea, .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #2e63b8; } + .is-link.textarea:focus, .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.is-focused.textarea, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-link.textarea:active, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.is-active.textarea, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .is-info.textarea, .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #209cee; } + .is-info.textarea:focus, .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.is-focused.textarea, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-info.textarea:active, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.is-active.textarea, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .is-success.textarea, .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #22c35b; } + .is-success.textarea:focus, .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.is-focused.textarea, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-success.textarea:active, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.is-active.textarea, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .is-warning.textarea, .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ffdd57; } + .is-warning.textarea:focus, .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.is-focused.textarea, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-warning.textarea:active, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.is-active.textarea, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .is-danger.textarea, .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #da0b00; } + .is-danger.textarea:focus, .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.is-focused.textarea, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-danger.textarea:active, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.is-active.textarea, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .is-small.textarea, .is-small.input, #documenter .docs-sidebar form.docs-search > input { + border-radius: 2px; + font-size: 0.75rem; } + .is-medium.textarea, .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + .is-large.textarea, .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + .is-fullwidth.textarea, .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + .is-inline.textarea, .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + +.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { + border-radius: 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; } + +.radio, .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .radio input, .checkbox input { + cursor: pointer; } + .radio:hover, .checkbox:hover { + color: #363636; } + .radio[disabled], .checkbox[disabled], fieldset[disabled] .radio, fieldset[disabled] .checkbox { + color: #6b6b6b; + 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: #1190e3; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #22c35b; } + .select.is-success select { + border-color: #22c35b; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #1ead51; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #ffdd57; } + .select.is-warning select { + border-color: #ffdd57; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83e; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #da0b00; } + .select.is-danger select { + border-color: #da0b00; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #c10a00; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 2px; + font-size: 0.75rem; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: #6b6b6b; } + .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.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: #1497ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-danger .file-cta { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { + font-size: 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.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.is-hovered:not([disabled]), + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + .field.has-addons .control .input.is-hovered:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button.is-focused:not([disabled]), .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button.is-active:not([disabled]), + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + .field.has-addons .control .input.is-focused:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + .field.has-addons .control .input.is-active:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select.is-focused:not([disabled]), + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button.is-focused:not([disabled]):hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button.is-active:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + .field.has-addons .control .input.is-focused:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + .field.has-addons .control .input.is-active:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select.is-focused:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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: #6b6b6b; } + .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + +.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: #6b6b6b; + 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: #12537d; } + .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: #3c3108; } + .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 1em; + 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: 1.25em 1.5em; } + .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: #1190e3; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:focus, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:focus, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:focus, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #22c35b; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:focus, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:focus, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:focus, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:focus, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #22c35b; + color: #fff; } } + .navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:focus, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-burger { + color: rgba(0, 0, 0, 0.7); } + @media screen and (min-width: 1056px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:focus, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:focus, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:focus, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } } + .navbar.is-danger { + background-color: #da0b00; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:focus, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:focus, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:focus, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:focus, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #da0b00; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 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: #3c5dcd; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #6b6b6b; + 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: #6b6b6b; + 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.3333333333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .tile.is-2 { + flex: none; + width: 16.6666666667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.3333333333%; } + .tile.is-5 { + flex: none; + width: 41.6666666667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.3333333333%; } + .tile.is-8 { + flex: none; + width: 66.6666666667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.3333333333%; } + .tile.is-11 { + flex: none; + width: 91.6666666667%; } + .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, #e8e3e4 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e8e3e4 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, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: 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, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #4eb5de; } + .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } + .hero.is-link { + background-color: #2e63b8; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-link .navbar-menu { + background-color: #2e63b8; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2e63b8; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #22c35b; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-success .navbar-menu { + background-color: #22c35b; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #22c35b; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } + .hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); } + @media screen and (max-width: 1055px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } } + .hero.is-danger { + background-color: #da0b00; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-danger .navbar-menu { + background-color: #da0b00; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + 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; } + +pre { + position: relative; + overflow: hidden; } + pre code, pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + pre code:first-of-type, pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + pre code:last-of-type, pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #222222; + cursor: pointer; + text-align: center; } + pre .copy-button:focus, pre .copy-button:hover { + opacity: 1; + background: rgba(34, 34, 34, 0.1); + color: #2e63b8; } + pre .copy-button.success { + color: #259a12; + opacity: 1; } + pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + pre:hover .copy-button { + opacity: 1; } + +.admonition { + background-color: #b5b5b5; + border-style: solid; + border-width: 1px; + border-color: #363636; + border-radius: 4px; + font-size: 1rem; } + .admonition strong { + color: currentColor; } + .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 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: #def0fc; + border-color: #209cee; } + .admonition.is-info > .admonition-header { + background-color: #209cee; + color: #fff; } + .admonition.is-info > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-success { + background-color: #bdf4d1; + border-color: #22c35b; } + .admonition.is-success > .admonition-header { + background-color: #22c35b; + color: #fff; } + .admonition.is-success > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning { + background-color: #fff3c5; + border-color: #ffdd57; } + .admonition.is-warning > .admonition-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-danger { + background-color: #ffaba7; + border-color: #da0b00; } + .admonition.is-danger > .admonition-header { + background-color: #da0b00; + color: #fff; } + .admonition.is-danger > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-compat { + background-color: #bdeff5; + border-color: #1db5c9; } + .admonition.is-compat > .admonition-header { + background-color: #1db5c9; + color: #fff; } + .admonition.is-compat > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + +.admonition-header { + color: #fff; + background-color: #363636; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.5rem 0.75rem; + position: relative; } + .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + +.admonition-body { + color: #222222; + padding: 0.5rem 0.75rem; } + .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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #dbdbdb; } + .docstring > section:last-child { + border-bottom: none; } + .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + +.documenter-example-output { + background-color: white; } + +.outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #ffaba7; + color: rgba(0, 0, 0, 0.7); + border-bottom: 3px solid #da0b00; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + .outdated-warning-overlay a { + color: #2e63b8; } + .outdated-warning-overlay a:hover { + color: #363636; } + +.content pre { + border: 1px solid #dbdbdb; } + +.content code { + font-weight: inherit; } + +.content a code { + color: #2e63b8; } + +.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { + color: #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; } + +pre, code { + font-variant-ligatures: no-contextual; } + +.breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { + color: #222222; } + +.hljs { + background: initial !important; } + +.katex .katex-mathml { + top: 0; + right: 0; } + +.katex-display, mjx-container, .MathJax_Display { + margin: 0.5em 0 !important; } + +html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + +li.no-marker { + list-style: none; } + +/* 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; + overflow-y: hidden; } + +@media screen and (min-width: 1056px) { + #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + +@media screen and (max-width: 1055px) { + #documenter .docs-main { + width: 100%; } + #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + #documenter .docs-main > header, #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + +#documenter .docs-main header.docs-navbar { + background-color: 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-package-name a, #documenter .docs-sidebar .docs-package-name a:hover { + color: #0a0a0a; } + #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #dbdbdb; + display: none; + padding: 0.5rem; } + #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #dbdbdb; + padding-bottom: 1.5rem; + /* 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; } + +.ansi span.sgr1 { + font-weight: bolder; } + +.ansi span.sgr2 { + font-weight: lighter; } + +.ansi span.sgr3 { + font-style: italic; } + +.ansi span.sgr4 { + text-decoration: underline; } + +.ansi span.sgr7 { + color: white; + background-color: #222222; } + +.ansi span.sgr8 { + color: transparent; } + .ansi span.sgr8 span { + color: transparent; } + +.ansi span.sgr9 { + text-decoration: line-through; } + +.ansi span.sgr30 { + color: #242424; } + +.ansi span.sgr31 { + color: #a7201f; } + +.ansi span.sgr32 { + color: #066f00; } + +.ansi span.sgr33 { + color: #856b00; } + +.ansi span.sgr34 { + color: #2149b0; } + +.ansi span.sgr35 { + color: #7d4498; } + +.ansi span.sgr36 { + color: #007989; } + +.ansi span.sgr37 { + color: gray; } + +.ansi span.sgr40 { + background-color: #242424; } + +.ansi span.sgr41 { + background-color: #a7201f; } + +.ansi span.sgr42 { + background-color: #066f00; } + +.ansi span.sgr43 { + background-color: #856b00; } + +.ansi span.sgr44 { + background-color: #2149b0; } + +.ansi span.sgr45 { + background-color: #7d4498; } + +.ansi span.sgr46 { + background-color: #007989; } + +.ansi span.sgr47 { + background-color: gray; } + +.ansi span.sgr90 { + color: #616161; } + +.ansi span.sgr91 { + color: #cb3c33; } + +.ansi span.sgr92 { + color: #0e8300; } + +.ansi span.sgr93 { + color: #a98800; } + +.ansi span.sgr94 { + color: #3c5dcd; } + +.ansi span.sgr95 { + color: #9256af; } + +.ansi span.sgr96 { + color: #008fa3; } + +.ansi span.sgr97 { + color: whitesmoke; } + +.ansi span.sgr100 { + background-color: #616161; } + +.ansi span.sgr101 { + background-color: #cb3c33; } + +.ansi span.sgr102 { + background-color: #0e8300; } + +.ansi span.sgr103 { + background-color: #a98800; } + +.ansi span.sgr104 { + background-color: #3c5dcd; } + +.ansi span.sgr105 { + background-color: #9256af; } + +.ansi span.sgr106 { + background-color: #008fa3; } + +.ansi span.sgr107 { + background-color: whitesmoke; } + +code.language-julia-repl > span.hljs-meta { + color: #066f00; + font-weight: bolder; } + +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/ +/* +This is left on purpose making default.css the single file that can be lifted +as-is from the repository directly without the need for a build step + +Typically this "required" baseline CSS is added by `makestuff.js` during build. +*/ +pre code.hljs { + display: block; + overflow-x: auto; } + +code.hljs { + padding: 3px 5px; } + +/* end baseline CSS */ +.hljs { + background: #F0F0F0; + color: #444; } + +/* Base color: saturation 0; */ +.hljs-subst { + /* default */ } + +/* purposely ignored */ +.hljs-comment { + color: #888888; } + +.hljs-tag, +.hljs-punctuation { + color: #444a; } + +.hljs-tag .hljs-name, +.hljs-tag .hljs-attr { + color: #444; } + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta .hljs-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; } + +/* 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-operator, +.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 .hljs-string { + color: #4d99bf; } + +/* Misc effects */ +.hljs-emphasis { + font-style: italic; } + +.hljs-strong { + font-weight: bold; } diff --git a/previews/PR3/assets/themeswap.js b/previews/PR3/assets/themeswap.js new file mode 100644 index 0000000..c58e993 --- /dev/null +++ b/previews/PR3/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/PR3/assets/warner.js b/previews/PR3/assets/warner.js new file mode 100644 index 0000000..5531c88 --- /dev/null +++ b/previews/PR3/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
        Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/previews/PR3/contributing/index.html b/previews/PR3/contributing/index.html new file mode 100644 index 0000000..180e19d --- /dev/null +++ b/previews/PR3/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

        Contributing to Manopt.jl

        First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

        The following is a set of guidelines to ManoptExamples.jl.

        Table of Contents

        I just have a question

        The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

        How can I file an issue?

        If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

        How can I contribute?

        Add an objective

        The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

        If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

        If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

        • cost functions are always of the form cost_ and a fitting name
        • gradient functions are always of the the gradient_ and a fitting name, followed by an !

        for in-place gradients and by !! if it is a struct that can provide both.

        It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

        Add an example

        If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

        Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

        Code style

        We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

        We also follow a few internal conventions:

        • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
        • within a file the structs should come first and functions second. The only exception are constructors for the structs
        • within both blocks an alphabetical order is preferable.
        • The above implies that the mutating variant of a function follows the non-mutating variant.
        • There should be no dangling = signs.
        • Always add a newline between things of different types (struct/method/const).
        • Always add a newline between methods for different functions (including in-place/non-mutating variants).
        • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
        • All import/using/include should be in the main module file.
        • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
        • the Quarto Markdown files are excluded from this formatting.
        diff --git a/previews/PR3/examples/Riemannian-mean/index.html b/previews/PR3/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..37f5f85 --- /dev/null +++ b/previews/PR3/examples/Riemannian-mean/index.html @@ -0,0 +1,32 @@ + +Riemannian Mean · ManoptExamples.jl

        The Riemannian Center of Mass (mean)

        Ronny Bergmann 7/2/23

        Preliminary Notes

        Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

        For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.

        The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

        There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

        For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

        using Pkg;
        +Pkg.activate("."); # use the example environment,

        Loading packages and defining data

        Loading the necessary packages and defining a data set on a manifold

        using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
        +Random.seed!(42)
        +M = Sphere(2)
        +n = 100
        +σ = π / 8
        +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
        +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

        Variant 1: Using the functions

        We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.

        f = ManoptExamples.RiemannianMeanCost(data)
        +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

        Then we can for example directly call a gradient descent as

        x1 = gradient_descent(M, f, grad_f, first(data))
        3-element Vector{Float64}:
        + 0.6868392794764022
        + 0.006531600682543096
        + 0.726779982085954

        Variant 2: Using the objective

        A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

        rmo = ManoptExamples.Riemannian_mean_objective(
        +    M, data,
        +    evaluation=InplaceEvaluation(),
        +)

        Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

        rmp = DefaultManoptProblem(M, rmo)

        This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

        s1 = GradientDescentState(M, copy(M, first(data)))
        +solve!(rmp, s1)
        +x2 = get_solver_result(s1)
        3-element Vector{Float64}:
        + 0.6868395649618767
        + 0.006531393870513675
        + 0.7267797141480264

        but we can easily use a conjugate gradient instead

        s2 = ConjugateGradientDescentState(
        +    M,
        +    copy(M, first(data)),
        +    StopAfterIteration(100),
        +    ArmijoLinesearch(M),
        +    FletcherReevesCoefficient(),
        +)
        +solve!(rmp, s2)
        +x3 = get_solver_result(s2)
        3-element Vector{Float64}:
        + 0.6868393265070905
        + 0.006531566700408201
        + 0.7267799379452656
        diff --git a/previews/PR3/examples/index.html b/previews/PR3/examples/index.html new file mode 100644 index 0000000..66e1b88 --- /dev/null +++ b/previews/PR3/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

        LIst of Examples

        Nameprovides
        Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective 📚

        Symbols:

        • A Allocating variant
        • I In-place variant
        • 📚 link to documented functions in the documentation
        diff --git a/previews/PR3/index.html b/previews/PR3/index.html new file mode 100644 index 0000000..9d9735a --- /dev/null +++ b/previews/PR3/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

        ManoptExample.jl

        This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

        Each example usually consists of

        • a cost function and additional objects, like the gradient or proximal maps, see objectives
        • an example explaining how to use these, see examples

        Helping functions that are used in one or more examples can be found in the section of functions in the menu.

        diff --git a/previews/PR3/objectives/index.html b/previews/PR3/objectives/index.html new file mode 100644 index 0000000..0140a46 --- /dev/null +++ b/previews/PR3/objectives/index.html @@ -0,0 +1,10 @@ + +Objectives · ManoptExamples.jl

        List of Examples

        Riemannian Mean

        See Riemannian mean example to see these in use.

        ManoptExamples.RiemannianMeanCostType
        RiemannianMeanCost{P} where P

        A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

        For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

        \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

        where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

        Constructor

        RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

        Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

        See also

        RiemannianMeanGradient!!, Riemannian_mean_objective

        source
        ManoptExamples.RiemannianMeanGradient!!Type
        RiemannianMeanGradient!!{P} where P

        A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

        For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

        \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

        where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

        This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

        Constructors

        RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

        Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

        RiemannianMeanGradient!!(
        +    M::AbstractManifold,
        +    data::AbstractVector{P};
        +    initial_vector::T=zero_vector(M, first(data)),
        +) where {P,T}

        Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

        See also

        RiemannianMeanCost, Riemannian_mean_objective

        source
        ManoptExamples.Riemannian_mean_objectiveFunction
        Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
        +Riemannian_mean_objective(M, data;
        +initial_vector=zero_vector(M, first(data)),
        +evaluation=AllocatingEvaluton()
        +)

        Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

        See also

        RiemannianMeanCost, RiemannianMeanGradient!!

        Note

        The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

        source
        diff --git a/previews/PR3/search/index.html b/previews/PR3/search/index.html new file mode 100644 index 0000000..d0a95de --- /dev/null +++ b/previews/PR3/search/index.html @@ -0,0 +1,2 @@ + +Search · ManoptExamples.jl

        Loading search...

          diff --git a/previews/PR3/search_index.js b/previews/PR3/search_index.js new file mode 100644 index 0000000..f857383 --- /dev/null +++ b/previews/PR3/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 7/2/23","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794764022\n 0.006531600682543096\n 0.726779982085954","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868395649618767\n 0.006531393870513675\n 0.7267797141480264","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393265070905\n 0.006531566700408201\n 0.7267799379452656","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/ManoptExamples.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"objectives/#List-of-Examples","page":"Objectives","title":"List of Examples","text":"","category":"section"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"function"},{"location":"examples/#LIst-of-Examples","page":"Overview","title":"LIst of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides\nRiemannian Mean f, operatornamegradf (A/I), objective 📚","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"#ManoptExample.jl","page":"Home","title":"ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/previews/PR3/siteinfo.js b/previews/PR3/siteinfo.js new file mode 100644 index 0000000..9b16167 --- /dev/null +++ b/previews/PR3/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "previews/PR3"; diff --git a/previews/PR4/assets/documenter.js b/previews/PR4/assets/documenter.js new file mode 100644 index 0000000..4248476 --- /dev/null +++ b/previews/PR4/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +window.MathJax = { + "tex": { + "packages": [ + "base", + "ams", + "autoload" + ], + "inlineMath": [ + [ + "$", + "$" + ], + [ + "\\(", + "\\)" + ] + ], + "tags": "ams" + }, + "options": { + "ignoreHtmlClass": "tex2jax_ignore", + "processHtmlClass": "tex2jax_process" + } +} +; + +(function () { + var script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.js'; + script.async = true; + document.head.appendChild(script); +})(); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// 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() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/previews/PR4/assets/search.js b/previews/PR4/assets/search.js new file mode 100644 index 0000000..c133f74 --- /dev/null +++ b/previews/PR4/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/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'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + 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) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + 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/PR4/assets/themes/documenter-dark.css b/previews/PR4/assets/themes/documenter-dark.css new file mode 100644 index 0000000..0bf1af7 --- /dev/null +++ b/previews/PR4/assets/themes/documenter-dark.css @@ -0,0 +1,7702 @@ +@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 .tabs, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .file, html.theme--documenter-dark .button, .is-unselectable, html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after, html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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 .admonition:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .title:not(:last-child), +html.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .box:not(:last-child) { + margin-bottom: 1.5rem; } + +html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -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 .modal-close::before, html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::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 .modal-close::before, html.theme--documenter-dark .delete::before { + height: 2px; + width: 50%; } + html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::after { + height: 50%; + width: 2px; } + html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:focus, html.theme--documenter-dark .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + html.theme--documenter-dark .modal-close:active, html.theme--documenter-dark .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close, html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + html.theme--documenter-dark .is-medium.modal-close, html.theme--documenter-dark .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + html.theme--documenter-dark .is-large.modal-close, html.theme--documenter-dark .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +html.theme--documenter-dark .control.is-loading::after, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdee0; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +html.theme--documenter-dark .hero-video, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .modal, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, +html.theme--documenter-dark .image.is-square .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +html.theme--documenter-dark .image.is-1by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +html.theme--documenter-dark .image.is-5by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +html.theme--documenter-dark .image.is-4by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +html.theme--documenter-dark .image.is-3by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +html.theme--documenter-dark .image.is-5by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +html.theme--documenter-dark .image.is-16by9 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +html.theme--documenter-dark .image.is-2by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +html.theme--documenter-dark .image.is-3by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +html.theme--documenter-dark .image.is-4by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +html.theme--documenter-dark .image.is-3by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +html.theme--documenter-dark .image.is-2by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +html.theme--documenter-dark .image.is-3by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +html.theme--documenter-dark .image.is-9by16 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +html.theme--documenter-dark .image.is-1by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +html.theme--documenter-dark .image.is-1by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .file-cta, +html.theme--documenter-dark .file-name, html.theme--documenter-dark .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 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 .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus, + html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .file-cta:focus, + html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .button:focus, html.theme--documenter-dark .is-focused.pagination-previous, + html.theme--documenter-dark .is-focused.pagination-next, + html.theme--documenter-dark .is-focused.pagination-link, + html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .is-focused.file-cta, + html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active, + html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .file-cta:active, + html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .button:active, html.theme--documenter-dark .is-active.pagination-previous, + html.theme--documenter-dark .is-active.pagination-next, + html.theme--documenter-dark .is-active.pagination-link, + html.theme--documenter-dark .is-active.pagination-ellipsis, html.theme--documenter-dark .is-active.file-cta, + html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.button { + outline: none; } + html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled], + html.theme--documenter-dark .pagination-ellipsis[disabled], html.theme--documenter-dark .file-cta[disabled], + html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .button[disabled], fieldset[disabled] html.theme--documenter-dark .pagination-previous, html.theme--documenter-dark fieldset[disabled] .pagination-previous, + fieldset[disabled] html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark fieldset[disabled] .pagination-next, + fieldset[disabled] html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark fieldset[disabled] .pagination-link, + fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis, fieldset[disabled] html.theme--documenter-dark .file-cta, html.theme--documenter-dark fieldset[disabled] .file-cta, + fieldset[disabled] html.theme--documenter-dark .file-name, + html.theme--documenter-dark fieldset[disabled] .file-name, fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark fieldset[disabled] .select select, html.theme--documenter-dark .select fieldset[disabled] select, html.theme--documenter-dark fieldset[disabled] .textarea, html.theme--documenter-dark fieldset[disabled] .input, html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] html.theme--documenter-dark .button, html.theme--documenter-dark fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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. + */ + /*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/ + /* 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + html.theme--documenter-dark code, + html.theme--documenter-dark pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + html.theme--documenter-dark body { + color: #fff; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + html.theme--documenter-dark a { + color: #1abc9c; + cursor: pointer; + text-decoration: none; } + html.theme--documenter-dark a strong { + color: currentColor; } + html.theme--documenter-dark a:hover { + color: #1dd2af; } + html.theme--documenter-dark code { + background-color: rgba(255, 255, 255, 0.05); + color: #ececec; + font-size: 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + html.theme--documenter-dark .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + html.theme--documenter-dark .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + html.theme--documenter-dark .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + html.theme--documenter-dark .content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + html.theme--documenter-dark .content ul ul ul { + list-style-type: square; } + html.theme--documenter-dark .content dd { + margin-left: 2em; } + html.theme--documenter-dark .content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + html.theme--documenter-dark .content figure:not(:first-child) { + margin-top: 2em; } + html.theme--documenter-dark .content figure:not(:last-child) { + margin-bottom: 2em; } + html.theme--documenter-dark .content figure img { + display: inline-block; } + html.theme--documenter-dark .content figure figcaption { + font-style: italic; } + html.theme--documenter-dark .content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark .content sup, + html.theme--documenter-dark .content sub { + font-size: 75%; } + html.theme--documenter-dark .content table { + width: 100%; } + html.theme--documenter-dark .content table td, + html.theme--documenter-dark .content table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .content table th { + color: #f2f2f2; } + html.theme--documenter-dark .content table th:not([align]) { + text-align: 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 .content kbd, html.theme--documenter-dark .content .tags kbd, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 15px; } + html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + html.theme--documenter-dark .tags.is-centered { + justify-content: center; } + html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + html.theme--documenter-dark .tags.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-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 .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + align-items: center; + background-color: #282f2f; + border-radius: 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 .content kbd:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + html.theme--documenter-dark .tag.is-white:not(body), html.theme--documenter-dark .content kbd.is-white:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .tag.is-black:not(body), html.theme--documenter-dark .content kbd.is-black:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .tag.is-light:not(body), html.theme--documenter-dark .content kbd.is-light:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .tag.is-dark:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-dark:not(body), html.theme--documenter-dark .content .docstring > section > kbd:not(body) { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .tag.is-primary:not(body), html.theme--documenter-dark .content kbd.is-primary:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .tag.is-link:not(body), html.theme--documenter-dark .content kbd.is-link:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .tag.is-info:not(body), html.theme--documenter-dark .content kbd.is-info:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .tag.is-success:not(body), html.theme--documenter-dark .content kbd.is-success:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .tag.is-warning:not(body), html.theme--documenter-dark .content kbd.is-warning:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .tag.is-danger:not(body), html.theme--documenter-dark .content kbd.is-danger:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .tag.is-normal:not(body), html.theme--documenter-dark .content kbd.is-normal:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.85em; } + html.theme--documenter-dark .tag.is-medium:not(body), html.theme--documenter-dark .content kbd.is-medium:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 15px; } + html.theme--documenter-dark .tag.is-large:not(body), html.theme--documenter-dark .content kbd.is-large:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag.is-delete:not(body), html.theme--documenter-dark .content kbd.is-delete:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + html.theme--documenter-dark .tag.is-delete:not(body):hover, html.theme--documenter-dark .content kbd.is-delete:not(body):hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, html.theme--documenter-dark .tag.is-delete:not(body):focus, html.theme--documenter-dark .content kbd.is-delete:not(body):focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #1d2122; } + html.theme--documenter-dark .tag.is-delete:not(body):active, html.theme--documenter-dark .content kbd.is-delete:not(body):active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #111414; } + html.theme--documenter-dark .tag.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:not(body), html.theme--documenter-dark .content kbd.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, html.theme--documenter-dark .content .title kbd, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, + html.theme--documenter-dark .subtitle .tag, + html.theme--documenter-dark .subtitle .content kbd, + html.theme--documenter-dark .content .subtitle kbd, + html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + html.theme--documenter-dark .title { + color: #fff; + font-size: 2rem; + font-weight: 500; + line-height: 1.125; } + html.theme--documenter-dark .title strong { + color: inherit; + font-weight: inherit; } + html.theme--documenter-dark .title + .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 .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #1f2424; + border-color: #5e6d6f; + border-radius: 0.4em; + color: #dbdee0; } + html.theme--documenter-dark .select select::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .select select.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #8c9b9d; } + html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + html.theme--documenter-dark .select select[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + html.theme--documenter-dark .textarea[readonly], html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + html.theme--documenter-dark .is-white.textarea, html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.is-active.textarea, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .is-black.textarea, html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.is-active.textarea, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .is-light.textarea, html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: #ecf0f1; } + html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.is-active.textarea, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea, html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .content kbd.input { + border-color: #282f2f; } + html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-focused, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink { + border-color: #375a7f; } + html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .is-link.textarea, html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #1abc9c; } + html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.is-active.textarea, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .is-info.textarea, html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #024c7d; } + html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.is-active.textarea, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .is-success.textarea, html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #008438; } + html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.is-active.textarea, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .is-warning.textarea, html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ad8100; } + html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.is-active.textarea, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .is-danger.textarea, html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #9e1b0d; } + html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.is-active.textarea, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .is-small.textarea, html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .is-medium.textarea, html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .is-large.textarea, html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .is-fullwidth.textarea, html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + html.theme--documenter-dark .is-inline.textarea, html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 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 .radio, html.theme--documenter-dark .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + html.theme--documenter-dark .radio input, html.theme--documenter-dark .checkbox input { + cursor: pointer; } + html.theme--documenter-dark .radio:hover, html.theme--documenter-dark .checkbox:hover { + color: #8c9b9d; } + html.theme--documenter-dark .radio[disabled], html.theme--documenter-dark .checkbox[disabled], fieldset[disabled] html.theme--documenter-dark .radio, fieldset[disabled] html.theme--documenter-dark .checkbox { + 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.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.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.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]), html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + html.theme--documenter-dark .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.has-addons.has-addons-centered { + justify-content: center; } + html.theme--documenter-dark .field.has-addons.has-addons-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.is-grouped > .control { + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + 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 1em; + 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: 1.25em 1.5em; } + 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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .tile.is-2 { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .tile.is-3 { + flex: none; + width: 25%; } + html.theme--documenter-dark .tile.is-4 { + flex: none; + width: 33.3333333333%; } + html.theme--documenter-dark .tile.is-5 { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .tile.is-6 { + flex: none; + width: 50%; } + html.theme--documenter-dark .tile.is-7 { + flex: none; + width: 58.3333333333%; } + html.theme--documenter-dark .tile.is-8 { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .tile.is-9 { + flex: none; + width: 75%; } + html.theme--documenter-dark .tile.is-10 { + flex: none; + width: 83.3333333333%; } + html.theme--documenter-dark .tile.is-11 { + flex: none; + width: 91.6666666667%; } + 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, #e8e3e4 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, #e8e3e4 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 .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: #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 .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } + html.theme--documenter-dark .hero.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-link strong { + color: inherit; } + html.theme--documenter-dark .hero.is-link .title { + color: #fff; } + html.theme--documenter-dark .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-link .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-link .navbar-menu { + background-color: #1abc9c; } } + html.theme--documenter-dark .hero.is-link .navbar-item, + html.theme--documenter-dark .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-link .navbar-link:hover, + html.theme--documenter-dark .hero.is-link .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-link .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs li.is-active a { + 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 .content kbd, html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + 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 pre { + position: relative; + overflow: hidden; } + html.theme--documenter-dark pre code, html.theme--documenter-dark pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + html.theme--documenter-dark pre code:first-of-type, html.theme--documenter-dark pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + html.theme--documenter-dark pre code:last-of-type, html.theme--documenter-dark pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + html.theme--documenter-dark pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #fff; + cursor: pointer; + text-align: center; } + html.theme--documenter-dark pre .copy-button:focus, html.theme--documenter-dark pre .copy-button:hover { + opacity: 1; + background: rgba(255, 255, 255, 0.1); + color: #1abc9c; } + html.theme--documenter-dark pre .copy-button.success { + color: #259a12; + opacity: 1; } + html.theme--documenter-dark pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + html.theme--documenter-dark pre:hover .copy-button { + opacity: 1; } + html.theme--documenter-dark .admonition { + background-color: #282f2f; + border-style: solid; + border-width: 1px; + border-color: #5e6d6f; + border-radius: 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.5rem 0.75rem; + position: relative; } + html.theme--documenter-dark .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + html.theme--documenter-dark .admonition-body { + color: #fff; + padding: 0.5rem 0.75rem; } + html.theme--documenter-dark .admonition-body pre { + background-color: #282f2f; } + html.theme--documenter-dark .admonition-body code { + background-color: rgba(255, 255, 255, 0.05); } + html.theme--documenter-dark .docstring { + margin-bottom: 1em; + background-color: 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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > section:last-child { + border-bottom: none; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + html.theme--documenter-dark .documenter-example-output { + background-color: #1f2424; } + html.theme--documenter-dark .outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #282f2f; + border-bottom: 3px solid #9e1b0d; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + html.theme--documenter-dark .outdated-warning-overlay a { + color: #1abc9c; } + html.theme--documenter-dark .outdated-warning-overlay a:hover { + color: #1dd2af; } + html.theme--documenter-dark .content pre { + border: 1px solid #5e6d6f; } + html.theme--documenter-dark .content code { + font-weight: inherit; } + html.theme--documenter-dark .content a code { + color: #1abc9c; } + html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code { + color: #f2f2f2; } + html.theme--documenter-dark .content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child { + margin-top: 0; } + html.theme--documenter-dark pre, html.theme--documenter-dark code { + font-variant-ligatures: no-contextual; } + html.theme--documenter-dark .breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover { + color: #f2f2f2; } + html.theme--documenter-dark .hljs { + background: initial !important; } + html.theme--documenter-dark .katex .katex-mathml { + top: 0; + right: 0; } + html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display { + margin: 0.5em 0 !important; } + html.theme--documenter-dark html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + html.theme--documenter-dark li.no-marker { + list-style: none; } + html.theme--documenter-dark #documenter .docs-main > article { + overflow-wrap: break-word; } + html.theme--documenter-dark #documenter .docs-main > article .math-container { + overflow-x: auto; + overflow-y: hidden; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main { + width: 100%; } + html.theme--documenter-dark #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + background-color: #1f2424; + border-bottom: 1px solid #5e6d6f; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-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-package-name a, html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover { + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #5e6d6f; + display: none; + padding: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #5e6d6f; + padding-bottom: 1.5rem; + /* 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 .ansi span.sgr1 { + font-weight: bolder; } + html.theme--documenter-dark .ansi span.sgr2 { + font-weight: lighter; } + html.theme--documenter-dark .ansi span.sgr3 { + font-style: italic; } + html.theme--documenter-dark .ansi span.sgr4 { + text-decoration: underline; } + html.theme--documenter-dark .ansi span.sgr7 { + color: #1f2424; + background-color: #fff; } + html.theme--documenter-dark .ansi span.sgr8 { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr8 span { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr9 { + text-decoration: line-through; } + html.theme--documenter-dark .ansi span.sgr30 { + color: #242424; } + html.theme--documenter-dark .ansi span.sgr31 { + color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr32 { + color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr33 { + color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr34 { + color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr35 { + color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr36 { + color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr37 { + color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr40 { + background-color: #242424; } + html.theme--documenter-dark .ansi span.sgr41 { + background-color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr42 { + background-color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr43 { + background-color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr44 { + background-color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr45 { + background-color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr46 { + background-color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr47 { + background-color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr90 { + color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr91 { + color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr92 { + color: #79d462; } + html.theme--documenter-dark .ansi span.sgr93 { + color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr94 { + color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr95 { + color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr96 { + color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr97 { + color: #ecf0f1; } + html.theme--documenter-dark .ansi span.sgr100 { + background-color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr101 { + background-color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr102 { + background-color: #79d462; } + html.theme--documenter-dark .ansi span.sgr103 { + background-color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr104 { + background-color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr105 { + background-color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr106 { + background-color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr107 { + background-color: #ecf0f1; } + html.theme--documenter-dark code.language-julia-repl > span.hljs-meta { + color: #4fb43a; + font-weight: bolder; } + html.theme--documenter-dark .hljs { + background: #2b2b2b; + color: #f8f8f2; } + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-quote { + color: #d4d0ab; } + html.theme--documenter-dark .hljs-variable, + html.theme--documenter-dark .hljs-template-variable, + html.theme--documenter-dark .hljs-tag, + html.theme--documenter-dark .hljs-name, + html.theme--documenter-dark .hljs-selector-id, + html.theme--documenter-dark .hljs-selector-class, + html.theme--documenter-dark .hljs-regexp, + html.theme--documenter-dark .hljs-deletion { + color: #ffa07a; } + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-link { + color: #f5ab35; } + html.theme--documenter-dark .hljs-attribute { + color: #ffd700; } + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-addition { + color: #abe338; } + html.theme--documenter-dark .hljs-title, + html.theme--documenter-dark .hljs-section { + color: #00e0e0; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + color: #dcc6e0; } + html.theme--documenter-dark .hljs-emphasis { + font-style: italic; } + html.theme--documenter-dark .hljs-strong { + font-weight: bold; } + @media screen and (-ms-high-contrast: active) { + html.theme--documenter-dark .hljs-addition, + html.theme--documenter-dark .hljs-attribute, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-link, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-quote { + color: highlight; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + font-weight: bold; } } + html.theme--documenter-dark .hljs-subst { + color: #f8f8f2; } diff --git a/previews/PR4/assets/themes/documenter-light.css b/previews/PR4/assets/themes/documenter-light.css new file mode 100644 index 0000000..9595d5b --- /dev/null +++ b/previews/PR4/assets/themes/documenter-light.css @@ -0,0 +1,7738 @@ +@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); } } + +.tabs, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .breadcrumb, .file, .button, .is-unselectable, .modal-close, .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.navbar-link:not(.is-arrowless)::after, .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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; } + +.admonition:not(:last-child), .tabs:not(:last-child), .message:not(:last-child), .list:not(:last-child), .level:not(:last-child), .breadcrumb:not(:last-child), .highlight:not(:last-child), .block:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .table-container:not(:last-child), .table:not(:last-child), .progress:not(:last-child), .notification:not(:last-child), .content:not(:last-child), .box:not(:last-child) { + margin-bottom: 1.5rem; } + +.modal-close, .delete { + -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; } + .modal-close::before, .delete::before, .modal-close::after, .delete::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .modal-close::before, .delete::before { + height: 2px; + width: 50%; } + .modal-close::after, .delete::after { + height: 50%; + width: 2px; } + .modal-close:hover, .delete:hover, .modal-close:focus, .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + .modal-close:active, .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close, .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.modal-close, .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.modal-close, .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.control.is-loading::after, .select.is-loading::after, .loader, .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.hero-video, .modal-background, .modal, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, +.image.is-square .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +.image.is-1by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +.image.is-5by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +.image.is-4by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +.image.is-3by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +.image.is-5by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +.image.is-16by9 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +.image.is-2by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +.image.is-3by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +.image.is-4by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +.image.is-3by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +.image.is-2by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +.image.is-3by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +.image.is-9by16 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +.image.is-1by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +.image.is-1by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .file-cta, +.file-name, .select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input, .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.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; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .file-cta:focus, + .file-name:focus, .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .button:focus, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .is-focused.file-cta, + .is-focused.file-name, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.button, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .file-cta:active, + .file-name:active, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .button:active, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis, .is-active.file-cta, + .is-active.file-name, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.button { + outline: none; } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled], .file-cta[disabled], + .file-name[disabled], .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .button[disabled], fieldset[disabled] .pagination-previous, + fieldset[disabled] .pagination-next, + fieldset[disabled] .pagination-link, + fieldset[disabled] .pagination-ellipsis, fieldset[disabled] .file-cta, + fieldset[disabled] .file-name, fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + +body { + color: #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: #1081cb !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: #6b6b6b !important; } + +.has-background-grey { + background-color: #6b6b6b !important; } + +.has-text-grey-light { + color: #b5b5b5 !important; } + +.has-background-grey-light { + background-color: #b5b5b5 !important; } + +.has-text-grey-lighter { + color: #dbdbdb !important; } + +.has-background-grey-lighter { + background-color: #dbdbdb !important; } + +.has-text-white-ter { + color: 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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: #3c5dcd; + color: #363636; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #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: #1497ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .button.is-info[disabled], fieldset[disabled] .button.is-info { + background-color: #209cee; + border-color: 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: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning[disabled], fieldset[disabled] .button.is-warning { + background-color: #ffdd57; + border-color: 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: #6b6b6b; + 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #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 .content kbd, .content .tags kbd, .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 1rem; } + .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag, .tags.is-centered .content kbd, .content .tags.is-centered kbd, .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + .tags.has-addons .tag, .tags.has-addons .content kbd, .content .tags.has-addons kbd, .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + +.tag:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink: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, .content kbd:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag.is-white:not(body), .content kbd.is-white:not(body), .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + .tag.is-black:not(body), .content kbd.is-black:not(body), .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + .tag.is-light:not(body), .content kbd.is-light:not(body), .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: whitesmoke; + color: #363636; } + .tag.is-dark:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink.is-dark:not(body), .content .docstring > section > kbd:not(body) { + background-color: #363636; + color: whitesmoke; } + .tag.is-primary:not(body), .content kbd.is-primary:not(body), .docstring > section > a.docs-sourcelink:not(body) { + background-color: #4eb5de; + color: #fff; } + .tag.is-link:not(body), .content kbd.is-link:not(body), .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #2e63b8; + color: #fff; } + .tag.is-info:not(body), .content kbd.is-info:not(body), .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #209cee; + color: #fff; } + .tag.is-success:not(body), .content kbd.is-success:not(body), .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #22c35b; + color: #fff; } + .tag.is-warning:not(body), .content kbd.is-warning:not(body), .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .tag.is-danger:not(body), .content kbd.is-danger:not(body), .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #da0b00; + color: #fff; } + .tag.is-normal:not(body), .content kbd.is-normal:not(body), .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.75rem; } + .tag.is-medium:not(body), .content kbd.is-medium:not(body), .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 1rem; } + .tag.is-large:not(body), .content kbd.is-large:not(body), .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag.is-delete:not(body), .content kbd.is-delete:not(body), .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + .tag.is-delete:not(body):hover, .content kbd.is-delete:not(body):hover, .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, .tag.is-delete:not(body):focus, .content kbd.is-delete:not(body):focus, .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #e8e8e8; } + .tag.is-delete:not(body):active, .content kbd.is-delete:not(body):active, .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #dbdbdb; } + .tag.is-rounded:not(body), #documenter .docs-sidebar form.docs-search > input:not(body), .content kbd.is-rounded:not(body), #documenter .docs-sidebar .content form.docs-search > input:not(body), .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, .content .title kbd, .title .docstring > section > a.docs-sourcelink, + .subtitle .tag, + .subtitle .content kbd, + .content .subtitle kbd, + .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + +.title { + color: #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; } + +.select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input { + background-color: white; + border-color: #dbdbdb; + border-radius: 4px; + color: #363636; } + .select select::-moz-placeholder, .textarea::-moz-placeholder, .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-moz-placeholder, .textarea:-moz-placeholder, .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-ms-input-placeholder, .textarea:-ms-input-placeholder, .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:hover, .textarea:hover, .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .select select.is-hovered, .is-hovered.textarea, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #b5b5b5; } + .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #2e63b8; + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #6b6b6b; } + .select select[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] .select select::-moz-placeholder, .select fieldset[disabled] select::-moz-placeholder, fieldset[disabled] .textarea::-moz-placeholder, fieldset[disabled] .input::-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] .select select::-webkit-input-placeholder, .select fieldset[disabled] select::-webkit-input-placeholder, fieldset[disabled] .textarea::-webkit-input-placeholder, fieldset[disabled] .input::-webkit-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] .select select:-moz-placeholder, .select fieldset[disabled] select:-moz-placeholder, fieldset[disabled] .textarea:-moz-placeholder, fieldset[disabled] .input:-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] .select select:-ms-input-placeholder, .select fieldset[disabled] select:-ms-input-placeholder, fieldset[disabled] .textarea:-ms-input-placeholder, fieldset[disabled] .input:-ms-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + +.textarea, .input, #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .textarea[readonly], .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + .is-white.textarea, .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + .is-white.textarea:focus, .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.is-focused.textarea, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-white.textarea:active, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.is-active.textarea, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .is-black.textarea, .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + .is-black.textarea:focus, .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.is-focused.textarea, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-black.textarea:active, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.is-active.textarea, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .is-light.textarea, .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: whitesmoke; } + .is-light.textarea:focus, .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.is-focused.textarea, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-light.textarea:active, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.is-active.textarea, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .is-dark.textarea, .content kbd.textarea, .is-dark.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .content kbd.input { + border-color: #363636; } + .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .content kbd.input:focus, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .content kbd.is-focused.input, #documenter .docs-sidebar .content form.docs-search > input.is-focused, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .content kbd.input:active, .is-dark.is-active.textarea, .content kbd.is-active.textarea, .is-dark.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .content kbd.is-active.input, #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink, .is-primary.input, #documenter .docs-sidebar form.docs-search > input.is-primary, .docstring > section > a.input.docs-sourcelink { + border-color: #4eb5de; } + .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.input:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .docstring > section > a.input.docs-sourcelink:focus, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .docstring > section > a.is-focused.input.docs-sourcelink, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.input:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .docstring > section > a.input.docs-sourcelink:active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink, .is-primary.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .is-link.textarea, .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #2e63b8; } + .is-link.textarea:focus, .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.is-focused.textarea, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-link.textarea:active, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.is-active.textarea, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .is-info.textarea, .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #209cee; } + .is-info.textarea:focus, .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.is-focused.textarea, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-info.textarea:active, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.is-active.textarea, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .is-success.textarea, .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #22c35b; } + .is-success.textarea:focus, .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.is-focused.textarea, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-success.textarea:active, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.is-active.textarea, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .is-warning.textarea, .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ffdd57; } + .is-warning.textarea:focus, .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.is-focused.textarea, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-warning.textarea:active, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.is-active.textarea, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .is-danger.textarea, .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #da0b00; } + .is-danger.textarea:focus, .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.is-focused.textarea, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-danger.textarea:active, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.is-active.textarea, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .is-small.textarea, .is-small.input, #documenter .docs-sidebar form.docs-search > input { + border-radius: 2px; + font-size: 0.75rem; } + .is-medium.textarea, .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + .is-large.textarea, .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + .is-fullwidth.textarea, .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + .is-inline.textarea, .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + +.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { + border-radius: 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; } + +.radio, .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .radio input, .checkbox input { + cursor: pointer; } + .radio:hover, .checkbox:hover { + color: #363636; } + .radio[disabled], .checkbox[disabled], fieldset[disabled] .radio, fieldset[disabled] .checkbox { + color: #6b6b6b; + 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: #1190e3; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #22c35b; } + .select.is-success select { + border-color: #22c35b; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #1ead51; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #ffdd57; } + .select.is-warning select { + border-color: #ffdd57; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83e; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #da0b00; } + .select.is-danger select { + border-color: #da0b00; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #c10a00; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 2px; + font-size: 0.75rem; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: #6b6b6b; } + .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.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: #1497ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-danger .file-cta { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { + font-size: 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.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.is-hovered:not([disabled]), + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + .field.has-addons .control .input.is-hovered:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button.is-focused:not([disabled]), .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button.is-active:not([disabled]), + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + .field.has-addons .control .input.is-focused:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + .field.has-addons .control .input.is-active:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select.is-focused:not([disabled]), + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button.is-focused:not([disabled]):hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button.is-active:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + .field.has-addons .control .input.is-focused:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + .field.has-addons .control .input.is-active:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select.is-focused:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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: #6b6b6b; } + .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + +.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: #6b6b6b; + 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: #12537d; } + .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: #3c3108; } + .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 1em; + 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: 1.25em 1.5em; } + .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: #1190e3; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:focus, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:focus, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:focus, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #22c35b; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:focus, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:focus, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:focus, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:focus, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #22c35b; + color: #fff; } } + .navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:focus, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-burger { + color: rgba(0, 0, 0, 0.7); } + @media screen and (min-width: 1056px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:focus, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:focus, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:focus, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } } + .navbar.is-danger { + background-color: #da0b00; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:focus, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:focus, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:focus, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:focus, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #da0b00; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 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: #3c5dcd; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #6b6b6b; + 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: #6b6b6b; + 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.3333333333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .tile.is-2 { + flex: none; + width: 16.6666666667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.3333333333%; } + .tile.is-5 { + flex: none; + width: 41.6666666667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.3333333333%; } + .tile.is-8 { + flex: none; + width: 66.6666666667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.3333333333%; } + .tile.is-11 { + flex: none; + width: 91.6666666667%; } + .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, #e8e3e4 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e8e3e4 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, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: 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, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #4eb5de; } + .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } + .hero.is-link { + background-color: #2e63b8; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-link .navbar-menu { + background-color: #2e63b8; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2e63b8; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #22c35b; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-success .navbar-menu { + background-color: #22c35b; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #22c35b; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } + .hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); } + @media screen and (max-width: 1055px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } } + .hero.is-danger { + background-color: #da0b00; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-danger .navbar-menu { + background-color: #da0b00; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + 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; } + +pre { + position: relative; + overflow: hidden; } + pre code, pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + pre code:first-of-type, pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + pre code:last-of-type, pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #222222; + cursor: pointer; + text-align: center; } + pre .copy-button:focus, pre .copy-button:hover { + opacity: 1; + background: rgba(34, 34, 34, 0.1); + color: #2e63b8; } + pre .copy-button.success { + color: #259a12; + opacity: 1; } + pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + pre:hover .copy-button { + opacity: 1; } + +.admonition { + background-color: #b5b5b5; + border-style: solid; + border-width: 1px; + border-color: #363636; + border-radius: 4px; + font-size: 1rem; } + .admonition strong { + color: currentColor; } + .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 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: #def0fc; + border-color: #209cee; } + .admonition.is-info > .admonition-header { + background-color: #209cee; + color: #fff; } + .admonition.is-info > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-success { + background-color: #bdf4d1; + border-color: #22c35b; } + .admonition.is-success > .admonition-header { + background-color: #22c35b; + color: #fff; } + .admonition.is-success > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning { + background-color: #fff3c5; + border-color: #ffdd57; } + .admonition.is-warning > .admonition-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-danger { + background-color: #ffaba7; + border-color: #da0b00; } + .admonition.is-danger > .admonition-header { + background-color: #da0b00; + color: #fff; } + .admonition.is-danger > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-compat { + background-color: #bdeff5; + border-color: #1db5c9; } + .admonition.is-compat > .admonition-header { + background-color: #1db5c9; + color: #fff; } + .admonition.is-compat > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + +.admonition-header { + color: #fff; + background-color: #363636; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.5rem 0.75rem; + position: relative; } + .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + +.admonition-body { + color: #222222; + padding: 0.5rem 0.75rem; } + .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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #dbdbdb; } + .docstring > section:last-child { + border-bottom: none; } + .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + +.documenter-example-output { + background-color: white; } + +.outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #ffaba7; + color: rgba(0, 0, 0, 0.7); + border-bottom: 3px solid #da0b00; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + .outdated-warning-overlay a { + color: #2e63b8; } + .outdated-warning-overlay a:hover { + color: #363636; } + +.content pre { + border: 1px solid #dbdbdb; } + +.content code { + font-weight: inherit; } + +.content a code { + color: #2e63b8; } + +.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { + color: #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; } + +pre, code { + font-variant-ligatures: no-contextual; } + +.breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { + color: #222222; } + +.hljs { + background: initial !important; } + +.katex .katex-mathml { + top: 0; + right: 0; } + +.katex-display, mjx-container, .MathJax_Display { + margin: 0.5em 0 !important; } + +html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + +li.no-marker { + list-style: none; } + +/* 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; + overflow-y: hidden; } + +@media screen and (min-width: 1056px) { + #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + +@media screen and (max-width: 1055px) { + #documenter .docs-main { + width: 100%; } + #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + #documenter .docs-main > header, #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + +#documenter .docs-main header.docs-navbar { + background-color: 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-package-name a, #documenter .docs-sidebar .docs-package-name a:hover { + color: #0a0a0a; } + #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #dbdbdb; + display: none; + padding: 0.5rem; } + #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #dbdbdb; + padding-bottom: 1.5rem; + /* 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; } + +.ansi span.sgr1 { + font-weight: bolder; } + +.ansi span.sgr2 { + font-weight: lighter; } + +.ansi span.sgr3 { + font-style: italic; } + +.ansi span.sgr4 { + text-decoration: underline; } + +.ansi span.sgr7 { + color: white; + background-color: #222222; } + +.ansi span.sgr8 { + color: transparent; } + .ansi span.sgr8 span { + color: transparent; } + +.ansi span.sgr9 { + text-decoration: line-through; } + +.ansi span.sgr30 { + color: #242424; } + +.ansi span.sgr31 { + color: #a7201f; } + +.ansi span.sgr32 { + color: #066f00; } + +.ansi span.sgr33 { + color: #856b00; } + +.ansi span.sgr34 { + color: #2149b0; } + +.ansi span.sgr35 { + color: #7d4498; } + +.ansi span.sgr36 { + color: #007989; } + +.ansi span.sgr37 { + color: gray; } + +.ansi span.sgr40 { + background-color: #242424; } + +.ansi span.sgr41 { + background-color: #a7201f; } + +.ansi span.sgr42 { + background-color: #066f00; } + +.ansi span.sgr43 { + background-color: #856b00; } + +.ansi span.sgr44 { + background-color: #2149b0; } + +.ansi span.sgr45 { + background-color: #7d4498; } + +.ansi span.sgr46 { + background-color: #007989; } + +.ansi span.sgr47 { + background-color: gray; } + +.ansi span.sgr90 { + color: #616161; } + +.ansi span.sgr91 { + color: #cb3c33; } + +.ansi span.sgr92 { + color: #0e8300; } + +.ansi span.sgr93 { + color: #a98800; } + +.ansi span.sgr94 { + color: #3c5dcd; } + +.ansi span.sgr95 { + color: #9256af; } + +.ansi span.sgr96 { + color: #008fa3; } + +.ansi span.sgr97 { + color: whitesmoke; } + +.ansi span.sgr100 { + background-color: #616161; } + +.ansi span.sgr101 { + background-color: #cb3c33; } + +.ansi span.sgr102 { + background-color: #0e8300; } + +.ansi span.sgr103 { + background-color: #a98800; } + +.ansi span.sgr104 { + background-color: #3c5dcd; } + +.ansi span.sgr105 { + background-color: #9256af; } + +.ansi span.sgr106 { + background-color: #008fa3; } + +.ansi span.sgr107 { + background-color: whitesmoke; } + +code.language-julia-repl > span.hljs-meta { + color: #066f00; + font-weight: bolder; } + +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/ +/* +This is left on purpose making default.css the single file that can be lifted +as-is from the repository directly without the need for a build step + +Typically this "required" baseline CSS is added by `makestuff.js` during build. +*/ +pre code.hljs { + display: block; + overflow-x: auto; } + +code.hljs { + padding: 3px 5px; } + +/* end baseline CSS */ +.hljs { + background: #F0F0F0; + color: #444; } + +/* Base color: saturation 0; */ +.hljs-subst { + /* default */ } + +/* purposely ignored */ +.hljs-comment { + color: #888888; } + +.hljs-tag, +.hljs-punctuation { + color: #444a; } + +.hljs-tag .hljs-name, +.hljs-tag .hljs-attr { + color: #444; } + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta .hljs-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; } + +/* 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-operator, +.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 .hljs-string { + color: #4d99bf; } + +/* Misc effects */ +.hljs-emphasis { + font-style: italic; } + +.hljs-strong { + font-weight: bold; } diff --git a/previews/PR4/assets/themeswap.js b/previews/PR4/assets/themeswap.js new file mode 100644 index 0000000..c58e993 --- /dev/null +++ b/previews/PR4/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/PR4/assets/warner.js b/previews/PR4/assets/warner.js new file mode 100644 index 0000000..5531c88 --- /dev/null +++ b/previews/PR4/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
          Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/previews/PR4/contributing/index.html b/previews/PR4/contributing/index.html new file mode 100644 index 0000000..66c7c05 --- /dev/null +++ b/previews/PR4/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

          Contributing to Manopt.jl

          First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

          The following is a set of guidelines to ManoptExamples.jl.

          Table of Contents

          I just have a question

          The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

          How can I file an issue?

          If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

          How can I contribute?

          Add an objective

          The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

          If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

          If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

          • cost functions are always of the form cost_ and a fitting name
          • gradient functions are always of the the gradient_ and a fitting name, followed by an !

          for in-place gradients and by !! if it is a struct that can provide both.

          It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

          Add an example

          If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

          Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

          Code style

          We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

          We also follow a few internal conventions:

          • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
          • within a file the structs should come first and functions second. The only exception are constructors for the structs
          • within both blocks an alphabetical order is preferable.
          • The above implies that the mutating variant of a function follows the non-mutating variant.
          • There should be no dangling = signs.
          • Always add a newline between things of different types (struct/method/const).
          • Always add a newline between methods for different functions (including in-place/non-mutating variants).
          • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
          • All import/using/include should be in the main module file.
          • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
          • the Quarto Markdown files are excluded from this formatting.
          diff --git a/previews/PR4/examples/Riemannian-mean/index.html b/previews/PR4/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..6f777b5 --- /dev/null +++ b/previews/PR4/examples/Riemannian-mean/index.html @@ -0,0 +1,32 @@ + +Riemannian Mean · ManoptExamples.jl

          The Riemannian Center of Mass (mean)

          Ronny Bergmann 7/2/23

          Preliminary Notes

          Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

          For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.

          The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

          There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

          For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

          using Pkg;
          +Pkg.activate("."); # use the example environment,

          Loading packages and defining data

          Loading the necessary packages and defining a data set on a manifold

          using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
          +Random.seed!(42)
          +M = Sphere(2)
          +n = 100
          +σ = π / 8
          +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
          +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

          Variant 1: Using the functions

          We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.

          f = ManoptExamples.RiemannianMeanCost(data)
          +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

          Then we can for example directly call a gradient descent as

          x1 = gradient_descent(M, f, grad_f, first(data))
          3-element Vector{Float64}:
          + 0.6868392794764022
          + 0.006531600682543096
          + 0.726779982085954

          Variant 2: Using the objective

          A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

          rmo = ManoptExamples.Riemannian_mean_objective(
          +    M, data,
          +    evaluation=InplaceEvaluation(),
          +)

          Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

          rmp = DefaultManoptProblem(M, rmo)

          This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

          s1 = GradientDescentState(M, copy(M, first(data)))
          +solve!(rmp, s1)
          +x2 = get_solver_result(s1)
          3-element Vector{Float64}:
          + 0.6868395649618767
          + 0.006531393870513675
          + 0.7267797141480264

          but we can easily use a conjugate gradient instead

          s2 = ConjugateGradientDescentState(
          +    M,
          +    copy(M, first(data)),
          +    StopAfterIteration(100),
          +    ArmijoLinesearch(M),
          +    FletcherReevesCoefficient(),
          +)
          +solve!(rmp, s2)
          +x3 = get_solver_result(s2)
          3-element Vector{Float64}:
          + 0.6868393265070905
          + 0.006531566700408201
          + 0.7267799379452656
          diff --git a/previews/PR4/examples/index.html b/previews/PR4/examples/index.html new file mode 100644 index 0000000..15e56df --- /dev/null +++ b/previews/PR4/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

          LIst of Examples

          Nameprovides
          Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective 📚

          Symbols:

          • A Allocating variant
          • I In-place variant
          • 📚 link to documented functions in the documentation
          diff --git a/previews/PR4/index.html b/previews/PR4/index.html new file mode 100644 index 0000000..94a49f6 --- /dev/null +++ b/previews/PR4/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

          ManoptExample.jl

          This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

          Each example usually consists of

          • a cost function and additional objects, like the gradient or proximal maps, see objectives
          • an example explaining how to use these, see examples

          Helping functions that are used in one or more examples can be found in the section of functions in the menu.

          diff --git a/previews/PR4/objectives/index.html b/previews/PR4/objectives/index.html new file mode 100644 index 0000000..6b99a9d --- /dev/null +++ b/previews/PR4/objectives/index.html @@ -0,0 +1,10 @@ + +Objectives · ManoptExamples.jl

          List of Examples

          Riemannian Mean

          See Riemannian mean example to see these in use.

          ManoptExamples.RiemannianMeanCostType
          RiemannianMeanCost{P} where P

          A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

          For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

          \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

          where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

          Constructor

          RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

          Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

          See also

          RiemannianMeanGradient!!, Riemannian_mean_objective

          source
          ManoptExamples.RiemannianMeanGradient!!Type
          RiemannianMeanGradient!!{P} where P

          A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

          For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

          \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

          where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

          This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

          Constructors

          RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

          Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

          RiemannianMeanGradient!!(
          +    M::AbstractManifold,
          +    data::AbstractVector{P};
          +    initial_vector::T=zero_vector(M, first(data)),
          +) where {P,T}

          Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

          See also

          RiemannianMeanCost, Riemannian_mean_objective

          source
          ManoptExamples.Riemannian_mean_objectiveFunction
          Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
          +Riemannian_mean_objective(M, data;
          +initial_vector=zero_vector(M, first(data)),
          +evaluation=AllocatingEvaluton()
          +)

          Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

          See also

          RiemannianMeanCost, RiemannianMeanGradient!!

          Note

          The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

          source
          diff --git a/previews/PR4/search/index.html b/previews/PR4/search/index.html new file mode 100644 index 0000000..f8bbcc8 --- /dev/null +++ b/previews/PR4/search/index.html @@ -0,0 +1,2 @@ + +Search · ManoptExamples.jl

          Loading search...

            diff --git a/previews/PR4/search_index.js b/previews/PR4/search_index.js new file mode 100644 index 0000000..f857383 --- /dev/null +++ b/previews/PR4/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 7/2/23","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794764022\n 0.006531600682543096\n 0.726779982085954","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868395649618767\n 0.006531393870513675\n 0.7267797141480264","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393265070905\n 0.006531566700408201\n 0.7267799379452656","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/ManoptExamples.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"objectives/#List-of-Examples","page":"Objectives","title":"List of Examples","text":"","category":"section"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"function"},{"location":"examples/#LIst-of-Examples","page":"Overview","title":"LIst of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides\nRiemannian Mean f, operatornamegradf (A/I), objective 📚","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"#ManoptExample.jl","page":"Home","title":"ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/previews/PR4/siteinfo.js b/previews/PR4/siteinfo.js new file mode 100644 index 0000000..7310be9 --- /dev/null +++ b/previews/PR4/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "previews/PR4"; diff --git a/previews/PR6/assets/documenter.js b/previews/PR6/assets/documenter.js new file mode 100644 index 0000000..4248476 --- /dev/null +++ b/previews/PR6/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +window.MathJax = { + "tex": { + "packages": [ + "base", + "ams", + "autoload" + ], + "inlineMath": [ + [ + "$", + "$" + ], + [ + "\\(", + "\\)" + ] + ], + "tags": "ams" + }, + "options": { + "ignoreHtmlClass": "tex2jax_ignore", + "processHtmlClass": "tex2jax_process" + } +} +; + +(function () { + var script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.js'; + script.async = true; + document.head.appendChild(script); +})(); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// 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() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/previews/PR6/assets/search.js b/previews/PR6/assets/search.js new file mode 100644 index 0000000..c133f74 --- /dev/null +++ b/previews/PR6/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/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'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + 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) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + 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/PR6/assets/themes/documenter-dark.css b/previews/PR6/assets/themes/documenter-dark.css new file mode 100644 index 0000000..0bf1af7 --- /dev/null +++ b/previews/PR6/assets/themes/documenter-dark.css @@ -0,0 +1,7702 @@ +@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 .tabs, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .file, html.theme--documenter-dark .button, .is-unselectable, html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after, html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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 .admonition:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .title:not(:last-child), +html.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .box:not(:last-child) { + margin-bottom: 1.5rem; } + +html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -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 .modal-close::before, html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::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 .modal-close::before, html.theme--documenter-dark .delete::before { + height: 2px; + width: 50%; } + html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::after { + height: 50%; + width: 2px; } + html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:focus, html.theme--documenter-dark .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + html.theme--documenter-dark .modal-close:active, html.theme--documenter-dark .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close, html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + html.theme--documenter-dark .is-medium.modal-close, html.theme--documenter-dark .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + html.theme--documenter-dark .is-large.modal-close, html.theme--documenter-dark .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +html.theme--documenter-dark .control.is-loading::after, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdee0; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +html.theme--documenter-dark .hero-video, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .modal, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, +html.theme--documenter-dark .image.is-square .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +html.theme--documenter-dark .image.is-1by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +html.theme--documenter-dark .image.is-5by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +html.theme--documenter-dark .image.is-4by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +html.theme--documenter-dark .image.is-3by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +html.theme--documenter-dark .image.is-5by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +html.theme--documenter-dark .image.is-16by9 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +html.theme--documenter-dark .image.is-2by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +html.theme--documenter-dark .image.is-3by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +html.theme--documenter-dark .image.is-4by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +html.theme--documenter-dark .image.is-3by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +html.theme--documenter-dark .image.is-2by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +html.theme--documenter-dark .image.is-3by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +html.theme--documenter-dark .image.is-9by16 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +html.theme--documenter-dark .image.is-1by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +html.theme--documenter-dark .image.is-1by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .file-cta, +html.theme--documenter-dark .file-name, html.theme--documenter-dark .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 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 .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus, + html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .file-cta:focus, + html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .button:focus, html.theme--documenter-dark .is-focused.pagination-previous, + html.theme--documenter-dark .is-focused.pagination-next, + html.theme--documenter-dark .is-focused.pagination-link, + html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .is-focused.file-cta, + html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active, + html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .file-cta:active, + html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .button:active, html.theme--documenter-dark .is-active.pagination-previous, + html.theme--documenter-dark .is-active.pagination-next, + html.theme--documenter-dark .is-active.pagination-link, + html.theme--documenter-dark .is-active.pagination-ellipsis, html.theme--documenter-dark .is-active.file-cta, + html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.button { + outline: none; } + html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled], + html.theme--documenter-dark .pagination-ellipsis[disabled], html.theme--documenter-dark .file-cta[disabled], + html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .button[disabled], fieldset[disabled] html.theme--documenter-dark .pagination-previous, html.theme--documenter-dark fieldset[disabled] .pagination-previous, + fieldset[disabled] html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark fieldset[disabled] .pagination-next, + fieldset[disabled] html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark fieldset[disabled] .pagination-link, + fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis, fieldset[disabled] html.theme--documenter-dark .file-cta, html.theme--documenter-dark fieldset[disabled] .file-cta, + fieldset[disabled] html.theme--documenter-dark .file-name, + html.theme--documenter-dark fieldset[disabled] .file-name, fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark fieldset[disabled] .select select, html.theme--documenter-dark .select fieldset[disabled] select, html.theme--documenter-dark fieldset[disabled] .textarea, html.theme--documenter-dark fieldset[disabled] .input, html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] html.theme--documenter-dark .button, html.theme--documenter-dark fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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. + */ + /*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/ + /* 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + html.theme--documenter-dark code, + html.theme--documenter-dark pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + html.theme--documenter-dark body { + color: #fff; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + html.theme--documenter-dark a { + color: #1abc9c; + cursor: pointer; + text-decoration: none; } + html.theme--documenter-dark a strong { + color: currentColor; } + html.theme--documenter-dark a:hover { + color: #1dd2af; } + html.theme--documenter-dark code { + background-color: rgba(255, 255, 255, 0.05); + color: #ececec; + font-size: 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + html.theme--documenter-dark .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + html.theme--documenter-dark .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + html.theme--documenter-dark .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + html.theme--documenter-dark .content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + html.theme--documenter-dark .content ul ul ul { + list-style-type: square; } + html.theme--documenter-dark .content dd { + margin-left: 2em; } + html.theme--documenter-dark .content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + html.theme--documenter-dark .content figure:not(:first-child) { + margin-top: 2em; } + html.theme--documenter-dark .content figure:not(:last-child) { + margin-bottom: 2em; } + html.theme--documenter-dark .content figure img { + display: inline-block; } + html.theme--documenter-dark .content figure figcaption { + font-style: italic; } + html.theme--documenter-dark .content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark .content sup, + html.theme--documenter-dark .content sub { + font-size: 75%; } + html.theme--documenter-dark .content table { + width: 100%; } + html.theme--documenter-dark .content table td, + html.theme--documenter-dark .content table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .content table th { + color: #f2f2f2; } + html.theme--documenter-dark .content table th:not([align]) { + text-align: 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 .content kbd, html.theme--documenter-dark .content .tags kbd, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 15px; } + html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + html.theme--documenter-dark .tags.is-centered { + justify-content: center; } + html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + html.theme--documenter-dark .tags.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-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 .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + align-items: center; + background-color: #282f2f; + border-radius: 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 .content kbd:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + html.theme--documenter-dark .tag.is-white:not(body), html.theme--documenter-dark .content kbd.is-white:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .tag.is-black:not(body), html.theme--documenter-dark .content kbd.is-black:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .tag.is-light:not(body), html.theme--documenter-dark .content kbd.is-light:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .tag.is-dark:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-dark:not(body), html.theme--documenter-dark .content .docstring > section > kbd:not(body) { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .tag.is-primary:not(body), html.theme--documenter-dark .content kbd.is-primary:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .tag.is-link:not(body), html.theme--documenter-dark .content kbd.is-link:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .tag.is-info:not(body), html.theme--documenter-dark .content kbd.is-info:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .tag.is-success:not(body), html.theme--documenter-dark .content kbd.is-success:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .tag.is-warning:not(body), html.theme--documenter-dark .content kbd.is-warning:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .tag.is-danger:not(body), html.theme--documenter-dark .content kbd.is-danger:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .tag.is-normal:not(body), html.theme--documenter-dark .content kbd.is-normal:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.85em; } + html.theme--documenter-dark .tag.is-medium:not(body), html.theme--documenter-dark .content kbd.is-medium:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 15px; } + html.theme--documenter-dark .tag.is-large:not(body), html.theme--documenter-dark .content kbd.is-large:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag.is-delete:not(body), html.theme--documenter-dark .content kbd.is-delete:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + html.theme--documenter-dark .tag.is-delete:not(body):hover, html.theme--documenter-dark .content kbd.is-delete:not(body):hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, html.theme--documenter-dark .tag.is-delete:not(body):focus, html.theme--documenter-dark .content kbd.is-delete:not(body):focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #1d2122; } + html.theme--documenter-dark .tag.is-delete:not(body):active, html.theme--documenter-dark .content kbd.is-delete:not(body):active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #111414; } + html.theme--documenter-dark .tag.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:not(body), html.theme--documenter-dark .content kbd.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, html.theme--documenter-dark .content .title kbd, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, + html.theme--documenter-dark .subtitle .tag, + html.theme--documenter-dark .subtitle .content kbd, + html.theme--documenter-dark .content .subtitle kbd, + html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + html.theme--documenter-dark .title { + color: #fff; + font-size: 2rem; + font-weight: 500; + line-height: 1.125; } + html.theme--documenter-dark .title strong { + color: inherit; + font-weight: inherit; } + html.theme--documenter-dark .title + .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 .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #1f2424; + border-color: #5e6d6f; + border-radius: 0.4em; + color: #dbdee0; } + html.theme--documenter-dark .select select::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .select select.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #8c9b9d; } + html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + html.theme--documenter-dark .select select[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + html.theme--documenter-dark .textarea[readonly], html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + html.theme--documenter-dark .is-white.textarea, html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.is-active.textarea, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .is-black.textarea, html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.is-active.textarea, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .is-light.textarea, html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: #ecf0f1; } + html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.is-active.textarea, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea, html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .content kbd.input { + border-color: #282f2f; } + html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-focused, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink { + border-color: #375a7f; } + html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .is-link.textarea, html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #1abc9c; } + html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.is-active.textarea, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .is-info.textarea, html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #024c7d; } + html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.is-active.textarea, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .is-success.textarea, html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #008438; } + html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.is-active.textarea, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .is-warning.textarea, html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ad8100; } + html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.is-active.textarea, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .is-danger.textarea, html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #9e1b0d; } + html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.is-active.textarea, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .is-small.textarea, html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .is-medium.textarea, html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .is-large.textarea, html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .is-fullwidth.textarea, html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + html.theme--documenter-dark .is-inline.textarea, html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 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 .radio, html.theme--documenter-dark .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + html.theme--documenter-dark .radio input, html.theme--documenter-dark .checkbox input { + cursor: pointer; } + html.theme--documenter-dark .radio:hover, html.theme--documenter-dark .checkbox:hover { + color: #8c9b9d; } + html.theme--documenter-dark .radio[disabled], html.theme--documenter-dark .checkbox[disabled], fieldset[disabled] html.theme--documenter-dark .radio, fieldset[disabled] html.theme--documenter-dark .checkbox { + 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.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.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.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]), html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + html.theme--documenter-dark .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.has-addons.has-addons-centered { + justify-content: center; } + html.theme--documenter-dark .field.has-addons.has-addons-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.is-grouped > .control { + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + 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 1em; + 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: 1.25em 1.5em; } + 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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .tile.is-2 { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .tile.is-3 { + flex: none; + width: 25%; } + html.theme--documenter-dark .tile.is-4 { + flex: none; + width: 33.3333333333%; } + html.theme--documenter-dark .tile.is-5 { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .tile.is-6 { + flex: none; + width: 50%; } + html.theme--documenter-dark .tile.is-7 { + flex: none; + width: 58.3333333333%; } + html.theme--documenter-dark .tile.is-8 { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .tile.is-9 { + flex: none; + width: 75%; } + html.theme--documenter-dark .tile.is-10 { + flex: none; + width: 83.3333333333%; } + html.theme--documenter-dark .tile.is-11 { + flex: none; + width: 91.6666666667%; } + 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, #e8e3e4 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, #e8e3e4 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 .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: #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 .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } + html.theme--documenter-dark .hero.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-link strong { + color: inherit; } + html.theme--documenter-dark .hero.is-link .title { + color: #fff; } + html.theme--documenter-dark .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-link .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-link .navbar-menu { + background-color: #1abc9c; } } + html.theme--documenter-dark .hero.is-link .navbar-item, + html.theme--documenter-dark .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-link .navbar-link:hover, + html.theme--documenter-dark .hero.is-link .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-link .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs li.is-active a { + 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 .content kbd, html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + 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 pre { + position: relative; + overflow: hidden; } + html.theme--documenter-dark pre code, html.theme--documenter-dark pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + html.theme--documenter-dark pre code:first-of-type, html.theme--documenter-dark pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + html.theme--documenter-dark pre code:last-of-type, html.theme--documenter-dark pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + html.theme--documenter-dark pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #fff; + cursor: pointer; + text-align: center; } + html.theme--documenter-dark pre .copy-button:focus, html.theme--documenter-dark pre .copy-button:hover { + opacity: 1; + background: rgba(255, 255, 255, 0.1); + color: #1abc9c; } + html.theme--documenter-dark pre .copy-button.success { + color: #259a12; + opacity: 1; } + html.theme--documenter-dark pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + html.theme--documenter-dark pre:hover .copy-button { + opacity: 1; } + html.theme--documenter-dark .admonition { + background-color: #282f2f; + border-style: solid; + border-width: 1px; + border-color: #5e6d6f; + border-radius: 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.5rem 0.75rem; + position: relative; } + html.theme--documenter-dark .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + html.theme--documenter-dark .admonition-body { + color: #fff; + padding: 0.5rem 0.75rem; } + html.theme--documenter-dark .admonition-body pre { + background-color: #282f2f; } + html.theme--documenter-dark .admonition-body code { + background-color: rgba(255, 255, 255, 0.05); } + html.theme--documenter-dark .docstring { + margin-bottom: 1em; + background-color: 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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > section:last-child { + border-bottom: none; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + html.theme--documenter-dark .documenter-example-output { + background-color: #1f2424; } + html.theme--documenter-dark .outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #282f2f; + border-bottom: 3px solid #9e1b0d; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + html.theme--documenter-dark .outdated-warning-overlay a { + color: #1abc9c; } + html.theme--documenter-dark .outdated-warning-overlay a:hover { + color: #1dd2af; } + html.theme--documenter-dark .content pre { + border: 1px solid #5e6d6f; } + html.theme--documenter-dark .content code { + font-weight: inherit; } + html.theme--documenter-dark .content a code { + color: #1abc9c; } + html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code { + color: #f2f2f2; } + html.theme--documenter-dark .content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child { + margin-top: 0; } + html.theme--documenter-dark pre, html.theme--documenter-dark code { + font-variant-ligatures: no-contextual; } + html.theme--documenter-dark .breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover { + color: #f2f2f2; } + html.theme--documenter-dark .hljs { + background: initial !important; } + html.theme--documenter-dark .katex .katex-mathml { + top: 0; + right: 0; } + html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display { + margin: 0.5em 0 !important; } + html.theme--documenter-dark html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + html.theme--documenter-dark li.no-marker { + list-style: none; } + html.theme--documenter-dark #documenter .docs-main > article { + overflow-wrap: break-word; } + html.theme--documenter-dark #documenter .docs-main > article .math-container { + overflow-x: auto; + overflow-y: hidden; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main { + width: 100%; } + html.theme--documenter-dark #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + background-color: #1f2424; + border-bottom: 1px solid #5e6d6f; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-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-package-name a, html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover { + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #5e6d6f; + display: none; + padding: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #5e6d6f; + padding-bottom: 1.5rem; + /* 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 .ansi span.sgr1 { + font-weight: bolder; } + html.theme--documenter-dark .ansi span.sgr2 { + font-weight: lighter; } + html.theme--documenter-dark .ansi span.sgr3 { + font-style: italic; } + html.theme--documenter-dark .ansi span.sgr4 { + text-decoration: underline; } + html.theme--documenter-dark .ansi span.sgr7 { + color: #1f2424; + background-color: #fff; } + html.theme--documenter-dark .ansi span.sgr8 { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr8 span { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr9 { + text-decoration: line-through; } + html.theme--documenter-dark .ansi span.sgr30 { + color: #242424; } + html.theme--documenter-dark .ansi span.sgr31 { + color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr32 { + color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr33 { + color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr34 { + color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr35 { + color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr36 { + color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr37 { + color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr40 { + background-color: #242424; } + html.theme--documenter-dark .ansi span.sgr41 { + background-color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr42 { + background-color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr43 { + background-color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr44 { + background-color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr45 { + background-color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr46 { + background-color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr47 { + background-color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr90 { + color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr91 { + color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr92 { + color: #79d462; } + html.theme--documenter-dark .ansi span.sgr93 { + color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr94 { + color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr95 { + color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr96 { + color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr97 { + color: #ecf0f1; } + html.theme--documenter-dark .ansi span.sgr100 { + background-color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr101 { + background-color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr102 { + background-color: #79d462; } + html.theme--documenter-dark .ansi span.sgr103 { + background-color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr104 { + background-color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr105 { + background-color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr106 { + background-color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr107 { + background-color: #ecf0f1; } + html.theme--documenter-dark code.language-julia-repl > span.hljs-meta { + color: #4fb43a; + font-weight: bolder; } + html.theme--documenter-dark .hljs { + background: #2b2b2b; + color: #f8f8f2; } + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-quote { + color: #d4d0ab; } + html.theme--documenter-dark .hljs-variable, + html.theme--documenter-dark .hljs-template-variable, + html.theme--documenter-dark .hljs-tag, + html.theme--documenter-dark .hljs-name, + html.theme--documenter-dark .hljs-selector-id, + html.theme--documenter-dark .hljs-selector-class, + html.theme--documenter-dark .hljs-regexp, + html.theme--documenter-dark .hljs-deletion { + color: #ffa07a; } + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-link { + color: #f5ab35; } + html.theme--documenter-dark .hljs-attribute { + color: #ffd700; } + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-addition { + color: #abe338; } + html.theme--documenter-dark .hljs-title, + html.theme--documenter-dark .hljs-section { + color: #00e0e0; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + color: #dcc6e0; } + html.theme--documenter-dark .hljs-emphasis { + font-style: italic; } + html.theme--documenter-dark .hljs-strong { + font-weight: bold; } + @media screen and (-ms-high-contrast: active) { + html.theme--documenter-dark .hljs-addition, + html.theme--documenter-dark .hljs-attribute, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-link, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-quote { + color: highlight; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + font-weight: bold; } } + html.theme--documenter-dark .hljs-subst { + color: #f8f8f2; } diff --git a/previews/PR6/assets/themes/documenter-light.css b/previews/PR6/assets/themes/documenter-light.css new file mode 100644 index 0000000..9595d5b --- /dev/null +++ b/previews/PR6/assets/themes/documenter-light.css @@ -0,0 +1,7738 @@ +@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); } } + +.tabs, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .breadcrumb, .file, .button, .is-unselectable, .modal-close, .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.navbar-link:not(.is-arrowless)::after, .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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; } + +.admonition:not(:last-child), .tabs:not(:last-child), .message:not(:last-child), .list:not(:last-child), .level:not(:last-child), .breadcrumb:not(:last-child), .highlight:not(:last-child), .block:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .table-container:not(:last-child), .table:not(:last-child), .progress:not(:last-child), .notification:not(:last-child), .content:not(:last-child), .box:not(:last-child) { + margin-bottom: 1.5rem; } + +.modal-close, .delete { + -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; } + .modal-close::before, .delete::before, .modal-close::after, .delete::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .modal-close::before, .delete::before { + height: 2px; + width: 50%; } + .modal-close::after, .delete::after { + height: 50%; + width: 2px; } + .modal-close:hover, .delete:hover, .modal-close:focus, .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + .modal-close:active, .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close, .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.modal-close, .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.modal-close, .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.control.is-loading::after, .select.is-loading::after, .loader, .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.hero-video, .modal-background, .modal, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, +.image.is-square .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +.image.is-1by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +.image.is-5by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +.image.is-4by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +.image.is-3by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +.image.is-5by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +.image.is-16by9 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +.image.is-2by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +.image.is-3by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +.image.is-4by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +.image.is-3by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +.image.is-2by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +.image.is-3by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +.image.is-9by16 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +.image.is-1by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +.image.is-1by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .file-cta, +.file-name, .select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input, .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.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; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .file-cta:focus, + .file-name:focus, .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .button:focus, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .is-focused.file-cta, + .is-focused.file-name, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.button, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .file-cta:active, + .file-name:active, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .button:active, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis, .is-active.file-cta, + .is-active.file-name, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.button { + outline: none; } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled], .file-cta[disabled], + .file-name[disabled], .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .button[disabled], fieldset[disabled] .pagination-previous, + fieldset[disabled] .pagination-next, + fieldset[disabled] .pagination-link, + fieldset[disabled] .pagination-ellipsis, fieldset[disabled] .file-cta, + fieldset[disabled] .file-name, fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + +body { + color: #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: #1081cb !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: #6b6b6b !important; } + +.has-background-grey { + background-color: #6b6b6b !important; } + +.has-text-grey-light { + color: #b5b5b5 !important; } + +.has-background-grey-light { + background-color: #b5b5b5 !important; } + +.has-text-grey-lighter { + color: #dbdbdb !important; } + +.has-background-grey-lighter { + background-color: #dbdbdb !important; } + +.has-text-white-ter { + color: 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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: #3c5dcd; + color: #363636; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #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: #1497ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .button.is-info[disabled], fieldset[disabled] .button.is-info { + background-color: #209cee; + border-color: 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: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning[disabled], fieldset[disabled] .button.is-warning { + background-color: #ffdd57; + border-color: 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: #6b6b6b; + 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #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 .content kbd, .content .tags kbd, .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 1rem; } + .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag, .tags.is-centered .content kbd, .content .tags.is-centered kbd, .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + .tags.has-addons .tag, .tags.has-addons .content kbd, .content .tags.has-addons kbd, .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + +.tag:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink: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, .content kbd:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag.is-white:not(body), .content kbd.is-white:not(body), .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + .tag.is-black:not(body), .content kbd.is-black:not(body), .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + .tag.is-light:not(body), .content kbd.is-light:not(body), .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: whitesmoke; + color: #363636; } + .tag.is-dark:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink.is-dark:not(body), .content .docstring > section > kbd:not(body) { + background-color: #363636; + color: whitesmoke; } + .tag.is-primary:not(body), .content kbd.is-primary:not(body), .docstring > section > a.docs-sourcelink:not(body) { + background-color: #4eb5de; + color: #fff; } + .tag.is-link:not(body), .content kbd.is-link:not(body), .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #2e63b8; + color: #fff; } + .tag.is-info:not(body), .content kbd.is-info:not(body), .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #209cee; + color: #fff; } + .tag.is-success:not(body), .content kbd.is-success:not(body), .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #22c35b; + color: #fff; } + .tag.is-warning:not(body), .content kbd.is-warning:not(body), .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .tag.is-danger:not(body), .content kbd.is-danger:not(body), .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #da0b00; + color: #fff; } + .tag.is-normal:not(body), .content kbd.is-normal:not(body), .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.75rem; } + .tag.is-medium:not(body), .content kbd.is-medium:not(body), .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 1rem; } + .tag.is-large:not(body), .content kbd.is-large:not(body), .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag.is-delete:not(body), .content kbd.is-delete:not(body), .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + .tag.is-delete:not(body):hover, .content kbd.is-delete:not(body):hover, .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, .tag.is-delete:not(body):focus, .content kbd.is-delete:not(body):focus, .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #e8e8e8; } + .tag.is-delete:not(body):active, .content kbd.is-delete:not(body):active, .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #dbdbdb; } + .tag.is-rounded:not(body), #documenter .docs-sidebar form.docs-search > input:not(body), .content kbd.is-rounded:not(body), #documenter .docs-sidebar .content form.docs-search > input:not(body), .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, .content .title kbd, .title .docstring > section > a.docs-sourcelink, + .subtitle .tag, + .subtitle .content kbd, + .content .subtitle kbd, + .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + +.title { + color: #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; } + +.select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input { + background-color: white; + border-color: #dbdbdb; + border-radius: 4px; + color: #363636; } + .select select::-moz-placeholder, .textarea::-moz-placeholder, .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-moz-placeholder, .textarea:-moz-placeholder, .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-ms-input-placeholder, .textarea:-ms-input-placeholder, .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:hover, .textarea:hover, .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .select select.is-hovered, .is-hovered.textarea, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #b5b5b5; } + .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #2e63b8; + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #6b6b6b; } + .select select[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] .select select::-moz-placeholder, .select fieldset[disabled] select::-moz-placeholder, fieldset[disabled] .textarea::-moz-placeholder, fieldset[disabled] .input::-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] .select select::-webkit-input-placeholder, .select fieldset[disabled] select::-webkit-input-placeholder, fieldset[disabled] .textarea::-webkit-input-placeholder, fieldset[disabled] .input::-webkit-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] .select select:-moz-placeholder, .select fieldset[disabled] select:-moz-placeholder, fieldset[disabled] .textarea:-moz-placeholder, fieldset[disabled] .input:-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] .select select:-ms-input-placeholder, .select fieldset[disabled] select:-ms-input-placeholder, fieldset[disabled] .textarea:-ms-input-placeholder, fieldset[disabled] .input:-ms-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + +.textarea, .input, #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .textarea[readonly], .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + .is-white.textarea, .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + .is-white.textarea:focus, .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.is-focused.textarea, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-white.textarea:active, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.is-active.textarea, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .is-black.textarea, .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + .is-black.textarea:focus, .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.is-focused.textarea, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-black.textarea:active, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.is-active.textarea, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .is-light.textarea, .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: whitesmoke; } + .is-light.textarea:focus, .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.is-focused.textarea, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-light.textarea:active, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.is-active.textarea, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .is-dark.textarea, .content kbd.textarea, .is-dark.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .content kbd.input { + border-color: #363636; } + .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .content kbd.input:focus, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .content kbd.is-focused.input, #documenter .docs-sidebar .content form.docs-search > input.is-focused, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .content kbd.input:active, .is-dark.is-active.textarea, .content kbd.is-active.textarea, .is-dark.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .content kbd.is-active.input, #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink, .is-primary.input, #documenter .docs-sidebar form.docs-search > input.is-primary, .docstring > section > a.input.docs-sourcelink { + border-color: #4eb5de; } + .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.input:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .docstring > section > a.input.docs-sourcelink:focus, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .docstring > section > a.is-focused.input.docs-sourcelink, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.input:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .docstring > section > a.input.docs-sourcelink:active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink, .is-primary.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .is-link.textarea, .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #2e63b8; } + .is-link.textarea:focus, .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.is-focused.textarea, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-link.textarea:active, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.is-active.textarea, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .is-info.textarea, .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #209cee; } + .is-info.textarea:focus, .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.is-focused.textarea, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-info.textarea:active, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.is-active.textarea, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .is-success.textarea, .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #22c35b; } + .is-success.textarea:focus, .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.is-focused.textarea, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-success.textarea:active, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.is-active.textarea, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .is-warning.textarea, .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ffdd57; } + .is-warning.textarea:focus, .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.is-focused.textarea, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-warning.textarea:active, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.is-active.textarea, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .is-danger.textarea, .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #da0b00; } + .is-danger.textarea:focus, .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.is-focused.textarea, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-danger.textarea:active, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.is-active.textarea, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .is-small.textarea, .is-small.input, #documenter .docs-sidebar form.docs-search > input { + border-radius: 2px; + font-size: 0.75rem; } + .is-medium.textarea, .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + .is-large.textarea, .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + .is-fullwidth.textarea, .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + .is-inline.textarea, .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + +.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { + border-radius: 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; } + +.radio, .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .radio input, .checkbox input { + cursor: pointer; } + .radio:hover, .checkbox:hover { + color: #363636; } + .radio[disabled], .checkbox[disabled], fieldset[disabled] .radio, fieldset[disabled] .checkbox { + color: #6b6b6b; + 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: #1190e3; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #22c35b; } + .select.is-success select { + border-color: #22c35b; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #1ead51; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #ffdd57; } + .select.is-warning select { + border-color: #ffdd57; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83e; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #da0b00; } + .select.is-danger select { + border-color: #da0b00; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #c10a00; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 2px; + font-size: 0.75rem; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: #6b6b6b; } + .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.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: #1497ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-danger .file-cta { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { + font-size: 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.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.is-hovered:not([disabled]), + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + .field.has-addons .control .input.is-hovered:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button.is-focused:not([disabled]), .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button.is-active:not([disabled]), + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + .field.has-addons .control .input.is-focused:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + .field.has-addons .control .input.is-active:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select.is-focused:not([disabled]), + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button.is-focused:not([disabled]):hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button.is-active:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + .field.has-addons .control .input.is-focused:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + .field.has-addons .control .input.is-active:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select.is-focused:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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: #6b6b6b; } + .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + +.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: #6b6b6b; + 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: #12537d; } + .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: #3c3108; } + .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 1em; + 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: 1.25em 1.5em; } + .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: #1190e3; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:focus, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:focus, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:focus, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #22c35b; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:focus, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:focus, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:focus, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:focus, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #22c35b; + color: #fff; } } + .navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:focus, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-burger { + color: rgba(0, 0, 0, 0.7); } + @media screen and (min-width: 1056px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:focus, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:focus, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:focus, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } } + .navbar.is-danger { + background-color: #da0b00; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:focus, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:focus, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:focus, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:focus, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #da0b00; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 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: #3c5dcd; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #6b6b6b; + 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: #6b6b6b; + 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.3333333333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .tile.is-2 { + flex: none; + width: 16.6666666667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.3333333333%; } + .tile.is-5 { + flex: none; + width: 41.6666666667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.3333333333%; } + .tile.is-8 { + flex: none; + width: 66.6666666667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.3333333333%; } + .tile.is-11 { + flex: none; + width: 91.6666666667%; } + .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, #e8e3e4 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e8e3e4 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, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: 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, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #4eb5de; } + .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } + .hero.is-link { + background-color: #2e63b8; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-link .navbar-menu { + background-color: #2e63b8; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2e63b8; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #22c35b; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-success .navbar-menu { + background-color: #22c35b; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #22c35b; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } + .hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); } + @media screen and (max-width: 1055px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } } + .hero.is-danger { + background-color: #da0b00; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-danger .navbar-menu { + background-color: #da0b00; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + 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; } + +pre { + position: relative; + overflow: hidden; } + pre code, pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + pre code:first-of-type, pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + pre code:last-of-type, pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #222222; + cursor: pointer; + text-align: center; } + pre .copy-button:focus, pre .copy-button:hover { + opacity: 1; + background: rgba(34, 34, 34, 0.1); + color: #2e63b8; } + pre .copy-button.success { + color: #259a12; + opacity: 1; } + pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + pre:hover .copy-button { + opacity: 1; } + +.admonition { + background-color: #b5b5b5; + border-style: solid; + border-width: 1px; + border-color: #363636; + border-radius: 4px; + font-size: 1rem; } + .admonition strong { + color: currentColor; } + .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 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: #def0fc; + border-color: #209cee; } + .admonition.is-info > .admonition-header { + background-color: #209cee; + color: #fff; } + .admonition.is-info > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-success { + background-color: #bdf4d1; + border-color: #22c35b; } + .admonition.is-success > .admonition-header { + background-color: #22c35b; + color: #fff; } + .admonition.is-success > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning { + background-color: #fff3c5; + border-color: #ffdd57; } + .admonition.is-warning > .admonition-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-danger { + background-color: #ffaba7; + border-color: #da0b00; } + .admonition.is-danger > .admonition-header { + background-color: #da0b00; + color: #fff; } + .admonition.is-danger > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-compat { + background-color: #bdeff5; + border-color: #1db5c9; } + .admonition.is-compat > .admonition-header { + background-color: #1db5c9; + color: #fff; } + .admonition.is-compat > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + +.admonition-header { + color: #fff; + background-color: #363636; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.5rem 0.75rem; + position: relative; } + .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + +.admonition-body { + color: #222222; + padding: 0.5rem 0.75rem; } + .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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #dbdbdb; } + .docstring > section:last-child { + border-bottom: none; } + .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + +.documenter-example-output { + background-color: white; } + +.outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #ffaba7; + color: rgba(0, 0, 0, 0.7); + border-bottom: 3px solid #da0b00; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + .outdated-warning-overlay a { + color: #2e63b8; } + .outdated-warning-overlay a:hover { + color: #363636; } + +.content pre { + border: 1px solid #dbdbdb; } + +.content code { + font-weight: inherit; } + +.content a code { + color: #2e63b8; } + +.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { + color: #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; } + +pre, code { + font-variant-ligatures: no-contextual; } + +.breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { + color: #222222; } + +.hljs { + background: initial !important; } + +.katex .katex-mathml { + top: 0; + right: 0; } + +.katex-display, mjx-container, .MathJax_Display { + margin: 0.5em 0 !important; } + +html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + +li.no-marker { + list-style: none; } + +/* 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; + overflow-y: hidden; } + +@media screen and (min-width: 1056px) { + #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + +@media screen and (max-width: 1055px) { + #documenter .docs-main { + width: 100%; } + #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + #documenter .docs-main > header, #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + +#documenter .docs-main header.docs-navbar { + background-color: 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-package-name a, #documenter .docs-sidebar .docs-package-name a:hover { + color: #0a0a0a; } + #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #dbdbdb; + display: none; + padding: 0.5rem; } + #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #dbdbdb; + padding-bottom: 1.5rem; + /* 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; } + +.ansi span.sgr1 { + font-weight: bolder; } + +.ansi span.sgr2 { + font-weight: lighter; } + +.ansi span.sgr3 { + font-style: italic; } + +.ansi span.sgr4 { + text-decoration: underline; } + +.ansi span.sgr7 { + color: white; + background-color: #222222; } + +.ansi span.sgr8 { + color: transparent; } + .ansi span.sgr8 span { + color: transparent; } + +.ansi span.sgr9 { + text-decoration: line-through; } + +.ansi span.sgr30 { + color: #242424; } + +.ansi span.sgr31 { + color: #a7201f; } + +.ansi span.sgr32 { + color: #066f00; } + +.ansi span.sgr33 { + color: #856b00; } + +.ansi span.sgr34 { + color: #2149b0; } + +.ansi span.sgr35 { + color: #7d4498; } + +.ansi span.sgr36 { + color: #007989; } + +.ansi span.sgr37 { + color: gray; } + +.ansi span.sgr40 { + background-color: #242424; } + +.ansi span.sgr41 { + background-color: #a7201f; } + +.ansi span.sgr42 { + background-color: #066f00; } + +.ansi span.sgr43 { + background-color: #856b00; } + +.ansi span.sgr44 { + background-color: #2149b0; } + +.ansi span.sgr45 { + background-color: #7d4498; } + +.ansi span.sgr46 { + background-color: #007989; } + +.ansi span.sgr47 { + background-color: gray; } + +.ansi span.sgr90 { + color: #616161; } + +.ansi span.sgr91 { + color: #cb3c33; } + +.ansi span.sgr92 { + color: #0e8300; } + +.ansi span.sgr93 { + color: #a98800; } + +.ansi span.sgr94 { + color: #3c5dcd; } + +.ansi span.sgr95 { + color: #9256af; } + +.ansi span.sgr96 { + color: #008fa3; } + +.ansi span.sgr97 { + color: whitesmoke; } + +.ansi span.sgr100 { + background-color: #616161; } + +.ansi span.sgr101 { + background-color: #cb3c33; } + +.ansi span.sgr102 { + background-color: #0e8300; } + +.ansi span.sgr103 { + background-color: #a98800; } + +.ansi span.sgr104 { + background-color: #3c5dcd; } + +.ansi span.sgr105 { + background-color: #9256af; } + +.ansi span.sgr106 { + background-color: #008fa3; } + +.ansi span.sgr107 { + background-color: whitesmoke; } + +code.language-julia-repl > span.hljs-meta { + color: #066f00; + font-weight: bolder; } + +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/ +/* +This is left on purpose making default.css the single file that can be lifted +as-is from the repository directly without the need for a build step + +Typically this "required" baseline CSS is added by `makestuff.js` during build. +*/ +pre code.hljs { + display: block; + overflow-x: auto; } + +code.hljs { + padding: 3px 5px; } + +/* end baseline CSS */ +.hljs { + background: #F0F0F0; + color: #444; } + +/* Base color: saturation 0; */ +.hljs-subst { + /* default */ } + +/* purposely ignored */ +.hljs-comment { + color: #888888; } + +.hljs-tag, +.hljs-punctuation { + color: #444a; } + +.hljs-tag .hljs-name, +.hljs-tag .hljs-attr { + color: #444; } + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta .hljs-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; } + +/* 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-operator, +.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 .hljs-string { + color: #4d99bf; } + +/* Misc effects */ +.hljs-emphasis { + font-style: italic; } + +.hljs-strong { + font-weight: bold; } diff --git a/previews/PR6/assets/themeswap.js b/previews/PR6/assets/themeswap.js new file mode 100644 index 0000000..c58e993 --- /dev/null +++ b/previews/PR6/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/PR6/assets/warner.js b/previews/PR6/assets/warner.js new file mode 100644 index 0000000..5531c88 --- /dev/null +++ b/previews/PR6/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
            Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/previews/PR6/contributing/index.html b/previews/PR6/contributing/index.html new file mode 100644 index 0000000..d4385d0 --- /dev/null +++ b/previews/PR6/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

            Contributing to Manopt.jl

            First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

            The following is a set of guidelines to ManoptExamples.jl.

            Table of Contents

            I just have a question

            The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

            How can I file an issue?

            If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

            How can I contribute?

            Add an objective

            The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

            If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

            If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

            • cost functions are always of the form cost_ and a fitting name
            • gradient functions are always of the the gradient_ and a fitting name, followed by an !

            for in-place gradients and by !! if it is a struct that can provide both.

            It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

            Add an example

            If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

            Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

            Code style

            We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

            We also follow a few internal conventions:

            • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
            • within a file the structs should come first and functions second. The only exception are constructors for the structs
            • within both blocks an alphabetical order is preferable.
            • The above implies that the mutating variant of a function follows the non-mutating variant.
            • There should be no dangling = signs.
            • Always add a newline between things of different types (struct/method/const).
            • Always add a newline between methods for different functions (including in-place/non-mutating variants).
            • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
            • All import/using/include should be in the main module file.
            • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
            • the Quarto Markdown files are excluded from this formatting.
            diff --git a/previews/PR6/examples/Riemannian-mean/index.html b/previews/PR6/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..cbff3af --- /dev/null +++ b/previews/PR6/examples/Riemannian-mean/index.html @@ -0,0 +1,32 @@ + +Riemannian Mean · ManoptExamples.jl

            The Riemannian Center of Mass (mean)

            Ronny Bergmann 7/2/23

            Preliminary Notes

            Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

            For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.

            The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

            There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

            For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

            using Pkg;
            +Pkg.activate("."); # use the example environment,

            Loading packages and defining data

            Loading the necessary packages and defining a data set on a manifold

            using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
            +Random.seed!(42)
            +M = Sphere(2)
            +n = 100
            +σ = π / 8
            +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
            +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

            Variant 1: Using the functions

            We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.

            f = ManoptExamples.RiemannianMeanCost(data)
            +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

            Then we can for example directly call a gradient descent as

            x1 = gradient_descent(M, f, grad_f, first(data))
            3-element Vector{Float64}:
            + 0.6868392794764022
            + 0.006531600682543096
            + 0.726779982085954

            Variant 2: Using the objective

            A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

            rmo = ManoptExamples.Riemannian_mean_objective(
            +    M, data,
            +    evaluation=InplaceEvaluation(),
            +)

            Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

            rmp = DefaultManoptProblem(M, rmo)

            This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

            s1 = GradientDescentState(M, copy(M, first(data)))
            +solve!(rmp, s1)
            +x2 = get_solver_result(s1)
            3-element Vector{Float64}:
            + 0.6868395649618767
            + 0.006531393870513675
            + 0.7267797141480264

            but we can easily use a conjugate gradient instead

            s2 = ConjugateGradientDescentState(
            +    M,
            +    copy(M, first(data)),
            +    StopAfterIteration(100),
            +    ArmijoLinesearch(M),
            +    FletcherReevesCoefficient(),
            +)
            +solve!(rmp, s2)
            +x3 = get_solver_result(s2)
            3-element Vector{Float64}:
            + 0.6868393265070905
            + 0.006531566700408201
            + 0.7267799379452656
            diff --git a/previews/PR6/examples/Robust-PCA/index.html b/previews/PR6/examples/Robust-PCA/index.html new file mode 100644 index 0000000..ec30e33 --- /dev/null +++ b/previews/PR6/examples/Robust-PCA/index.html @@ -0,0 +1,63 @@ + +Robust PCA · ManoptExamples.jl

            The Robust PCA computed on the Grassmann manifold

            Ronny Bergmann, Laura Weigl 7/2/23

            For this example we first load the necessary packages.

            using Pkg;
            +Pkg.activate("."); # use the example environment,
            using LinearAlgebra, Random, Statistics
            +using Manifolds, Manopt, ManoptExamples
            +using Plots
            +Random.seed!(42)

            Computing a Robust PCA

            For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

            We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

            \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

            The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

            \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

            where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

            The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

            First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

            n = 40
            +d = 2
            +outliers = 15
            +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
            +# Outliers:
            +permute = shuffle(1:size(data, 2))'
            +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
            +# We are looking for a line here so we set
            +m = 1

            We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

            M = Grassmann(d,m);

            For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

            Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

            Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

            The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

            We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

            ε = 1.0
            +iterations = 6
            +reduction = 0.5
            +U, S, V = svd(data);
            +p0 = U[:, 1:m]
            2×1 Matrix{Float64}:
            + -0.7494248652139394
            +  0.6620893983436593

            Let’s generate the cost and gradient we aim to use here

            f = ManoptExamples.RobustPCACost(M, data, ε)
            +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
            ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

            and check the initial cost

            f(M, p0)
            9.43069094790552

            Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

            q = copy(M, p0)
            +εi = ε
            +for i in 1:iterations
            +    f.ε = εi
            +    grad_f.ε = εi
            +    global q = trust_regions(
            +        M,
            +        f,
            +        grad_f,
            +        ApproxHessianFiniteDifference(
            +            M, q, f;
            +            vector_transport_method=ProjectionTransport(),
            +            retraction_method=PolarRetraction(),
            +        ),
            +        q;
            +        (project!)=project!,
            +    )
            +    global εi *= reduction
            +end

            When finally setting ε we can investigate the final cost

            f.ε = 0.0
            +f(M, q)
            9.412965075156471

            Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

            fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
            +plot!(
            +    fig,
            +    q[1] * [-1, 1] * 100,
            +    q[2] * [-1, 1] * 100;
            +    linecolor=:red,
            +    linewidth=2,
            +    label="Robust PCA",
            +);
            +plot!(
            +    fig,
            +    p0[1] * [-1, 1] * 100,
            +    p0[2] * [-1, 1] * 100;
            +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
            +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
            +    linewidth=2,
            +    linecolor=:black,
            +    label="Standard SVD",
            +)

            Figure 1: The result of the robust PCA vs. SVD

            diff --git a/previews/PR6/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.png b/previews/PR6/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..183856a017f03af873ba4350d410763489d5c7cb GIT binary patch literal 33168 zcmZsD1z6O3xAj<{Qqm$SNJuJ@N)6rJNGd2PAe{pkh;&IycS|=YN=bKvba(f+@!a>l z@4ff)Jm--|X8!Zbz1LoA?eUVA6~nrD=OzMyz>*LbRzx5!dms>(TCZP*e_`Aaser%G z^rXau5$6~G#aE|=AQ0pT31Izt0h^=-mltf42}D06bLA!N~9GH z(3o3Cxm#}=9JW{g#QZ?=yNO6qnLr{#nclWgX%D5QVUsmt<>uBKKvH10&Rgold;Yt8 z-UXT0{^8hajTb|Tkq93?`-$YcMfeNhjzmKs0h>Q+yARCEvc$($WUDsxvdQ8RNA@2;h)$xIRgcA3P9MaH^Y` z

            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 literal 0 HcmV?d00001 diff --git a/previews/PR6/examples/Rosenbrock/index.html b/previews/PR6/examples/Rosenbrock/index.html new file mode 100644 index 0000000..9b5ebb3 --- /dev/null +++ b/previews/PR6/examples/Rosenbrock/index.html @@ -0,0 +1,57 @@ + +Rosenbrock · ManoptExamples.jl

            The Rosenbrock Function

            Ronny Bergmann 1/3/23

            After loading the necessary packages

            using Pkg;
            +Pkg.activate("."); # use the example environment,
            using Manifolds, Manopt, ManoptExamples
            +using Plots

            We fix the parameters for the Rosenbock example.

            a = 100.0
            +b = 1.0
            +p0 = [1/10, 2/10]

            which is defined on $\mathbb R^2$, so we need

            M = ℝ^2
            Euclidean(2; field = ℝ)

            and can then generate both the cost and the gradient

            f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
            +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
            ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

            For comparison, we look at the initial cost

            f(M, p0)
            4.42

            And to illustrate, we run two small solvers with their default settings as a comparison.

            Gradient Descent

            We start with the gradient descent solver.

            Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

            gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
            # Solver state for `Manopt.jl`s Gradient Descent
            +After 200 iterations
            +
            +## Parameters
            +* retraction method: ExponentialRetraction()
            +
            +## Stepsize
            +ArmijoLineseach() with keyword parameters
            +  * initial_stepsize = 1.0
            +  * retraction_method = ExponentialRetraction()
            +  * contraction_factor = 0.95
            +  * sufficient_decrease = 0.1
            +  * linesearch_stopsize = 0.0
            +
            +## Stopping Criterion
            +Stop When _one_ of the following are fulfilled:
            +    Max Iteration 200:  reached
            +    |Δf| < 1.0e-9: not reached
            +Overall: reached
            +This indicates convergence: No
            +
            +## Record
            +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

            From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

            gd_x = get_record(gd_state, :Iteration, :Iteration)
            +gd_y =  get_record(gd_state, :Iteration, :Cost)
            +f(M, get_solver_result(gd_state))
            0.10562873187751265

            Quasi Newton

            We can improve this using the quasi Newton algorithm

            qn_state = quasi_Newton(M, f, grad_f, p0;
            +    record = [:Iteration, :Cost], return_state=true
            +)
            # Solver state for `Manopt.jl`s Quasi Newton Method
            +After 45 iterations
            +
            +## Parameters
            +* direction update:        limited memory InverseBFGS (size 20), projections, and ParallelTransport() as vector transport.
            +* retraction method:       ExponentialRetraction()
            +* vector trnasport method: ParallelTransport()
            +
            +## Stepsize
            +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
            +  * retraction_method = ExponentialRetraction()
            +  * vector_transport_method = ParallelTransport()
            +
            +## Stopping Criterion
            +Stop When _one_ of the following are fulfilled:
            +    Max Iteration 1000: not reached
            +    |Δf| < 1.0e-6: reached
            +Overall: reached
            +This indicates convergence: Yes
            +
            +## Record
            +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

            And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

            qn_x = get_record(qn_state, :Iteration, :Iteration)
            +qn_y =  get_record(qn_state, :Iteration, :Cost)
            +f(M, get_solver_result(qn_state))
            1.4409702527480214e-14

            and see that the final value is close to the one of the minimizer

            f(M, ManoptExamples.minimizer(f))
            0.0

            which we also see if we plot the recorded cost.

            fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
            +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

            Figure 1: The result of the robust PCA vs. SVD

            diff --git a/previews/PR6/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.png b/previews/PR6/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6b4f0b4daa1ce18bd1e7ddef7130ba6691011f GIT binary patch literal 16964 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 +Overview · ManoptExamples.jl

            LIst of Examples

            NameprovidesDocumentation
            Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
            Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
            Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚

            Symbols:

            • A Allocating variant
            • I In-place variant
            • 📚 link to documented functions in the documentation
            diff --git a/previews/PR6/index.html b/previews/PR6/index.html new file mode 100644 index 0000000..7d0a0cb --- /dev/null +++ b/previews/PR6/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

            ManoptExample.jl

            This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

            Each example usually consists of

            • a cost function and additional objects, like the gradient or proximal maps, see objectives
            • an example explaining how to use these, see examples

            Helping functions that are used in one or more examples can be found in the section of functions in the menu.

            diff --git a/previews/PR6/objectives/index.html b/previews/PR6/objectives/index.html new file mode 100644 index 0000000..b850f10 --- /dev/null +++ b/previews/PR6/objectives/index.html @@ -0,0 +1,17 @@ + +Objectives · ManoptExamples.jl

            List of Examples

            Riemannian Mean

            See the Riemannian mean example to see these in use.

            ManoptExamples.RiemannianMeanCostType
            RiemannianMeanCost{P}

            A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

            For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

            \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

            where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

            Constructor

            RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

            Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

            See also

            RiemannianMeanGradient!!, Riemannian_mean_objective

            source
            ManoptExamples.RiemannianMeanGradient!!Type
            RiemannianMeanGradient!!{P} where P

            A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

            For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

            \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

            where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

            This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

            Constructors

            RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

            Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

            RiemannianMeanGradient!!(
            +    M::AbstractManifold,
            +    data::AbstractVector{P};
            +    initial_vector::T=zero_vector(M, first(data)),
            +) where {P,T}

            Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

            See also

            RiemannianMeanCost, Riemannian_mean_objective

            source
            ManoptExamples.Riemannian_mean_objectiveMethod
            Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
            +Riemannian_mean_objective(M, data;
            +initial_vector=zero_vector(M, first(data)),
            +evaluation=AllocatingEvaluton()
            +)

            Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

            See also

            RiemannianMeanCost, RiemannianMeanGradient!!

            Note

            The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

            source

            Robust PCA

            See the Robust PCA example to see these in use.

            ManoptExamples.RobustPCACostType
            RobustPCACost{D,F}

            A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

            \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

            This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

            \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

            Note that this is a mutable struct so you can adapt the $ε$ later on.

            Constructor

            RobustPCACost(data::AbstractMatrix, ε=1.0)
            +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

            Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

            source
            ManoptExamples.RobustPCAGrad!!Type
            RobustPCAGrad!!{D,F}

            A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

            Note that this is a mutable struct so you can adapt the $ε$ later on.

            Constructor

            RobustPCAGrad!!(data, ε=1.0)
            +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

            Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

            source
            ManoptExamples.robust_PCA_objectiveFunction
            robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
            +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

            Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

            See also

            RobustPCACost, RobustPCAGrad!!

            Note

            Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.

            source

            Rosenbrock Function

            See the Rosenbrock example to see these in use.

            ManoptExamples.RosenbrockCostType
            RosenbrockCost

            Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

            \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

            which means that for the 2D case, the manifold $\mathcal M$ is ignored.

            See also Rosenbrock (Wikipedia)

            Constructor

            f = Rosenbrock(a,b)

            generates the struct/function of the Rosenbrock cost.

            source
            ManoptExamples.RosenbrockGradient!!Type
            RosenbrockGradient

            Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

            \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

            i.e. also here the manifold is ignored.

            Constructor

            RosenbrockGradient(a,b)

            Functors

            \operatorname{grad} f(M,p)
            +\operatorname{grad} f(M, X, p)

            evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

            source
            diff --git a/previews/PR6/search/index.html b/previews/PR6/search/index.html new file mode 100644 index 0000000..1c05d2c --- /dev/null +++ b/previews/PR6/search/index.html @@ -0,0 +1,2 @@ + +Search · ManoptExamples.jl

            Loading search...

              diff --git a/previews/PR6/search_index.js b/previews/PR6/search_index.js new file mode 100644 index 0000000..0fca125 --- /dev/null +++ b/previews/PR6/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 7/2/23","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794764022\n 0.006531600682543096\n 0.726779982085954","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868395649618767\n 0.006531393870513675\n 0.7267797141480264","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393265070905\n 0.006531566700408201\n 0.7267799379452656","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/ManoptExamples.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"objectives/#List-of-Examples","page":"Objectives","title":"List of Examples","text":"","category":"section"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective-Tuple{AbstractVector}","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also Rosenbrock (Wikipedia)\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\n\\operatorname{grad} f(M,p)\n\\operatorname{grad} f(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny Bergmann, Laura Weigl 7/2/23","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139394\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.43069094790552","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412965075156471","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/#LIst-of-Examples","page":"Overview","title":"LIst of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation\nRiemannian Mean f, operatornamegradf (A/I), objective 📚\nRobust PCA f, operatornamegradf (A/I), objective 📚\nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"#ManoptExample.jl","page":"Home","title":"ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 1/3/23","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the Rosenbock example.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field = ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLineseach() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n * linesearch_stopsize = 0.0\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |Δf| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 45 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 20), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector trnasport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |Δf| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"1.4409702527480214e-14","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"}] +} diff --git a/previews/PR6/siteinfo.js b/previews/PR6/siteinfo.js new file mode 100644 index 0000000..14970df --- /dev/null +++ b/previews/PR6/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "previews/PR6"; diff --git a/stable b/stable new file mode 120000 index 0000000..3f0fd6b --- /dev/null +++ b/stable @@ -0,0 +1 @@ +v0.1.8 \ No newline at end of file diff --git a/v0.1 b/v0.1 new file mode 120000 index 0000000..3f0fd6b --- /dev/null +++ b/v0.1 @@ -0,0 +1 @@ +v0.1.8 \ No newline at end of file diff --git a/v0.1.0/assets/documenter.js b/v0.1.0/assets/documenter.js new file mode 100644 index 0000000..4248476 --- /dev/null +++ b/v0.1.0/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +window.MathJax = { + "tex": { + "packages": [ + "base", + "ams", + "autoload" + ], + "inlineMath": [ + [ + "$", + "$" + ], + [ + "\\(", + "\\)" + ] + ], + "tags": "ams" + }, + "options": { + "ignoreHtmlClass": "tex2jax_ignore", + "processHtmlClass": "tex2jax_process" + } +} +; + +(function () { + var script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.js'; + script.async = true; + document.head.appendChild(script); +})(); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// 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() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/v0.1.0/assets/search.js b/v0.1.0/assets/search.js new file mode 100644 index 0000000..c133f74 --- /dev/null +++ b/v0.1.0/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/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'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + 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) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + searchbox.val(search_query) + } + update_search_box(); + }) +}) + +}) diff --git a/v0.1.0/assets/themes/documenter-dark.css b/v0.1.0/assets/themes/documenter-dark.css new file mode 100644 index 0000000..0bf1af7 --- /dev/null +++ b/v0.1.0/assets/themes/documenter-dark.css @@ -0,0 +1,7702 @@ +@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 .tabs, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .file, html.theme--documenter-dark .button, .is-unselectable, html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after, html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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 .admonition:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .title:not(:last-child), +html.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .box:not(:last-child) { + margin-bottom: 1.5rem; } + +html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -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 .modal-close::before, html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::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 .modal-close::before, html.theme--documenter-dark .delete::before { + height: 2px; + width: 50%; } + html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::after { + height: 50%; + width: 2px; } + html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:focus, html.theme--documenter-dark .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + html.theme--documenter-dark .modal-close:active, html.theme--documenter-dark .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close, html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + html.theme--documenter-dark .is-medium.modal-close, html.theme--documenter-dark .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + html.theme--documenter-dark .is-large.modal-close, html.theme--documenter-dark .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +html.theme--documenter-dark .control.is-loading::after, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdee0; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +html.theme--documenter-dark .hero-video, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .modal, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, +html.theme--documenter-dark .image.is-square .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +html.theme--documenter-dark .image.is-1by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +html.theme--documenter-dark .image.is-5by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +html.theme--documenter-dark .image.is-4by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +html.theme--documenter-dark .image.is-3by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +html.theme--documenter-dark .image.is-5by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +html.theme--documenter-dark .image.is-16by9 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +html.theme--documenter-dark .image.is-2by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +html.theme--documenter-dark .image.is-3by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +html.theme--documenter-dark .image.is-4by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +html.theme--documenter-dark .image.is-3by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +html.theme--documenter-dark .image.is-2by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +html.theme--documenter-dark .image.is-3by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +html.theme--documenter-dark .image.is-9by16 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +html.theme--documenter-dark .image.is-1by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +html.theme--documenter-dark .image.is-1by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .file-cta, +html.theme--documenter-dark .file-name, html.theme--documenter-dark .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 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 .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus, + html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .file-cta:focus, + html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .button:focus, html.theme--documenter-dark .is-focused.pagination-previous, + html.theme--documenter-dark .is-focused.pagination-next, + html.theme--documenter-dark .is-focused.pagination-link, + html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .is-focused.file-cta, + html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active, + html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .file-cta:active, + html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .button:active, html.theme--documenter-dark .is-active.pagination-previous, + html.theme--documenter-dark .is-active.pagination-next, + html.theme--documenter-dark .is-active.pagination-link, + html.theme--documenter-dark .is-active.pagination-ellipsis, html.theme--documenter-dark .is-active.file-cta, + html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.button { + outline: none; } + html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled], + html.theme--documenter-dark .pagination-ellipsis[disabled], html.theme--documenter-dark .file-cta[disabled], + html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .button[disabled], fieldset[disabled] html.theme--documenter-dark .pagination-previous, html.theme--documenter-dark fieldset[disabled] .pagination-previous, + fieldset[disabled] html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark fieldset[disabled] .pagination-next, + fieldset[disabled] html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark fieldset[disabled] .pagination-link, + fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis, fieldset[disabled] html.theme--documenter-dark .file-cta, html.theme--documenter-dark fieldset[disabled] .file-cta, + fieldset[disabled] html.theme--documenter-dark .file-name, + html.theme--documenter-dark fieldset[disabled] .file-name, fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark fieldset[disabled] .select select, html.theme--documenter-dark .select fieldset[disabled] select, html.theme--documenter-dark fieldset[disabled] .textarea, html.theme--documenter-dark fieldset[disabled] .input, html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] html.theme--documenter-dark .button, html.theme--documenter-dark fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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. + */ + /*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/ + /* 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + html.theme--documenter-dark code, + html.theme--documenter-dark pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + html.theme--documenter-dark body { + color: #fff; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + html.theme--documenter-dark a { + color: #1abc9c; + cursor: pointer; + text-decoration: none; } + html.theme--documenter-dark a strong { + color: currentColor; } + html.theme--documenter-dark a:hover { + color: #1dd2af; } + html.theme--documenter-dark code { + background-color: rgba(255, 255, 255, 0.05); + color: #ececec; + font-size: 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + html.theme--documenter-dark .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + html.theme--documenter-dark .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + html.theme--documenter-dark .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + html.theme--documenter-dark .content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + html.theme--documenter-dark .content ul ul ul { + list-style-type: square; } + html.theme--documenter-dark .content dd { + margin-left: 2em; } + html.theme--documenter-dark .content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + html.theme--documenter-dark .content figure:not(:first-child) { + margin-top: 2em; } + html.theme--documenter-dark .content figure:not(:last-child) { + margin-bottom: 2em; } + html.theme--documenter-dark .content figure img { + display: inline-block; } + html.theme--documenter-dark .content figure figcaption { + font-style: italic; } + html.theme--documenter-dark .content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark .content sup, + html.theme--documenter-dark .content sub { + font-size: 75%; } + html.theme--documenter-dark .content table { + width: 100%; } + html.theme--documenter-dark .content table td, + html.theme--documenter-dark .content table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .content table th { + color: #f2f2f2; } + html.theme--documenter-dark .content table th:not([align]) { + text-align: 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 .content kbd, html.theme--documenter-dark .content .tags kbd, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 15px; } + html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + html.theme--documenter-dark .tags.is-centered { + justify-content: center; } + html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + html.theme--documenter-dark .tags.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-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 .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + align-items: center; + background-color: #282f2f; + border-radius: 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 .content kbd:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + html.theme--documenter-dark .tag.is-white:not(body), html.theme--documenter-dark .content kbd.is-white:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .tag.is-black:not(body), html.theme--documenter-dark .content kbd.is-black:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .tag.is-light:not(body), html.theme--documenter-dark .content kbd.is-light:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .tag.is-dark:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-dark:not(body), html.theme--documenter-dark .content .docstring > section > kbd:not(body) { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .tag.is-primary:not(body), html.theme--documenter-dark .content kbd.is-primary:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .tag.is-link:not(body), html.theme--documenter-dark .content kbd.is-link:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .tag.is-info:not(body), html.theme--documenter-dark .content kbd.is-info:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .tag.is-success:not(body), html.theme--documenter-dark .content kbd.is-success:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .tag.is-warning:not(body), html.theme--documenter-dark .content kbd.is-warning:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .tag.is-danger:not(body), html.theme--documenter-dark .content kbd.is-danger:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .tag.is-normal:not(body), html.theme--documenter-dark .content kbd.is-normal:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.85em; } + html.theme--documenter-dark .tag.is-medium:not(body), html.theme--documenter-dark .content kbd.is-medium:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 15px; } + html.theme--documenter-dark .tag.is-large:not(body), html.theme--documenter-dark .content kbd.is-large:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag.is-delete:not(body), html.theme--documenter-dark .content kbd.is-delete:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + html.theme--documenter-dark .tag.is-delete:not(body):hover, html.theme--documenter-dark .content kbd.is-delete:not(body):hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, html.theme--documenter-dark .tag.is-delete:not(body):focus, html.theme--documenter-dark .content kbd.is-delete:not(body):focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #1d2122; } + html.theme--documenter-dark .tag.is-delete:not(body):active, html.theme--documenter-dark .content kbd.is-delete:not(body):active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #111414; } + html.theme--documenter-dark .tag.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:not(body), html.theme--documenter-dark .content kbd.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, html.theme--documenter-dark .content .title kbd, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, + html.theme--documenter-dark .subtitle .tag, + html.theme--documenter-dark .subtitle .content kbd, + html.theme--documenter-dark .content .subtitle kbd, + html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + html.theme--documenter-dark .title { + color: #fff; + font-size: 2rem; + font-weight: 500; + line-height: 1.125; } + html.theme--documenter-dark .title strong { + color: inherit; + font-weight: inherit; } + html.theme--documenter-dark .title + .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 .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #1f2424; + border-color: #5e6d6f; + border-radius: 0.4em; + color: #dbdee0; } + html.theme--documenter-dark .select select::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .select select.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #8c9b9d; } + html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + html.theme--documenter-dark .select select[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + html.theme--documenter-dark .textarea[readonly], html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + html.theme--documenter-dark .is-white.textarea, html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.is-active.textarea, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .is-black.textarea, html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.is-active.textarea, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .is-light.textarea, html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: #ecf0f1; } + html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.is-active.textarea, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea, html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .content kbd.input { + border-color: #282f2f; } + html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-focused, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink { + border-color: #375a7f; } + html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .is-link.textarea, html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #1abc9c; } + html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.is-active.textarea, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .is-info.textarea, html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #024c7d; } + html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.is-active.textarea, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .is-success.textarea, html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #008438; } + html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.is-active.textarea, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .is-warning.textarea, html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ad8100; } + html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.is-active.textarea, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .is-danger.textarea, html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #9e1b0d; } + html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.is-active.textarea, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .is-small.textarea, html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .is-medium.textarea, html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .is-large.textarea, html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .is-fullwidth.textarea, html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + html.theme--documenter-dark .is-inline.textarea, html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 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 .radio, html.theme--documenter-dark .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + html.theme--documenter-dark .radio input, html.theme--documenter-dark .checkbox input { + cursor: pointer; } + html.theme--documenter-dark .radio:hover, html.theme--documenter-dark .checkbox:hover { + color: #8c9b9d; } + html.theme--documenter-dark .radio[disabled], html.theme--documenter-dark .checkbox[disabled], fieldset[disabled] html.theme--documenter-dark .radio, fieldset[disabled] html.theme--documenter-dark .checkbox { + 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.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.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.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]), html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + html.theme--documenter-dark .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.has-addons.has-addons-centered { + justify-content: center; } + html.theme--documenter-dark .field.has-addons.has-addons-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.is-grouped > .control { + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + 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 1em; + 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: 1.25em 1.5em; } + 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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .tile.is-2 { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .tile.is-3 { + flex: none; + width: 25%; } + html.theme--documenter-dark .tile.is-4 { + flex: none; + width: 33.3333333333%; } + html.theme--documenter-dark .tile.is-5 { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .tile.is-6 { + flex: none; + width: 50%; } + html.theme--documenter-dark .tile.is-7 { + flex: none; + width: 58.3333333333%; } + html.theme--documenter-dark .tile.is-8 { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .tile.is-9 { + flex: none; + width: 75%; } + html.theme--documenter-dark .tile.is-10 { + flex: none; + width: 83.3333333333%; } + html.theme--documenter-dark .tile.is-11 { + flex: none; + width: 91.6666666667%; } + 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, #e8e3e4 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, #e8e3e4 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 .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: #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 .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } + html.theme--documenter-dark .hero.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-link strong { + color: inherit; } + html.theme--documenter-dark .hero.is-link .title { + color: #fff; } + html.theme--documenter-dark .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-link .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-link .navbar-menu { + background-color: #1abc9c; } } + html.theme--documenter-dark .hero.is-link .navbar-item, + html.theme--documenter-dark .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-link .navbar-link:hover, + html.theme--documenter-dark .hero.is-link .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-link .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs li.is-active a { + 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 .content kbd, html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + 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 pre { + position: relative; + overflow: hidden; } + html.theme--documenter-dark pre code, html.theme--documenter-dark pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + html.theme--documenter-dark pre code:first-of-type, html.theme--documenter-dark pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + html.theme--documenter-dark pre code:last-of-type, html.theme--documenter-dark pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + html.theme--documenter-dark pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #fff; + cursor: pointer; + text-align: center; } + html.theme--documenter-dark pre .copy-button:focus, html.theme--documenter-dark pre .copy-button:hover { + opacity: 1; + background: rgba(255, 255, 255, 0.1); + color: #1abc9c; } + html.theme--documenter-dark pre .copy-button.success { + color: #259a12; + opacity: 1; } + html.theme--documenter-dark pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + html.theme--documenter-dark pre:hover .copy-button { + opacity: 1; } + html.theme--documenter-dark .admonition { + background-color: #282f2f; + border-style: solid; + border-width: 1px; + border-color: #5e6d6f; + border-radius: 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.5rem 0.75rem; + position: relative; } + html.theme--documenter-dark .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + html.theme--documenter-dark .admonition-body { + color: #fff; + padding: 0.5rem 0.75rem; } + html.theme--documenter-dark .admonition-body pre { + background-color: #282f2f; } + html.theme--documenter-dark .admonition-body code { + background-color: rgba(255, 255, 255, 0.05); } + html.theme--documenter-dark .docstring { + margin-bottom: 1em; + background-color: 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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > section:last-child { + border-bottom: none; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + html.theme--documenter-dark .documenter-example-output { + background-color: #1f2424; } + html.theme--documenter-dark .outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #282f2f; + border-bottom: 3px solid #9e1b0d; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + html.theme--documenter-dark .outdated-warning-overlay a { + color: #1abc9c; } + html.theme--documenter-dark .outdated-warning-overlay a:hover { + color: #1dd2af; } + html.theme--documenter-dark .content pre { + border: 1px solid #5e6d6f; } + html.theme--documenter-dark .content code { + font-weight: inherit; } + html.theme--documenter-dark .content a code { + color: #1abc9c; } + html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code { + color: #f2f2f2; } + html.theme--documenter-dark .content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child { + margin-top: 0; } + html.theme--documenter-dark pre, html.theme--documenter-dark code { + font-variant-ligatures: no-contextual; } + html.theme--documenter-dark .breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover { + color: #f2f2f2; } + html.theme--documenter-dark .hljs { + background: initial !important; } + html.theme--documenter-dark .katex .katex-mathml { + top: 0; + right: 0; } + html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display { + margin: 0.5em 0 !important; } + html.theme--documenter-dark html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + html.theme--documenter-dark li.no-marker { + list-style: none; } + html.theme--documenter-dark #documenter .docs-main > article { + overflow-wrap: break-word; } + html.theme--documenter-dark #documenter .docs-main > article .math-container { + overflow-x: auto; + overflow-y: hidden; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main { + width: 100%; } + html.theme--documenter-dark #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + background-color: #1f2424; + border-bottom: 1px solid #5e6d6f; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-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-package-name a, html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover { + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #5e6d6f; + display: none; + padding: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #5e6d6f; + padding-bottom: 1.5rem; + /* 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 .ansi span.sgr1 { + font-weight: bolder; } + html.theme--documenter-dark .ansi span.sgr2 { + font-weight: lighter; } + html.theme--documenter-dark .ansi span.sgr3 { + font-style: italic; } + html.theme--documenter-dark .ansi span.sgr4 { + text-decoration: underline; } + html.theme--documenter-dark .ansi span.sgr7 { + color: #1f2424; + background-color: #fff; } + html.theme--documenter-dark .ansi span.sgr8 { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr8 span { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr9 { + text-decoration: line-through; } + html.theme--documenter-dark .ansi span.sgr30 { + color: #242424; } + html.theme--documenter-dark .ansi span.sgr31 { + color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr32 { + color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr33 { + color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr34 { + color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr35 { + color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr36 { + color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr37 { + color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr40 { + background-color: #242424; } + html.theme--documenter-dark .ansi span.sgr41 { + background-color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr42 { + background-color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr43 { + background-color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr44 { + background-color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr45 { + background-color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr46 { + background-color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr47 { + background-color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr90 { + color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr91 { + color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr92 { + color: #79d462; } + html.theme--documenter-dark .ansi span.sgr93 { + color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr94 { + color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr95 { + color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr96 { + color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr97 { + color: #ecf0f1; } + html.theme--documenter-dark .ansi span.sgr100 { + background-color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr101 { + background-color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr102 { + background-color: #79d462; } + html.theme--documenter-dark .ansi span.sgr103 { + background-color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr104 { + background-color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr105 { + background-color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr106 { + background-color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr107 { + background-color: #ecf0f1; } + html.theme--documenter-dark code.language-julia-repl > span.hljs-meta { + color: #4fb43a; + font-weight: bolder; } + html.theme--documenter-dark .hljs { + background: #2b2b2b; + color: #f8f8f2; } + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-quote { + color: #d4d0ab; } + html.theme--documenter-dark .hljs-variable, + html.theme--documenter-dark .hljs-template-variable, + html.theme--documenter-dark .hljs-tag, + html.theme--documenter-dark .hljs-name, + html.theme--documenter-dark .hljs-selector-id, + html.theme--documenter-dark .hljs-selector-class, + html.theme--documenter-dark .hljs-regexp, + html.theme--documenter-dark .hljs-deletion { + color: #ffa07a; } + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-link { + color: #f5ab35; } + html.theme--documenter-dark .hljs-attribute { + color: #ffd700; } + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-addition { + color: #abe338; } + html.theme--documenter-dark .hljs-title, + html.theme--documenter-dark .hljs-section { + color: #00e0e0; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + color: #dcc6e0; } + html.theme--documenter-dark .hljs-emphasis { + font-style: italic; } + html.theme--documenter-dark .hljs-strong { + font-weight: bold; } + @media screen and (-ms-high-contrast: active) { + html.theme--documenter-dark .hljs-addition, + html.theme--documenter-dark .hljs-attribute, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-link, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-quote { + color: highlight; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + font-weight: bold; } } + html.theme--documenter-dark .hljs-subst { + color: #f8f8f2; } diff --git a/v0.1.0/assets/themes/documenter-light.css b/v0.1.0/assets/themes/documenter-light.css new file mode 100644 index 0000000..9595d5b --- /dev/null +++ b/v0.1.0/assets/themes/documenter-light.css @@ -0,0 +1,7738 @@ +@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); } } + +.tabs, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .breadcrumb, .file, .button, .is-unselectable, .modal-close, .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.navbar-link:not(.is-arrowless)::after, .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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; } + +.admonition:not(:last-child), .tabs:not(:last-child), .message:not(:last-child), .list:not(:last-child), .level:not(:last-child), .breadcrumb:not(:last-child), .highlight:not(:last-child), .block:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .table-container:not(:last-child), .table:not(:last-child), .progress:not(:last-child), .notification:not(:last-child), .content:not(:last-child), .box:not(:last-child) { + margin-bottom: 1.5rem; } + +.modal-close, .delete { + -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; } + .modal-close::before, .delete::before, .modal-close::after, .delete::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .modal-close::before, .delete::before { + height: 2px; + width: 50%; } + .modal-close::after, .delete::after { + height: 50%; + width: 2px; } + .modal-close:hover, .delete:hover, .modal-close:focus, .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + .modal-close:active, .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close, .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.modal-close, .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.modal-close, .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.control.is-loading::after, .select.is-loading::after, .loader, .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.hero-video, .modal-background, .modal, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, +.image.is-square .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +.image.is-1by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +.image.is-5by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +.image.is-4by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +.image.is-3by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +.image.is-5by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +.image.is-16by9 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +.image.is-2by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +.image.is-3by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +.image.is-4by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +.image.is-3by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +.image.is-2by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +.image.is-3by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +.image.is-9by16 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +.image.is-1by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +.image.is-1by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .file-cta, +.file-name, .select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input, .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.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; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .file-cta:focus, + .file-name:focus, .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .button:focus, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .is-focused.file-cta, + .is-focused.file-name, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.button, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .file-cta:active, + .file-name:active, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .button:active, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis, .is-active.file-cta, + .is-active.file-name, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.button { + outline: none; } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled], .file-cta[disabled], + .file-name[disabled], .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .button[disabled], fieldset[disabled] .pagination-previous, + fieldset[disabled] .pagination-next, + fieldset[disabled] .pagination-link, + fieldset[disabled] .pagination-ellipsis, fieldset[disabled] .file-cta, + fieldset[disabled] .file-name, fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + +body { + color: #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: #1081cb !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: #6b6b6b !important; } + +.has-background-grey { + background-color: #6b6b6b !important; } + +.has-text-grey-light { + color: #b5b5b5 !important; } + +.has-background-grey-light { + background-color: #b5b5b5 !important; } + +.has-text-grey-lighter { + color: #dbdbdb !important; } + +.has-background-grey-lighter { + background-color: #dbdbdb !important; } + +.has-text-white-ter { + color: 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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: #3c5dcd; + color: #363636; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #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: #1497ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .button.is-info[disabled], fieldset[disabled] .button.is-info { + background-color: #209cee; + border-color: 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: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning[disabled], fieldset[disabled] .button.is-warning { + background-color: #ffdd57; + border-color: 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: #6b6b6b; + 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #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 .content kbd, .content .tags kbd, .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 1rem; } + .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag, .tags.is-centered .content kbd, .content .tags.is-centered kbd, .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + .tags.has-addons .tag, .tags.has-addons .content kbd, .content .tags.has-addons kbd, .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + +.tag:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink: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, .content kbd:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag.is-white:not(body), .content kbd.is-white:not(body), .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + .tag.is-black:not(body), .content kbd.is-black:not(body), .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + .tag.is-light:not(body), .content kbd.is-light:not(body), .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: whitesmoke; + color: #363636; } + .tag.is-dark:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink.is-dark:not(body), .content .docstring > section > kbd:not(body) { + background-color: #363636; + color: whitesmoke; } + .tag.is-primary:not(body), .content kbd.is-primary:not(body), .docstring > section > a.docs-sourcelink:not(body) { + background-color: #4eb5de; + color: #fff; } + .tag.is-link:not(body), .content kbd.is-link:not(body), .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #2e63b8; + color: #fff; } + .tag.is-info:not(body), .content kbd.is-info:not(body), .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #209cee; + color: #fff; } + .tag.is-success:not(body), .content kbd.is-success:not(body), .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #22c35b; + color: #fff; } + .tag.is-warning:not(body), .content kbd.is-warning:not(body), .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .tag.is-danger:not(body), .content kbd.is-danger:not(body), .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #da0b00; + color: #fff; } + .tag.is-normal:not(body), .content kbd.is-normal:not(body), .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.75rem; } + .tag.is-medium:not(body), .content kbd.is-medium:not(body), .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 1rem; } + .tag.is-large:not(body), .content kbd.is-large:not(body), .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag.is-delete:not(body), .content kbd.is-delete:not(body), .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + .tag.is-delete:not(body):hover, .content kbd.is-delete:not(body):hover, .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, .tag.is-delete:not(body):focus, .content kbd.is-delete:not(body):focus, .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #e8e8e8; } + .tag.is-delete:not(body):active, .content kbd.is-delete:not(body):active, .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #dbdbdb; } + .tag.is-rounded:not(body), #documenter .docs-sidebar form.docs-search > input:not(body), .content kbd.is-rounded:not(body), #documenter .docs-sidebar .content form.docs-search > input:not(body), .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, .content .title kbd, .title .docstring > section > a.docs-sourcelink, + .subtitle .tag, + .subtitle .content kbd, + .content .subtitle kbd, + .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + +.title { + color: #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; } + +.select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input { + background-color: white; + border-color: #dbdbdb; + border-radius: 4px; + color: #363636; } + .select select::-moz-placeholder, .textarea::-moz-placeholder, .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-moz-placeholder, .textarea:-moz-placeholder, .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-ms-input-placeholder, .textarea:-ms-input-placeholder, .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:hover, .textarea:hover, .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .select select.is-hovered, .is-hovered.textarea, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #b5b5b5; } + .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #2e63b8; + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #6b6b6b; } + .select select[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] .select select::-moz-placeholder, .select fieldset[disabled] select::-moz-placeholder, fieldset[disabled] .textarea::-moz-placeholder, fieldset[disabled] .input::-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] .select select::-webkit-input-placeholder, .select fieldset[disabled] select::-webkit-input-placeholder, fieldset[disabled] .textarea::-webkit-input-placeholder, fieldset[disabled] .input::-webkit-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] .select select:-moz-placeholder, .select fieldset[disabled] select:-moz-placeholder, fieldset[disabled] .textarea:-moz-placeholder, fieldset[disabled] .input:-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] .select select:-ms-input-placeholder, .select fieldset[disabled] select:-ms-input-placeholder, fieldset[disabled] .textarea:-ms-input-placeholder, fieldset[disabled] .input:-ms-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + +.textarea, .input, #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .textarea[readonly], .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + .is-white.textarea, .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + .is-white.textarea:focus, .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.is-focused.textarea, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-white.textarea:active, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.is-active.textarea, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .is-black.textarea, .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + .is-black.textarea:focus, .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.is-focused.textarea, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-black.textarea:active, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.is-active.textarea, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .is-light.textarea, .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: whitesmoke; } + .is-light.textarea:focus, .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.is-focused.textarea, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-light.textarea:active, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.is-active.textarea, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .is-dark.textarea, .content kbd.textarea, .is-dark.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .content kbd.input { + border-color: #363636; } + .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .content kbd.input:focus, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .content kbd.is-focused.input, #documenter .docs-sidebar .content form.docs-search > input.is-focused, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .content kbd.input:active, .is-dark.is-active.textarea, .content kbd.is-active.textarea, .is-dark.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .content kbd.is-active.input, #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink, .is-primary.input, #documenter .docs-sidebar form.docs-search > input.is-primary, .docstring > section > a.input.docs-sourcelink { + border-color: #4eb5de; } + .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.input:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .docstring > section > a.input.docs-sourcelink:focus, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .docstring > section > a.is-focused.input.docs-sourcelink, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.input:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .docstring > section > a.input.docs-sourcelink:active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink, .is-primary.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .is-link.textarea, .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #2e63b8; } + .is-link.textarea:focus, .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.is-focused.textarea, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-link.textarea:active, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.is-active.textarea, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .is-info.textarea, .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #209cee; } + .is-info.textarea:focus, .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.is-focused.textarea, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-info.textarea:active, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.is-active.textarea, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .is-success.textarea, .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #22c35b; } + .is-success.textarea:focus, .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.is-focused.textarea, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-success.textarea:active, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.is-active.textarea, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .is-warning.textarea, .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ffdd57; } + .is-warning.textarea:focus, .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.is-focused.textarea, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-warning.textarea:active, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.is-active.textarea, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .is-danger.textarea, .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #da0b00; } + .is-danger.textarea:focus, .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.is-focused.textarea, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-danger.textarea:active, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.is-active.textarea, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .is-small.textarea, .is-small.input, #documenter .docs-sidebar form.docs-search > input { + border-radius: 2px; + font-size: 0.75rem; } + .is-medium.textarea, .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + .is-large.textarea, .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + .is-fullwidth.textarea, .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + .is-inline.textarea, .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + +.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { + border-radius: 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; } + +.radio, .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .radio input, .checkbox input { + cursor: pointer; } + .radio:hover, .checkbox:hover { + color: #363636; } + .radio[disabled], .checkbox[disabled], fieldset[disabled] .radio, fieldset[disabled] .checkbox { + color: #6b6b6b; + 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: #1190e3; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #22c35b; } + .select.is-success select { + border-color: #22c35b; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #1ead51; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #ffdd57; } + .select.is-warning select { + border-color: #ffdd57; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83e; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #da0b00; } + .select.is-danger select { + border-color: #da0b00; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #c10a00; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 2px; + font-size: 0.75rem; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: #6b6b6b; } + .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.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: #1497ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-danger .file-cta { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { + font-size: 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.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.is-hovered:not([disabled]), + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + .field.has-addons .control .input.is-hovered:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button.is-focused:not([disabled]), .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button.is-active:not([disabled]), + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + .field.has-addons .control .input.is-focused:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + .field.has-addons .control .input.is-active:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select.is-focused:not([disabled]), + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button.is-focused:not([disabled]):hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button.is-active:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + .field.has-addons .control .input.is-focused:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + .field.has-addons .control .input.is-active:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select.is-focused:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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: #6b6b6b; } + .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + +.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: #6b6b6b; + 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: #12537d; } + .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: #3c3108; } + .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 1em; + 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: 1.25em 1.5em; } + .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: #1190e3; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:focus, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:focus, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:focus, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #22c35b; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:focus, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:focus, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:focus, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:focus, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #22c35b; + color: #fff; } } + .navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:focus, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-burger { + color: rgba(0, 0, 0, 0.7); } + @media screen and (min-width: 1056px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:focus, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:focus, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:focus, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } } + .navbar.is-danger { + background-color: #da0b00; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:focus, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:focus, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:focus, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:focus, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #da0b00; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 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: #3c5dcd; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #6b6b6b; + 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: #6b6b6b; + 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.3333333333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .tile.is-2 { + flex: none; + width: 16.6666666667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.3333333333%; } + .tile.is-5 { + flex: none; + width: 41.6666666667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.3333333333%; } + .tile.is-8 { + flex: none; + width: 66.6666666667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.3333333333%; } + .tile.is-11 { + flex: none; + width: 91.6666666667%; } + .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, #e8e3e4 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e8e3e4 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, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: 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, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #4eb5de; } + .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } + .hero.is-link { + background-color: #2e63b8; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-link .navbar-menu { + background-color: #2e63b8; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2e63b8; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #22c35b; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-success .navbar-menu { + background-color: #22c35b; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #22c35b; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } + .hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); } + @media screen and (max-width: 1055px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } } + .hero.is-danger { + background-color: #da0b00; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-danger .navbar-menu { + background-color: #da0b00; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + 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; } + +pre { + position: relative; + overflow: hidden; } + pre code, pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + pre code:first-of-type, pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + pre code:last-of-type, pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #222222; + cursor: pointer; + text-align: center; } + pre .copy-button:focus, pre .copy-button:hover { + opacity: 1; + background: rgba(34, 34, 34, 0.1); + color: #2e63b8; } + pre .copy-button.success { + color: #259a12; + opacity: 1; } + pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + pre:hover .copy-button { + opacity: 1; } + +.admonition { + background-color: #b5b5b5; + border-style: solid; + border-width: 1px; + border-color: #363636; + border-radius: 4px; + font-size: 1rem; } + .admonition strong { + color: currentColor; } + .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 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: #def0fc; + border-color: #209cee; } + .admonition.is-info > .admonition-header { + background-color: #209cee; + color: #fff; } + .admonition.is-info > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-success { + background-color: #bdf4d1; + border-color: #22c35b; } + .admonition.is-success > .admonition-header { + background-color: #22c35b; + color: #fff; } + .admonition.is-success > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning { + background-color: #fff3c5; + border-color: #ffdd57; } + .admonition.is-warning > .admonition-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-danger { + background-color: #ffaba7; + border-color: #da0b00; } + .admonition.is-danger > .admonition-header { + background-color: #da0b00; + color: #fff; } + .admonition.is-danger > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-compat { + background-color: #bdeff5; + border-color: #1db5c9; } + .admonition.is-compat > .admonition-header { + background-color: #1db5c9; + color: #fff; } + .admonition.is-compat > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + +.admonition-header { + color: #fff; + background-color: #363636; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.5rem 0.75rem; + position: relative; } + .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + +.admonition-body { + color: #222222; + padding: 0.5rem 0.75rem; } + .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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #dbdbdb; } + .docstring > section:last-child { + border-bottom: none; } + .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + +.documenter-example-output { + background-color: white; } + +.outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #ffaba7; + color: rgba(0, 0, 0, 0.7); + border-bottom: 3px solid #da0b00; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + .outdated-warning-overlay a { + color: #2e63b8; } + .outdated-warning-overlay a:hover { + color: #363636; } + +.content pre { + border: 1px solid #dbdbdb; } + +.content code { + font-weight: inherit; } + +.content a code { + color: #2e63b8; } + +.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { + color: #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; } + +pre, code { + font-variant-ligatures: no-contextual; } + +.breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { + color: #222222; } + +.hljs { + background: initial !important; } + +.katex .katex-mathml { + top: 0; + right: 0; } + +.katex-display, mjx-container, .MathJax_Display { + margin: 0.5em 0 !important; } + +html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + +li.no-marker { + list-style: none; } + +/* 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; + overflow-y: hidden; } + +@media screen and (min-width: 1056px) { + #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + +@media screen and (max-width: 1055px) { + #documenter .docs-main { + width: 100%; } + #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + #documenter .docs-main > header, #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + +#documenter .docs-main header.docs-navbar { + background-color: 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-package-name a, #documenter .docs-sidebar .docs-package-name a:hover { + color: #0a0a0a; } + #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #dbdbdb; + display: none; + padding: 0.5rem; } + #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #dbdbdb; + padding-bottom: 1.5rem; + /* 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; } + +.ansi span.sgr1 { + font-weight: bolder; } + +.ansi span.sgr2 { + font-weight: lighter; } + +.ansi span.sgr3 { + font-style: italic; } + +.ansi span.sgr4 { + text-decoration: underline; } + +.ansi span.sgr7 { + color: white; + background-color: #222222; } + +.ansi span.sgr8 { + color: transparent; } + .ansi span.sgr8 span { + color: transparent; } + +.ansi span.sgr9 { + text-decoration: line-through; } + +.ansi span.sgr30 { + color: #242424; } + +.ansi span.sgr31 { + color: #a7201f; } + +.ansi span.sgr32 { + color: #066f00; } + +.ansi span.sgr33 { + color: #856b00; } + +.ansi span.sgr34 { + color: #2149b0; } + +.ansi span.sgr35 { + color: #7d4498; } + +.ansi span.sgr36 { + color: #007989; } + +.ansi span.sgr37 { + color: gray; } + +.ansi span.sgr40 { + background-color: #242424; } + +.ansi span.sgr41 { + background-color: #a7201f; } + +.ansi span.sgr42 { + background-color: #066f00; } + +.ansi span.sgr43 { + background-color: #856b00; } + +.ansi span.sgr44 { + background-color: #2149b0; } + +.ansi span.sgr45 { + background-color: #7d4498; } + +.ansi span.sgr46 { + background-color: #007989; } + +.ansi span.sgr47 { + background-color: gray; } + +.ansi span.sgr90 { + color: #616161; } + +.ansi span.sgr91 { + color: #cb3c33; } + +.ansi span.sgr92 { + color: #0e8300; } + +.ansi span.sgr93 { + color: #a98800; } + +.ansi span.sgr94 { + color: #3c5dcd; } + +.ansi span.sgr95 { + color: #9256af; } + +.ansi span.sgr96 { + color: #008fa3; } + +.ansi span.sgr97 { + color: whitesmoke; } + +.ansi span.sgr100 { + background-color: #616161; } + +.ansi span.sgr101 { + background-color: #cb3c33; } + +.ansi span.sgr102 { + background-color: #0e8300; } + +.ansi span.sgr103 { + background-color: #a98800; } + +.ansi span.sgr104 { + background-color: #3c5dcd; } + +.ansi span.sgr105 { + background-color: #9256af; } + +.ansi span.sgr106 { + background-color: #008fa3; } + +.ansi span.sgr107 { + background-color: whitesmoke; } + +code.language-julia-repl > span.hljs-meta { + color: #066f00; + font-weight: bolder; } + +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/ +/* +This is left on purpose making default.css the single file that can be lifted +as-is from the repository directly without the need for a build step + +Typically this "required" baseline CSS is added by `makestuff.js` during build. +*/ +pre code.hljs { + display: block; + overflow-x: auto; } + +code.hljs { + padding: 3px 5px; } + +/* end baseline CSS */ +.hljs { + background: #F0F0F0; + color: #444; } + +/* Base color: saturation 0; */ +.hljs-subst { + /* default */ } + +/* purposely ignored */ +.hljs-comment { + color: #888888; } + +.hljs-tag, +.hljs-punctuation { + color: #444a; } + +.hljs-tag .hljs-name, +.hljs-tag .hljs-attr { + color: #444; } + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta .hljs-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; } + +/* 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-operator, +.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 .hljs-string { + color: #4d99bf; } + +/* Misc effects */ +.hljs-emphasis { + font-style: italic; } + +.hljs-strong { + font-weight: bold; } diff --git a/v0.1.0/assets/themeswap.js b/v0.1.0/assets/themeswap.js new file mode 100644 index 0000000..c58e993 --- /dev/null +++ b/v0.1.0/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/v0.1.0/assets/warner.js b/v0.1.0/assets/warner.js new file mode 100644 index 0000000..5531c88 --- /dev/null +++ b/v0.1.0/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
              Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/v0.1.0/contributing/index.html b/v0.1.0/contributing/index.html new file mode 100644 index 0000000..f28f585 --- /dev/null +++ b/v0.1.0/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

              Contributing to Manopt.jl

              First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

              The following is a set of guidelines to ManoptExamples.jl.

              Table of Contents

              I just have a question

              The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

              How can I file an issue?

              If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

              How can I contribute?

              Add an objective

              The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

              If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

              If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

              • cost functions are always of the form cost_ and a fitting name
              • gradient functions are always of the the gradient_ and a fitting name, followed by an !

              for in-place gradients and by !! if it is a struct that can provide both.

              It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

              Add an example

              If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

              Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

              Code style

              We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

              We also follow a few internal conventions:

              • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
              • within a file the structs should come first and functions second. The only exception are constructors for the structs
              • within both blocks an alphabetical order is preferable.
              • The above implies that the mutating variant of a function follows the non-mutating variant.
              • There should be no dangling = signs.
              • Always add a newline between things of different types (struct/method/const).
              • Always add a newline between methods for different functions (including in-place/non-mutating variants).
              • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
              • All import/using/include should be in the main module file.
              • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
              • the Quarto Markdown files are excluded from this formatting.
              diff --git a/v0.1.0/examples/Riemannian-mean/index.html b/v0.1.0/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..2e97e56 --- /dev/null +++ b/v0.1.0/examples/Riemannian-mean/index.html @@ -0,0 +1,32 @@ + +Riemannian Mean · ManoptExamples.jl

              The Riemannian Center of Mass (mean)

              Ronny Bergmann 7/2/23

              Preliminary Notes

              Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

              For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.

              The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

              There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

              For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

              using Pkg;
              +Pkg.activate("."); # use the example environment,

              Loading packages and defining data

              Loading the necessary packages and defining a data set on a manifold

              using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
              +Random.seed!(42)
              +M = Sphere(2)
              +n = 100
              +σ = π / 8
              +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
              +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

              Variant 1: Using the functions

              We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.

              f = ManoptExamples.RiemannianMeanCost(data)
              +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

              Then we can for example directly call a gradient descent as

              x1 = gradient_descent(M, f, grad_f, first(data))
              3-element Vector{Float64}:
              + 0.6868392794764022
              + 0.006531600682543096
              + 0.726779982085954

              Variant 2: Using the objective

              A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

              rmo = ManoptExamples.Riemannian_mean_objective(
              +    M, data,
              +    evaluation=InplaceEvaluation(),
              +)

              Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

              rmp = DefaultManoptProblem(M, rmo)

              This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

              s1 = GradientDescentState(M, copy(M, first(data)))
              +solve!(rmp, s1)
              +x2 = get_solver_result(s1)
              3-element Vector{Float64}:
              + 0.6868395649618767
              + 0.006531393870513675
              + 0.7267797141480264

              but we can easily use a conjugate gradient instead

              s2 = ConjugateGradientDescentState(
              +    M,
              +    copy(M, first(data)),
              +    StopAfterIteration(100),
              +    ArmijoLinesearch(M),
              +    FletcherReevesCoefficient(),
              +)
              +solve!(rmp, s2)
              +x3 = get_solver_result(s2)
              3-element Vector{Float64}:
              + 0.6868393265070905
              + 0.006531566700408201
              + 0.7267799379452656
              diff --git a/v0.1.0/examples/Robust-PCA/index.html b/v0.1.0/examples/Robust-PCA/index.html new file mode 100644 index 0000000..9f31e73 --- /dev/null +++ b/v0.1.0/examples/Robust-PCA/index.html @@ -0,0 +1,63 @@ + +Robust PCA · ManoptExamples.jl

              The Robust PCA computed on the Grassmann manifold

              Ronny Bergmann, Laura Weigl 7/2/23

              For this example we first load the necessary packages.

              using Pkg;
              +Pkg.activate("."); # use the example environment,
              using LinearAlgebra, Random, Statistics
              +using Manifolds, Manopt, ManoptExamples
              +using Plots
              +Random.seed!(42)

              Computing a Robust PCA

              For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

              We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

              \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

              The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

              \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

              where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

              The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

              First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

              n = 40
              +d = 2
              +outliers = 15
              +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
              +# Outliers:
              +permute = shuffle(1:size(data, 2))'
              +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
              +# We are looking for a line here so we set
              +m = 1

              We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

              M = Grassmann(d,m);

              For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

              Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

              Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

              The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

              We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

              ε = 1.0
              +iterations = 6
              +reduction = 0.5
              +U, S, V = svd(data);
              +p0 = U[:, 1:m]
              2×1 Matrix{Float64}:
              + -0.7494248652139394
              +  0.6620893983436593

              Let’s generate the cost and gradient we aim to use here

              f = ManoptExamples.RobustPCACost(M, data, ε)
              +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
              ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

              and check the initial cost

              f(M, p0)
              9.43069094790552

              Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

              q = copy(M, p0)
              +εi = ε
              +for i in 1:iterations
              +    f.ε = εi
              +    grad_f.ε = εi
              +    global q = trust_regions(
              +        M,
              +        f,
              +        grad_f,
              +        ApproxHessianFiniteDifference(
              +            M, q, f;
              +            vector_transport_method=ProjectionTransport(),
              +            retraction_method=PolarRetraction(),
              +        ),
              +        q;
              +        (project!)=project!,
              +    )
              +    global εi *= reduction
              +end

              When finally setting ε we can investigate the final cost

              f.ε = 0.0
              +f(M, q)
              9.412965075156471

              Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

              fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
              +plot!(
              +    fig,
              +    q[1] * [-1, 1] * 100,
              +    q[2] * [-1, 1] * 100;
              +    linecolor=:red,
              +    linewidth=2,
              +    label="Robust PCA",
              +);
              +plot!(
              +    fig,
              +    p0[1] * [-1, 1] * 100,
              +    p0[2] * [-1, 1] * 100;
              +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
              +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
              +    linewidth=2,
              +    linecolor=:black,
              +    label="Standard SVD",
              +)

              Figure 1: The result of the robust PCA vs. SVD

              diff --git a/v0.1.0/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.png b/v0.1.0/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..183856a017f03af873ba4350d410763489d5c7cb GIT binary patch literal 33168 zcmZsD1z6O3xAj<{Qqm$SNJuJ@N)6rJNGd2PAe{pkh;&IycS|=YN=bKvba(f+@!a>l z@4ff)Jm--|X8!Zbz1LoA?eUVA6~nrD=OzMyz>*LbRzx5!dms>(TCZP*e_`Aaser%G z^rXau5$6~G#aE|=AQ0pT31Izt0h^=-mltf42}D06bLA!N~9GH z(3o3Cxm#}=9JW{g#QZ?=yNO6qnLr{#nclWgX%D5QVUsmt<>uBKKvH10&Rgold;Yt8 z-UXT0{^8hajTb|Tkq93?`-$YcMfeNhjzmKs0h>Q+yARCEvc$($WUDsxvdQ8RNA@2;h)$xIRgcA3P9MaH^Y` z

              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 literal 0 HcmV?d00001 diff --git a/v0.1.0/examples/index.html b/v0.1.0/examples/index.html new file mode 100644 index 0000000..eda185b --- /dev/null +++ b/v0.1.0/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

              LIst of Examples

              Nameprovides
              Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective 📚
              Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective 📚

              Symbols:

              • A Allocating variant
              • I In-place variant
              • 📚 link to documented functions in the documentation
              diff --git a/v0.1.0/index.html b/v0.1.0/index.html new file mode 100644 index 0000000..d4a74d0 --- /dev/null +++ b/v0.1.0/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

              ManoptExample.jl

              This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

              Each example usually consists of

              • a cost function and additional objects, like the gradient or proximal maps, see objectives
              • an example explaining how to use these, see examples

              Helping functions that are used in one or more examples can be found in the section of functions in the menu.

              diff --git a/v0.1.0/objectives/index.html b/v0.1.0/objectives/index.html new file mode 100644 index 0000000..fdfe097 --- /dev/null +++ b/v0.1.0/objectives/index.html @@ -0,0 +1,13 @@ + +Objectives · ManoptExamples.jl

              List of Examples

              Riemannian Mean

              See the Riemannian mean example to see these in use.

              ManoptExamples.RiemannianMeanCostType
              RiemannianMeanCost{P}

              A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

              For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

              \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

              where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

              Constructor

              RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

              Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

              See also

              RiemannianMeanGradient!!, Riemannian_mean_objective

              source
              ManoptExamples.RiemannianMeanGradient!!Type
              RiemannianMeanGradient!!{P} where P

              A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

              For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

              \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

              where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

              This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

              Constructors

              RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

              Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

              RiemannianMeanGradient!!(
              +    M::AbstractManifold,
              +    data::AbstractVector{P};
              +    initial_vector::T=zero_vector(M, first(data)),
              +) where {P,T}

              Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

              See also

              RiemannianMeanCost, Riemannian_mean_objective

              source
              ManoptExamples.Riemannian_mean_objectiveMethod
              Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
              +Riemannian_mean_objective(M, data;
              +initial_vector=zero_vector(M, first(data)),
              +evaluation=AllocatingEvaluton()
              +)

              Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

              See also

              RiemannianMeanCost, RiemannianMeanGradient!!

              Note

              The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

              source

              Robust PCA

              See the Robust PCA example to see these in use.

              ManoptExamples.RobustPCACostType
              RobustPCACost{D,F}

              A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

              \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

              This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

              \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

              Note that this is a mutable struct so you can adapt the $ε$ later on.

              Constructor

              RobustPCACost(data::AbstractMatrix, ε=1.0)
              +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

              Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

              source
              ManoptExamples.RobustPCAGrad!!Type
              RobustPCAGrad!!{D,F}

              A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

              Note that this is a mutable struct so you can adapt the $ε$ later on.

              Constructor

              RobustPCAGrad!!(data, ε=1.0)
              +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

              Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

              source
              ManoptExamples.robust_PCAFunction
              robust_PCA(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
              +robust_PCA(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

              Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

              See also

              RobustPCACost, RobustPCAGrad!!

              Note

              Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.

              source
              diff --git a/v0.1.0/search/index.html b/v0.1.0/search/index.html new file mode 100644 index 0000000..020b286 --- /dev/null +++ b/v0.1.0/search/index.html @@ -0,0 +1,2 @@ + +Search · ManoptExamples.jl

              Loading search...

                diff --git a/v0.1.0/search_index.js b/v0.1.0/search_index.js new file mode 100644 index 0000000..5e6bad2 --- /dev/null +++ b/v0.1.0/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 7/2/23","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794764022\n 0.006531600682543096\n 0.726779982085954","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868395649618767\n 0.006531393870513675\n 0.7267797141480264","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393265070905\n 0.006531566700408201\n 0.7267799379452656","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/ManoptExamples.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"objectives/#List-of-Examples","page":"Objectives","title":"List of Examples","text":"","category":"section"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective-Tuple{AbstractVector}","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA","page":"Objectives","title":"ManoptExamples.robust_PCA","text":"robust_PCA(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.\n\n\n\n\n\n","category":"function"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny Bergmann, Laura Weigl 7/2/23","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139394\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.43069094790552","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412965075156471","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/#LIst-of-Examples","page":"Overview","title":"LIst of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides\nRiemannian Mean f, operatornamegradf (A/I), objective 📚\nRobust PCA f, operatornamegradf (A/I), objective 📚","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"#ManoptExample.jl","page":"Home","title":"ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/v0.1.0/siteinfo.js b/v0.1.0/siteinfo.js new file mode 100644 index 0000000..a7a85ce --- /dev/null +++ b/v0.1.0/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.0"; diff --git a/v0.1.1/assets/documenter.js b/v0.1.1/assets/documenter.js new file mode 100644 index 0000000..4248476 --- /dev/null +++ b/v0.1.1/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +window.MathJax = { + "tex": { + "packages": [ + "base", + "ams", + "autoload" + ], + "inlineMath": [ + [ + "$", + "$" + ], + [ + "\\(", + "\\)" + ] + ], + "tags": "ams" + }, + "options": { + "ignoreHtmlClass": "tex2jax_ignore", + "processHtmlClass": "tex2jax_process" + } +} +; + +(function () { + var script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.js'; + script.async = true; + document.head.appendChild(script); +})(); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// 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() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/v0.1.1/assets/search.js b/v0.1.1/assets/search.js new file mode 100644 index 0000000..c133f74 --- /dev/null +++ b/v0.1.1/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/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'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + 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) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + searchbox.val(search_query) + } + update_search_box(); + }) +}) + +}) diff --git a/v0.1.1/assets/themes/documenter-dark.css b/v0.1.1/assets/themes/documenter-dark.css new file mode 100644 index 0000000..0bf1af7 --- /dev/null +++ b/v0.1.1/assets/themes/documenter-dark.css @@ -0,0 +1,7702 @@ +@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 .tabs, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .file, html.theme--documenter-dark .button, .is-unselectable, html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after, html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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 .admonition:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .title:not(:last-child), +html.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .box:not(:last-child) { + margin-bottom: 1.5rem; } + +html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -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 .modal-close::before, html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::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 .modal-close::before, html.theme--documenter-dark .delete::before { + height: 2px; + width: 50%; } + html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::after { + height: 50%; + width: 2px; } + html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:focus, html.theme--documenter-dark .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + html.theme--documenter-dark .modal-close:active, html.theme--documenter-dark .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close, html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + html.theme--documenter-dark .is-medium.modal-close, html.theme--documenter-dark .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + html.theme--documenter-dark .is-large.modal-close, html.theme--documenter-dark .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +html.theme--documenter-dark .control.is-loading::after, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdee0; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +html.theme--documenter-dark .hero-video, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .modal, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, +html.theme--documenter-dark .image.is-square .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +html.theme--documenter-dark .image.is-1by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +html.theme--documenter-dark .image.is-5by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +html.theme--documenter-dark .image.is-4by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +html.theme--documenter-dark .image.is-3by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +html.theme--documenter-dark .image.is-5by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +html.theme--documenter-dark .image.is-16by9 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +html.theme--documenter-dark .image.is-2by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +html.theme--documenter-dark .image.is-3by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +html.theme--documenter-dark .image.is-4by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +html.theme--documenter-dark .image.is-3by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +html.theme--documenter-dark .image.is-2by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +html.theme--documenter-dark .image.is-3by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +html.theme--documenter-dark .image.is-9by16 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +html.theme--documenter-dark .image.is-1by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +html.theme--documenter-dark .image.is-1by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .file-cta, +html.theme--documenter-dark .file-name, html.theme--documenter-dark .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 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 .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus, + html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .file-cta:focus, + html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .button:focus, html.theme--documenter-dark .is-focused.pagination-previous, + html.theme--documenter-dark .is-focused.pagination-next, + html.theme--documenter-dark .is-focused.pagination-link, + html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .is-focused.file-cta, + html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active, + html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .file-cta:active, + html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .button:active, html.theme--documenter-dark .is-active.pagination-previous, + html.theme--documenter-dark .is-active.pagination-next, + html.theme--documenter-dark .is-active.pagination-link, + html.theme--documenter-dark .is-active.pagination-ellipsis, html.theme--documenter-dark .is-active.file-cta, + html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.button { + outline: none; } + html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled], + html.theme--documenter-dark .pagination-ellipsis[disabled], html.theme--documenter-dark .file-cta[disabled], + html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .button[disabled], fieldset[disabled] html.theme--documenter-dark .pagination-previous, html.theme--documenter-dark fieldset[disabled] .pagination-previous, + fieldset[disabled] html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark fieldset[disabled] .pagination-next, + fieldset[disabled] html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark fieldset[disabled] .pagination-link, + fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis, fieldset[disabled] html.theme--documenter-dark .file-cta, html.theme--documenter-dark fieldset[disabled] .file-cta, + fieldset[disabled] html.theme--documenter-dark .file-name, + html.theme--documenter-dark fieldset[disabled] .file-name, fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark fieldset[disabled] .select select, html.theme--documenter-dark .select fieldset[disabled] select, html.theme--documenter-dark fieldset[disabled] .textarea, html.theme--documenter-dark fieldset[disabled] .input, html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] html.theme--documenter-dark .button, html.theme--documenter-dark fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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. + */ + /*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/ + /* 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + html.theme--documenter-dark code, + html.theme--documenter-dark pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + html.theme--documenter-dark body { + color: #fff; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + html.theme--documenter-dark a { + color: #1abc9c; + cursor: pointer; + text-decoration: none; } + html.theme--documenter-dark a strong { + color: currentColor; } + html.theme--documenter-dark a:hover { + color: #1dd2af; } + html.theme--documenter-dark code { + background-color: rgba(255, 255, 255, 0.05); + color: #ececec; + font-size: 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + html.theme--documenter-dark .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + html.theme--documenter-dark .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + html.theme--documenter-dark .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + html.theme--documenter-dark .content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + html.theme--documenter-dark .content ul ul ul { + list-style-type: square; } + html.theme--documenter-dark .content dd { + margin-left: 2em; } + html.theme--documenter-dark .content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + html.theme--documenter-dark .content figure:not(:first-child) { + margin-top: 2em; } + html.theme--documenter-dark .content figure:not(:last-child) { + margin-bottom: 2em; } + html.theme--documenter-dark .content figure img { + display: inline-block; } + html.theme--documenter-dark .content figure figcaption { + font-style: italic; } + html.theme--documenter-dark .content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark .content sup, + html.theme--documenter-dark .content sub { + font-size: 75%; } + html.theme--documenter-dark .content table { + width: 100%; } + html.theme--documenter-dark .content table td, + html.theme--documenter-dark .content table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .content table th { + color: #f2f2f2; } + html.theme--documenter-dark .content table th:not([align]) { + text-align: 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 .content kbd, html.theme--documenter-dark .content .tags kbd, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 15px; } + html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + html.theme--documenter-dark .tags.is-centered { + justify-content: center; } + html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + html.theme--documenter-dark .tags.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-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 .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + align-items: center; + background-color: #282f2f; + border-radius: 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 .content kbd:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + html.theme--documenter-dark .tag.is-white:not(body), html.theme--documenter-dark .content kbd.is-white:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .tag.is-black:not(body), html.theme--documenter-dark .content kbd.is-black:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .tag.is-light:not(body), html.theme--documenter-dark .content kbd.is-light:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .tag.is-dark:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-dark:not(body), html.theme--documenter-dark .content .docstring > section > kbd:not(body) { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .tag.is-primary:not(body), html.theme--documenter-dark .content kbd.is-primary:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .tag.is-link:not(body), html.theme--documenter-dark .content kbd.is-link:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .tag.is-info:not(body), html.theme--documenter-dark .content kbd.is-info:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .tag.is-success:not(body), html.theme--documenter-dark .content kbd.is-success:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .tag.is-warning:not(body), html.theme--documenter-dark .content kbd.is-warning:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .tag.is-danger:not(body), html.theme--documenter-dark .content kbd.is-danger:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .tag.is-normal:not(body), html.theme--documenter-dark .content kbd.is-normal:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.85em; } + html.theme--documenter-dark .tag.is-medium:not(body), html.theme--documenter-dark .content kbd.is-medium:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 15px; } + html.theme--documenter-dark .tag.is-large:not(body), html.theme--documenter-dark .content kbd.is-large:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag.is-delete:not(body), html.theme--documenter-dark .content kbd.is-delete:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + html.theme--documenter-dark .tag.is-delete:not(body):hover, html.theme--documenter-dark .content kbd.is-delete:not(body):hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, html.theme--documenter-dark .tag.is-delete:not(body):focus, html.theme--documenter-dark .content kbd.is-delete:not(body):focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #1d2122; } + html.theme--documenter-dark .tag.is-delete:not(body):active, html.theme--documenter-dark .content kbd.is-delete:not(body):active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #111414; } + html.theme--documenter-dark .tag.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:not(body), html.theme--documenter-dark .content kbd.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, html.theme--documenter-dark .content .title kbd, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, + html.theme--documenter-dark .subtitle .tag, + html.theme--documenter-dark .subtitle .content kbd, + html.theme--documenter-dark .content .subtitle kbd, + html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + html.theme--documenter-dark .title { + color: #fff; + font-size: 2rem; + font-weight: 500; + line-height: 1.125; } + html.theme--documenter-dark .title strong { + color: inherit; + font-weight: inherit; } + html.theme--documenter-dark .title + .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 .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #1f2424; + border-color: #5e6d6f; + border-radius: 0.4em; + color: #dbdee0; } + html.theme--documenter-dark .select select::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .select select.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #8c9b9d; } + html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + html.theme--documenter-dark .select select[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + html.theme--documenter-dark .textarea[readonly], html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + html.theme--documenter-dark .is-white.textarea, html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.is-active.textarea, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .is-black.textarea, html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.is-active.textarea, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .is-light.textarea, html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: #ecf0f1; } + html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.is-active.textarea, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea, html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .content kbd.input { + border-color: #282f2f; } + html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-focused, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink { + border-color: #375a7f; } + html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .is-link.textarea, html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #1abc9c; } + html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.is-active.textarea, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .is-info.textarea, html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #024c7d; } + html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.is-active.textarea, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .is-success.textarea, html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #008438; } + html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.is-active.textarea, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .is-warning.textarea, html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ad8100; } + html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.is-active.textarea, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .is-danger.textarea, html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #9e1b0d; } + html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.is-active.textarea, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .is-small.textarea, html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .is-medium.textarea, html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .is-large.textarea, html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .is-fullwidth.textarea, html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + html.theme--documenter-dark .is-inline.textarea, html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 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 .radio, html.theme--documenter-dark .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + html.theme--documenter-dark .radio input, html.theme--documenter-dark .checkbox input { + cursor: pointer; } + html.theme--documenter-dark .radio:hover, html.theme--documenter-dark .checkbox:hover { + color: #8c9b9d; } + html.theme--documenter-dark .radio[disabled], html.theme--documenter-dark .checkbox[disabled], fieldset[disabled] html.theme--documenter-dark .radio, fieldset[disabled] html.theme--documenter-dark .checkbox { + 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.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.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.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]), html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + html.theme--documenter-dark .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.has-addons.has-addons-centered { + justify-content: center; } + html.theme--documenter-dark .field.has-addons.has-addons-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.is-grouped > .control { + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + 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 1em; + 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: 1.25em 1.5em; } + 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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .tile.is-2 { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .tile.is-3 { + flex: none; + width: 25%; } + html.theme--documenter-dark .tile.is-4 { + flex: none; + width: 33.3333333333%; } + html.theme--documenter-dark .tile.is-5 { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .tile.is-6 { + flex: none; + width: 50%; } + html.theme--documenter-dark .tile.is-7 { + flex: none; + width: 58.3333333333%; } + html.theme--documenter-dark .tile.is-8 { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .tile.is-9 { + flex: none; + width: 75%; } + html.theme--documenter-dark .tile.is-10 { + flex: none; + width: 83.3333333333%; } + html.theme--documenter-dark .tile.is-11 { + flex: none; + width: 91.6666666667%; } + 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, #e8e3e4 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, #e8e3e4 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 .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: #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 .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } + html.theme--documenter-dark .hero.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-link strong { + color: inherit; } + html.theme--documenter-dark .hero.is-link .title { + color: #fff; } + html.theme--documenter-dark .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-link .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-link .navbar-menu { + background-color: #1abc9c; } } + html.theme--documenter-dark .hero.is-link .navbar-item, + html.theme--documenter-dark .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-link .navbar-link:hover, + html.theme--documenter-dark .hero.is-link .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-link .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs li.is-active a { + 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 .content kbd, html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + 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 pre { + position: relative; + overflow: hidden; } + html.theme--documenter-dark pre code, html.theme--documenter-dark pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + html.theme--documenter-dark pre code:first-of-type, html.theme--documenter-dark pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + html.theme--documenter-dark pre code:last-of-type, html.theme--documenter-dark pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + html.theme--documenter-dark pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #fff; + cursor: pointer; + text-align: center; } + html.theme--documenter-dark pre .copy-button:focus, html.theme--documenter-dark pre .copy-button:hover { + opacity: 1; + background: rgba(255, 255, 255, 0.1); + color: #1abc9c; } + html.theme--documenter-dark pre .copy-button.success { + color: #259a12; + opacity: 1; } + html.theme--documenter-dark pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + html.theme--documenter-dark pre:hover .copy-button { + opacity: 1; } + html.theme--documenter-dark .admonition { + background-color: #282f2f; + border-style: solid; + border-width: 1px; + border-color: #5e6d6f; + border-radius: 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.5rem 0.75rem; + position: relative; } + html.theme--documenter-dark .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + html.theme--documenter-dark .admonition-body { + color: #fff; + padding: 0.5rem 0.75rem; } + html.theme--documenter-dark .admonition-body pre { + background-color: #282f2f; } + html.theme--documenter-dark .admonition-body code { + background-color: rgba(255, 255, 255, 0.05); } + html.theme--documenter-dark .docstring { + margin-bottom: 1em; + background-color: 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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > section:last-child { + border-bottom: none; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + html.theme--documenter-dark .documenter-example-output { + background-color: #1f2424; } + html.theme--documenter-dark .outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #282f2f; + border-bottom: 3px solid #9e1b0d; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + html.theme--documenter-dark .outdated-warning-overlay a { + color: #1abc9c; } + html.theme--documenter-dark .outdated-warning-overlay a:hover { + color: #1dd2af; } + html.theme--documenter-dark .content pre { + border: 1px solid #5e6d6f; } + html.theme--documenter-dark .content code { + font-weight: inherit; } + html.theme--documenter-dark .content a code { + color: #1abc9c; } + html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code { + color: #f2f2f2; } + html.theme--documenter-dark .content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child { + margin-top: 0; } + html.theme--documenter-dark pre, html.theme--documenter-dark code { + font-variant-ligatures: no-contextual; } + html.theme--documenter-dark .breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover { + color: #f2f2f2; } + html.theme--documenter-dark .hljs { + background: initial !important; } + html.theme--documenter-dark .katex .katex-mathml { + top: 0; + right: 0; } + html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display { + margin: 0.5em 0 !important; } + html.theme--documenter-dark html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + html.theme--documenter-dark li.no-marker { + list-style: none; } + html.theme--documenter-dark #documenter .docs-main > article { + overflow-wrap: break-word; } + html.theme--documenter-dark #documenter .docs-main > article .math-container { + overflow-x: auto; + overflow-y: hidden; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main { + width: 100%; } + html.theme--documenter-dark #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + background-color: #1f2424; + border-bottom: 1px solid #5e6d6f; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-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-package-name a, html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover { + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #5e6d6f; + display: none; + padding: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #5e6d6f; + padding-bottom: 1.5rem; + /* 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 .ansi span.sgr1 { + font-weight: bolder; } + html.theme--documenter-dark .ansi span.sgr2 { + font-weight: lighter; } + html.theme--documenter-dark .ansi span.sgr3 { + font-style: italic; } + html.theme--documenter-dark .ansi span.sgr4 { + text-decoration: underline; } + html.theme--documenter-dark .ansi span.sgr7 { + color: #1f2424; + background-color: #fff; } + html.theme--documenter-dark .ansi span.sgr8 { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr8 span { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr9 { + text-decoration: line-through; } + html.theme--documenter-dark .ansi span.sgr30 { + color: #242424; } + html.theme--documenter-dark .ansi span.sgr31 { + color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr32 { + color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr33 { + color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr34 { + color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr35 { + color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr36 { + color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr37 { + color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr40 { + background-color: #242424; } + html.theme--documenter-dark .ansi span.sgr41 { + background-color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr42 { + background-color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr43 { + background-color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr44 { + background-color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr45 { + background-color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr46 { + background-color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr47 { + background-color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr90 { + color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr91 { + color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr92 { + color: #79d462; } + html.theme--documenter-dark .ansi span.sgr93 { + color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr94 { + color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr95 { + color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr96 { + color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr97 { + color: #ecf0f1; } + html.theme--documenter-dark .ansi span.sgr100 { + background-color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr101 { + background-color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr102 { + background-color: #79d462; } + html.theme--documenter-dark .ansi span.sgr103 { + background-color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr104 { + background-color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr105 { + background-color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr106 { + background-color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr107 { + background-color: #ecf0f1; } + html.theme--documenter-dark code.language-julia-repl > span.hljs-meta { + color: #4fb43a; + font-weight: bolder; } + html.theme--documenter-dark .hljs { + background: #2b2b2b; + color: #f8f8f2; } + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-quote { + color: #d4d0ab; } + html.theme--documenter-dark .hljs-variable, + html.theme--documenter-dark .hljs-template-variable, + html.theme--documenter-dark .hljs-tag, + html.theme--documenter-dark .hljs-name, + html.theme--documenter-dark .hljs-selector-id, + html.theme--documenter-dark .hljs-selector-class, + html.theme--documenter-dark .hljs-regexp, + html.theme--documenter-dark .hljs-deletion { + color: #ffa07a; } + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-link { + color: #f5ab35; } + html.theme--documenter-dark .hljs-attribute { + color: #ffd700; } + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-addition { + color: #abe338; } + html.theme--documenter-dark .hljs-title, + html.theme--documenter-dark .hljs-section { + color: #00e0e0; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + color: #dcc6e0; } + html.theme--documenter-dark .hljs-emphasis { + font-style: italic; } + html.theme--documenter-dark .hljs-strong { + font-weight: bold; } + @media screen and (-ms-high-contrast: active) { + html.theme--documenter-dark .hljs-addition, + html.theme--documenter-dark .hljs-attribute, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-link, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-quote { + color: highlight; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + font-weight: bold; } } + html.theme--documenter-dark .hljs-subst { + color: #f8f8f2; } diff --git a/v0.1.1/assets/themes/documenter-light.css b/v0.1.1/assets/themes/documenter-light.css new file mode 100644 index 0000000..9595d5b --- /dev/null +++ b/v0.1.1/assets/themes/documenter-light.css @@ -0,0 +1,7738 @@ +@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); } } + +.tabs, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .breadcrumb, .file, .button, .is-unselectable, .modal-close, .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.navbar-link:not(.is-arrowless)::after, .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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; } + +.admonition:not(:last-child), .tabs:not(:last-child), .message:not(:last-child), .list:not(:last-child), .level:not(:last-child), .breadcrumb:not(:last-child), .highlight:not(:last-child), .block:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .table-container:not(:last-child), .table:not(:last-child), .progress:not(:last-child), .notification:not(:last-child), .content:not(:last-child), .box:not(:last-child) { + margin-bottom: 1.5rem; } + +.modal-close, .delete { + -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; } + .modal-close::before, .delete::before, .modal-close::after, .delete::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .modal-close::before, .delete::before { + height: 2px; + width: 50%; } + .modal-close::after, .delete::after { + height: 50%; + width: 2px; } + .modal-close:hover, .delete:hover, .modal-close:focus, .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + .modal-close:active, .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close, .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.modal-close, .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.modal-close, .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.control.is-loading::after, .select.is-loading::after, .loader, .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.hero-video, .modal-background, .modal, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, +.image.is-square .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +.image.is-1by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +.image.is-5by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +.image.is-4by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +.image.is-3by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +.image.is-5by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +.image.is-16by9 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +.image.is-2by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +.image.is-3by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +.image.is-4by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +.image.is-3by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +.image.is-2by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +.image.is-3by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +.image.is-9by16 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +.image.is-1by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +.image.is-1by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .file-cta, +.file-name, .select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input, .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.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; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .file-cta:focus, + .file-name:focus, .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .button:focus, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .is-focused.file-cta, + .is-focused.file-name, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.button, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .file-cta:active, + .file-name:active, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .button:active, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis, .is-active.file-cta, + .is-active.file-name, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.button { + outline: none; } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled], .file-cta[disabled], + .file-name[disabled], .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .button[disabled], fieldset[disabled] .pagination-previous, + fieldset[disabled] .pagination-next, + fieldset[disabled] .pagination-link, + fieldset[disabled] .pagination-ellipsis, fieldset[disabled] .file-cta, + fieldset[disabled] .file-name, fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + +body { + color: #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: #1081cb !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: #6b6b6b !important; } + +.has-background-grey { + background-color: #6b6b6b !important; } + +.has-text-grey-light { + color: #b5b5b5 !important; } + +.has-background-grey-light { + background-color: #b5b5b5 !important; } + +.has-text-grey-lighter { + color: #dbdbdb !important; } + +.has-background-grey-lighter { + background-color: #dbdbdb !important; } + +.has-text-white-ter { + color: 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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: #3c5dcd; + color: #363636; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #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: #1497ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .button.is-info[disabled], fieldset[disabled] .button.is-info { + background-color: #209cee; + border-color: 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: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning[disabled], fieldset[disabled] .button.is-warning { + background-color: #ffdd57; + border-color: 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: #6b6b6b; + 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #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 .content kbd, .content .tags kbd, .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 1rem; } + .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag, .tags.is-centered .content kbd, .content .tags.is-centered kbd, .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + .tags.has-addons .tag, .tags.has-addons .content kbd, .content .tags.has-addons kbd, .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + +.tag:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink: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, .content kbd:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag.is-white:not(body), .content kbd.is-white:not(body), .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + .tag.is-black:not(body), .content kbd.is-black:not(body), .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + .tag.is-light:not(body), .content kbd.is-light:not(body), .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: whitesmoke; + color: #363636; } + .tag.is-dark:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink.is-dark:not(body), .content .docstring > section > kbd:not(body) { + background-color: #363636; + color: whitesmoke; } + .tag.is-primary:not(body), .content kbd.is-primary:not(body), .docstring > section > a.docs-sourcelink:not(body) { + background-color: #4eb5de; + color: #fff; } + .tag.is-link:not(body), .content kbd.is-link:not(body), .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #2e63b8; + color: #fff; } + .tag.is-info:not(body), .content kbd.is-info:not(body), .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #209cee; + color: #fff; } + .tag.is-success:not(body), .content kbd.is-success:not(body), .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #22c35b; + color: #fff; } + .tag.is-warning:not(body), .content kbd.is-warning:not(body), .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .tag.is-danger:not(body), .content kbd.is-danger:not(body), .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #da0b00; + color: #fff; } + .tag.is-normal:not(body), .content kbd.is-normal:not(body), .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.75rem; } + .tag.is-medium:not(body), .content kbd.is-medium:not(body), .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 1rem; } + .tag.is-large:not(body), .content kbd.is-large:not(body), .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag.is-delete:not(body), .content kbd.is-delete:not(body), .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + .tag.is-delete:not(body):hover, .content kbd.is-delete:not(body):hover, .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, .tag.is-delete:not(body):focus, .content kbd.is-delete:not(body):focus, .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #e8e8e8; } + .tag.is-delete:not(body):active, .content kbd.is-delete:not(body):active, .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #dbdbdb; } + .tag.is-rounded:not(body), #documenter .docs-sidebar form.docs-search > input:not(body), .content kbd.is-rounded:not(body), #documenter .docs-sidebar .content form.docs-search > input:not(body), .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, .content .title kbd, .title .docstring > section > a.docs-sourcelink, + .subtitle .tag, + .subtitle .content kbd, + .content .subtitle kbd, + .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + +.title { + color: #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; } + +.select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input { + background-color: white; + border-color: #dbdbdb; + border-radius: 4px; + color: #363636; } + .select select::-moz-placeholder, .textarea::-moz-placeholder, .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-moz-placeholder, .textarea:-moz-placeholder, .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-ms-input-placeholder, .textarea:-ms-input-placeholder, .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:hover, .textarea:hover, .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .select select.is-hovered, .is-hovered.textarea, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #b5b5b5; } + .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #2e63b8; + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #6b6b6b; } + .select select[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] .select select::-moz-placeholder, .select fieldset[disabled] select::-moz-placeholder, fieldset[disabled] .textarea::-moz-placeholder, fieldset[disabled] .input::-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] .select select::-webkit-input-placeholder, .select fieldset[disabled] select::-webkit-input-placeholder, fieldset[disabled] .textarea::-webkit-input-placeholder, fieldset[disabled] .input::-webkit-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] .select select:-moz-placeholder, .select fieldset[disabled] select:-moz-placeholder, fieldset[disabled] .textarea:-moz-placeholder, fieldset[disabled] .input:-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] .select select:-ms-input-placeholder, .select fieldset[disabled] select:-ms-input-placeholder, fieldset[disabled] .textarea:-ms-input-placeholder, fieldset[disabled] .input:-ms-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + +.textarea, .input, #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .textarea[readonly], .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + .is-white.textarea, .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + .is-white.textarea:focus, .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.is-focused.textarea, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-white.textarea:active, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.is-active.textarea, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .is-black.textarea, .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + .is-black.textarea:focus, .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.is-focused.textarea, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-black.textarea:active, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.is-active.textarea, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .is-light.textarea, .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: whitesmoke; } + .is-light.textarea:focus, .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.is-focused.textarea, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-light.textarea:active, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.is-active.textarea, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .is-dark.textarea, .content kbd.textarea, .is-dark.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .content kbd.input { + border-color: #363636; } + .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .content kbd.input:focus, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .content kbd.is-focused.input, #documenter .docs-sidebar .content form.docs-search > input.is-focused, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .content kbd.input:active, .is-dark.is-active.textarea, .content kbd.is-active.textarea, .is-dark.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .content kbd.is-active.input, #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink, .is-primary.input, #documenter .docs-sidebar form.docs-search > input.is-primary, .docstring > section > a.input.docs-sourcelink { + border-color: #4eb5de; } + .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.input:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .docstring > section > a.input.docs-sourcelink:focus, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .docstring > section > a.is-focused.input.docs-sourcelink, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.input:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .docstring > section > a.input.docs-sourcelink:active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink, .is-primary.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .is-link.textarea, .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #2e63b8; } + .is-link.textarea:focus, .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.is-focused.textarea, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-link.textarea:active, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.is-active.textarea, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .is-info.textarea, .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #209cee; } + .is-info.textarea:focus, .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.is-focused.textarea, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-info.textarea:active, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.is-active.textarea, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .is-success.textarea, .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #22c35b; } + .is-success.textarea:focus, .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.is-focused.textarea, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-success.textarea:active, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.is-active.textarea, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .is-warning.textarea, .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ffdd57; } + .is-warning.textarea:focus, .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.is-focused.textarea, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-warning.textarea:active, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.is-active.textarea, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .is-danger.textarea, .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #da0b00; } + .is-danger.textarea:focus, .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.is-focused.textarea, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-danger.textarea:active, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.is-active.textarea, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .is-small.textarea, .is-small.input, #documenter .docs-sidebar form.docs-search > input { + border-radius: 2px; + font-size: 0.75rem; } + .is-medium.textarea, .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + .is-large.textarea, .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + .is-fullwidth.textarea, .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + .is-inline.textarea, .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + +.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { + border-radius: 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; } + +.radio, .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .radio input, .checkbox input { + cursor: pointer; } + .radio:hover, .checkbox:hover { + color: #363636; } + .radio[disabled], .checkbox[disabled], fieldset[disabled] .radio, fieldset[disabled] .checkbox { + color: #6b6b6b; + 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: #1190e3; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #22c35b; } + .select.is-success select { + border-color: #22c35b; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #1ead51; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #ffdd57; } + .select.is-warning select { + border-color: #ffdd57; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83e; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #da0b00; } + .select.is-danger select { + border-color: #da0b00; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #c10a00; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 2px; + font-size: 0.75rem; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: #6b6b6b; } + .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.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: #1497ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-danger .file-cta { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { + font-size: 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.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.is-hovered:not([disabled]), + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + .field.has-addons .control .input.is-hovered:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button.is-focused:not([disabled]), .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button.is-active:not([disabled]), + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + .field.has-addons .control .input.is-focused:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + .field.has-addons .control .input.is-active:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select.is-focused:not([disabled]), + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button.is-focused:not([disabled]):hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button.is-active:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + .field.has-addons .control .input.is-focused:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + .field.has-addons .control .input.is-active:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select.is-focused:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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: #6b6b6b; } + .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + +.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: #6b6b6b; + 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: #12537d; } + .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: #3c3108; } + .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 1em; + 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: 1.25em 1.5em; } + .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: #1190e3; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:focus, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:focus, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:focus, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #22c35b; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:focus, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:focus, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:focus, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:focus, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #22c35b; + color: #fff; } } + .navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:focus, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-burger { + color: rgba(0, 0, 0, 0.7); } + @media screen and (min-width: 1056px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:focus, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:focus, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:focus, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } } + .navbar.is-danger { + background-color: #da0b00; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:focus, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:focus, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:focus, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:focus, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #da0b00; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 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: #3c5dcd; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #6b6b6b; + 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: #6b6b6b; + 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.3333333333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .tile.is-2 { + flex: none; + width: 16.6666666667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.3333333333%; } + .tile.is-5 { + flex: none; + width: 41.6666666667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.3333333333%; } + .tile.is-8 { + flex: none; + width: 66.6666666667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.3333333333%; } + .tile.is-11 { + flex: none; + width: 91.6666666667%; } + .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, #e8e3e4 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e8e3e4 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, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: 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, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #4eb5de; } + .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } + .hero.is-link { + background-color: #2e63b8; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-link .navbar-menu { + background-color: #2e63b8; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2e63b8; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #22c35b; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-success .navbar-menu { + background-color: #22c35b; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #22c35b; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } + .hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); } + @media screen and (max-width: 1055px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } } + .hero.is-danger { + background-color: #da0b00; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-danger .navbar-menu { + background-color: #da0b00; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + 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; } + +pre { + position: relative; + overflow: hidden; } + pre code, pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + pre code:first-of-type, pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + pre code:last-of-type, pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #222222; + cursor: pointer; + text-align: center; } + pre .copy-button:focus, pre .copy-button:hover { + opacity: 1; + background: rgba(34, 34, 34, 0.1); + color: #2e63b8; } + pre .copy-button.success { + color: #259a12; + opacity: 1; } + pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + pre:hover .copy-button { + opacity: 1; } + +.admonition { + background-color: #b5b5b5; + border-style: solid; + border-width: 1px; + border-color: #363636; + border-radius: 4px; + font-size: 1rem; } + .admonition strong { + color: currentColor; } + .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 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: #def0fc; + border-color: #209cee; } + .admonition.is-info > .admonition-header { + background-color: #209cee; + color: #fff; } + .admonition.is-info > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-success { + background-color: #bdf4d1; + border-color: #22c35b; } + .admonition.is-success > .admonition-header { + background-color: #22c35b; + color: #fff; } + .admonition.is-success > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning { + background-color: #fff3c5; + border-color: #ffdd57; } + .admonition.is-warning > .admonition-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-danger { + background-color: #ffaba7; + border-color: #da0b00; } + .admonition.is-danger > .admonition-header { + background-color: #da0b00; + color: #fff; } + .admonition.is-danger > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-compat { + background-color: #bdeff5; + border-color: #1db5c9; } + .admonition.is-compat > .admonition-header { + background-color: #1db5c9; + color: #fff; } + .admonition.is-compat > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + +.admonition-header { + color: #fff; + background-color: #363636; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.5rem 0.75rem; + position: relative; } + .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + +.admonition-body { + color: #222222; + padding: 0.5rem 0.75rem; } + .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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #dbdbdb; } + .docstring > section:last-child { + border-bottom: none; } + .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + +.documenter-example-output { + background-color: white; } + +.outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #ffaba7; + color: rgba(0, 0, 0, 0.7); + border-bottom: 3px solid #da0b00; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + .outdated-warning-overlay a { + color: #2e63b8; } + .outdated-warning-overlay a:hover { + color: #363636; } + +.content pre { + border: 1px solid #dbdbdb; } + +.content code { + font-weight: inherit; } + +.content a code { + color: #2e63b8; } + +.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { + color: #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; } + +pre, code { + font-variant-ligatures: no-contextual; } + +.breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { + color: #222222; } + +.hljs { + background: initial !important; } + +.katex .katex-mathml { + top: 0; + right: 0; } + +.katex-display, mjx-container, .MathJax_Display { + margin: 0.5em 0 !important; } + +html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + +li.no-marker { + list-style: none; } + +/* 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; + overflow-y: hidden; } + +@media screen and (min-width: 1056px) { + #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + +@media screen and (max-width: 1055px) { + #documenter .docs-main { + width: 100%; } + #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + #documenter .docs-main > header, #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + +#documenter .docs-main header.docs-navbar { + background-color: 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-package-name a, #documenter .docs-sidebar .docs-package-name a:hover { + color: #0a0a0a; } + #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #dbdbdb; + display: none; + padding: 0.5rem; } + #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #dbdbdb; + padding-bottom: 1.5rem; + /* 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; } + +.ansi span.sgr1 { + font-weight: bolder; } + +.ansi span.sgr2 { + font-weight: lighter; } + +.ansi span.sgr3 { + font-style: italic; } + +.ansi span.sgr4 { + text-decoration: underline; } + +.ansi span.sgr7 { + color: white; + background-color: #222222; } + +.ansi span.sgr8 { + color: transparent; } + .ansi span.sgr8 span { + color: transparent; } + +.ansi span.sgr9 { + text-decoration: line-through; } + +.ansi span.sgr30 { + color: #242424; } + +.ansi span.sgr31 { + color: #a7201f; } + +.ansi span.sgr32 { + color: #066f00; } + +.ansi span.sgr33 { + color: #856b00; } + +.ansi span.sgr34 { + color: #2149b0; } + +.ansi span.sgr35 { + color: #7d4498; } + +.ansi span.sgr36 { + color: #007989; } + +.ansi span.sgr37 { + color: gray; } + +.ansi span.sgr40 { + background-color: #242424; } + +.ansi span.sgr41 { + background-color: #a7201f; } + +.ansi span.sgr42 { + background-color: #066f00; } + +.ansi span.sgr43 { + background-color: #856b00; } + +.ansi span.sgr44 { + background-color: #2149b0; } + +.ansi span.sgr45 { + background-color: #7d4498; } + +.ansi span.sgr46 { + background-color: #007989; } + +.ansi span.sgr47 { + background-color: gray; } + +.ansi span.sgr90 { + color: #616161; } + +.ansi span.sgr91 { + color: #cb3c33; } + +.ansi span.sgr92 { + color: #0e8300; } + +.ansi span.sgr93 { + color: #a98800; } + +.ansi span.sgr94 { + color: #3c5dcd; } + +.ansi span.sgr95 { + color: #9256af; } + +.ansi span.sgr96 { + color: #008fa3; } + +.ansi span.sgr97 { + color: whitesmoke; } + +.ansi span.sgr100 { + background-color: #616161; } + +.ansi span.sgr101 { + background-color: #cb3c33; } + +.ansi span.sgr102 { + background-color: #0e8300; } + +.ansi span.sgr103 { + background-color: #a98800; } + +.ansi span.sgr104 { + background-color: #3c5dcd; } + +.ansi span.sgr105 { + background-color: #9256af; } + +.ansi span.sgr106 { + background-color: #008fa3; } + +.ansi span.sgr107 { + background-color: whitesmoke; } + +code.language-julia-repl > span.hljs-meta { + color: #066f00; + font-weight: bolder; } + +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/ +/* +This is left on purpose making default.css the single file that can be lifted +as-is from the repository directly without the need for a build step + +Typically this "required" baseline CSS is added by `makestuff.js` during build. +*/ +pre code.hljs { + display: block; + overflow-x: auto; } + +code.hljs { + padding: 3px 5px; } + +/* end baseline CSS */ +.hljs { + background: #F0F0F0; + color: #444; } + +/* Base color: saturation 0; */ +.hljs-subst { + /* default */ } + +/* purposely ignored */ +.hljs-comment { + color: #888888; } + +.hljs-tag, +.hljs-punctuation { + color: #444a; } + +.hljs-tag .hljs-name, +.hljs-tag .hljs-attr { + color: #444; } + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta .hljs-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; } + +/* 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-operator, +.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 .hljs-string { + color: #4d99bf; } + +/* Misc effects */ +.hljs-emphasis { + font-style: italic; } + +.hljs-strong { + font-weight: bold; } diff --git a/v0.1.1/assets/themeswap.js b/v0.1.1/assets/themeswap.js new file mode 100644 index 0000000..c58e993 --- /dev/null +++ b/v0.1.1/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/v0.1.1/assets/warner.js b/v0.1.1/assets/warner.js new file mode 100644 index 0000000..5531c88 --- /dev/null +++ b/v0.1.1/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
                Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/v0.1.1/contributing/index.html b/v0.1.1/contributing/index.html new file mode 100644 index 0000000..d570f32 --- /dev/null +++ b/v0.1.1/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

                Contributing to Manopt.jl

                First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

                The following is a set of guidelines to ManoptExamples.jl.

                Table of Contents

                I just have a question

                The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

                How can I file an issue?

                If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

                How can I contribute?

                Add an objective

                The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

                If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

                If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

                • cost functions are always of the form cost_ and a fitting name
                • gradient functions are always of the the gradient_ and a fitting name, followed by an !

                for in-place gradients and by !! if it is a struct that can provide both.

                It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

                Add an example

                If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

                Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

                Code style

                We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

                We also follow a few internal conventions:

                • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
                • within a file the structs should come first and functions second. The only exception are constructors for the structs
                • within both blocks an alphabetical order is preferable.
                • The above implies that the mutating variant of a function follows the non-mutating variant.
                • There should be no dangling = signs.
                • Always add a newline between things of different types (struct/method/const).
                • Always add a newline between methods for different functions (including in-place/non-mutating variants).
                • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
                • All import/using/include should be in the main module file.
                • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
                • the Quarto Markdown files are excluded from this formatting.
                diff --git a/v0.1.1/examples/Riemannian-mean/index.html b/v0.1.1/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..805fef6 --- /dev/null +++ b/v0.1.1/examples/Riemannian-mean/index.html @@ -0,0 +1,32 @@ + +Riemannian Mean · ManoptExamples.jl

                The Riemannian Center of Mass (mean)

                Ronny Bergmann 7/2/23

                Preliminary Notes

                Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

                For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.

                The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

                There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

                For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

                using Pkg;
                +Pkg.activate("."); # use the example environment,

                Loading packages and defining data

                Loading the necessary packages and defining a data set on a manifold

                using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
                +Random.seed!(42)
                +M = Sphere(2)
                +n = 100
                +σ = π / 8
                +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
                +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

                Variant 1: Using the functions

                We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.

                f = ManoptExamples.RiemannianMeanCost(data)
                +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

                Then we can for example directly call a gradient descent as

                x1 = gradient_descent(M, f, grad_f, first(data))
                3-element Vector{Float64}:
                + 0.6868392794764022
                + 0.006531600682543096
                + 0.726779982085954

                Variant 2: Using the objective

                A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

                rmo = ManoptExamples.Riemannian_mean_objective(
                +    M, data,
                +    evaluation=InplaceEvaluation(),
                +)

                Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

                rmp = DefaultManoptProblem(M, rmo)

                This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

                s1 = GradientDescentState(M, copy(M, first(data)))
                +solve!(rmp, s1)
                +x2 = get_solver_result(s1)
                3-element Vector{Float64}:
                + 0.6868395649618767
                + 0.006531393870513675
                + 0.7267797141480264

                but we can easily use a conjugate gradient instead

                s2 = ConjugateGradientDescentState(
                +    M,
                +    copy(M, first(data)),
                +    StopAfterIteration(100),
                +    ArmijoLinesearch(M),
                +    FletcherReevesCoefficient(),
                +)
                +solve!(rmp, s2)
                +x3 = get_solver_result(s2)
                3-element Vector{Float64}:
                + 0.6868393265070905
                + 0.006531566700408201
                + 0.7267799379452656
                diff --git a/v0.1.1/examples/Robust-PCA/index.html b/v0.1.1/examples/Robust-PCA/index.html new file mode 100644 index 0000000..b1dee0c --- /dev/null +++ b/v0.1.1/examples/Robust-PCA/index.html @@ -0,0 +1,63 @@ + +Robust PCA · ManoptExamples.jl

                The Robust PCA computed on the Grassmann manifold

                Ronny Bergmann, Laura Weigl 7/2/23

                For this example we first load the necessary packages.

                using Pkg;
                +Pkg.activate("."); # use the example environment,
                using LinearAlgebra, Random, Statistics
                +using Manifolds, Manopt, ManoptExamples
                +using Plots
                +Random.seed!(42)

                Computing a Robust PCA

                For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

                We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

                \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

                The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

                \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

                where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

                The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

                First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

                n = 40
                +d = 2
                +outliers = 15
                +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
                +# Outliers:
                +permute = shuffle(1:size(data, 2))'
                +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
                +# We are looking for a line here so we set
                +m = 1

                We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

                M = Grassmann(d,m);

                For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

                Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

                Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

                The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

                We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

                ε = 1.0
                +iterations = 6
                +reduction = 0.5
                +U, S, V = svd(data);
                +p0 = U[:, 1:m]
                2×1 Matrix{Float64}:
                + -0.7494248652139394
                +  0.6620893983436593

                Let’s generate the cost and gradient we aim to use here

                f = ManoptExamples.RobustPCACost(M, data, ε)
                +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
                ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

                and check the initial cost

                f(M, p0)
                9.43069094790552

                Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

                q = copy(M, p0)
                +εi = ε
                +for i in 1:iterations
                +    f.ε = εi
                +    grad_f.ε = εi
                +    global q = trust_regions(
                +        M,
                +        f,
                +        grad_f,
                +        ApproxHessianFiniteDifference(
                +            M, q, f;
                +            vector_transport_method=ProjectionTransport(),
                +            retraction_method=PolarRetraction(),
                +        ),
                +        q;
                +        (project!)=project!,
                +    )
                +    global εi *= reduction
                +end

                When finally setting ε we can investigate the final cost

                f.ε = 0.0
                +f(M, q)
                9.412965075156471

                Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

                fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
                +plot!(
                +    fig,
                +    q[1] * [-1, 1] * 100,
                +    q[2] * [-1, 1] * 100;
                +    linecolor=:red,
                +    linewidth=2,
                +    label="Robust PCA",
                +);
                +plot!(
                +    fig,
                +    p0[1] * [-1, 1] * 100,
                +    p0[2] * [-1, 1] * 100;
                +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
                +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
                +    linewidth=2,
                +    linecolor=:black,
                +    label="Standard SVD",
                +)

                Figure 1: The result of the robust PCA vs. SVD

                diff --git a/v0.1.1/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.png b/v0.1.1/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..183856a017f03af873ba4350d410763489d5c7cb GIT binary patch literal 33168 zcmZsD1z6O3xAj<{Qqm$SNJuJ@N)6rJNGd2PAe{pkh;&IycS|=YN=bKvba(f+@!a>l z@4ff)Jm--|X8!Zbz1LoA?eUVA6~nrD=OzMyz>*LbRzx5!dms>(TCZP*e_`Aaser%G z^rXau5$6~G#aE|=AQ0pT31Izt0h^=-mltf42}D06bLA!N~9GH z(3o3Cxm#}=9JW{g#QZ?=yNO6qnLr{#nclWgX%D5QVUsmt<>uBKKvH10&Rgold;Yt8 z-UXT0{^8hajTb|Tkq93?`-$YcMfeNhjzmKs0h>Q+yARCEvc$($WUDsxvdQ8RNA@2;h)$xIRgcA3P9MaH^Y` z

                M1)9B^jUjJrMhcv!*R>F4Of)T6E`~eJ0LQyFx;p1#P9&yPe%Eic#)Ypkl-h8(7{Z)yj>`u&>#S3tk9J4bWokGmvH^l;$ram42@ zp>#Z78~l<+O5tJVqc8qGtdgwt+p4n$yIMIbuA8H_aw|1#)lk6|;rGgd9d!SN-$@$W~YvF#%tQgB3^ z*(6Ja|9#U&1ySeUH5HPMb*q~GzT@181P1$t!)#0viQGA0=H%-3z>r3V!{d-r zzr&21KSY2hSZL4{LNhZXJm0~3?>YhzuOqbt2?-Y$7YkxT>l1gEjn7=1&c2HJ#;?42jt-xc>ajM?Iymg* zCNdp=b}*4^f}L+Se!s#e;|XH}nS5qmp02X;&WJ_rBaI^QeruolqPGunG{uI8ZDy`V zMxP(o6Eo=;85uQk1-oQrWZ-%Uo0ynLqX#ij1bwd8qobo^z9(FB-9r$L%e8BB=RHhn z8x7s$qIOa*U%o6o6Y?fb3$i;t5~;^2Rvppei_1z&qnUm}h11w5DJjWFw49Y!v$eUI zk)9s7ILb(rqb-F&tf+wNcUR*1bC#HUaPC8bgDKYLcQSpw(rulW_$W9zBZGKa_wzF| zm(EU)u`n_1RtA|}4mL(gEm~}xh|ru3|AQ(C1X+p!S{Ou9#pa#Z_V%@V|A z(vp)uUc8+dH!?Ev#?{NLtc5*ka?ueH$;ru0TtCjw#9G1>ESby80#^)S?IKB^yl~(0 z^Bo|{9Dm0A_7A`4R+9)BzJe$AJw+uY!?vj1l_6GQ;&9vL{${Qp9eh3Z6AI5s$}91O z$W&p&S}{pEvUSn#g)Y2SRuK?ZR!Ok>bBtVNYi(`4-Au{!_fF7jmYQSTys4M3{_fqo zOP4ND1c|5Ka6R%0W6H~$Nv4XF#X=xh?5XHoQWaFP)}2hwxw8B0dDHA42L$-PpvT;v zSF>O4e+2W;uC!wczsu+9GWE+#E)H2-P%vC-5eE;IzLKLZz@Qdf;dD4&ZL+q;5~Hy; zd9sA|pZ_ygYQnbO=W`v+)#m1iZc|1J&YGSMUs+jUVP!?fy#03S*A0C9kgs3wM#|Re zUE6e^BFL19mG<&tiMfM7yz*}|AiZ;kMYDk_4kk5LY2VS>`t`}ny3^x*Gc&VNvyq2A zi=20-wk2q(?Crh%LKl1CW>Pd8li>$_`XnkWd^MmE-%B_SwfCH#pWoKDcqR3Gjb<-)<~)CB^Z%JuVy)dH1f!$reRT z#zR}^cnJ}IEqEE3%WBe_4s)nM9pC45>h0~_sq?@nh<4u8J36(;^D>$e=6cI-w|yDG zkI{4WDB`oz?ow!ID7!&x#PUF%riRAaM6Ir!wc9SC*{HaR3dB(nu@-Y31j0xnN)(13 z7N%-rvxCETBCo2-VL2uII9yXxlOd^mz8$5~92CS7MSwtP1V8M7P@ijPt+`@b+ev?3;Q2H+ zdI}1?W}`zOiV(qz(**?uk*tR1gWo1+gVWP#O-)UelzL>MIV4_r4-^^qJVYX6e@=e+ z^2Nc)Y3tC1WbD9t@6B*kBzz>hkKIaOy)W$AWm?HsUtYI_#c`w8Cj*b?7c=S|6MC5+J(-+?nZf*VAdRi`2y78Z8--S@h>sn$r=)YMdo0!QVkFLXtw z#B{WQc}!-bv_2$ooDNM^=KChx&Z|pH?f2Kl&a1zrr!UNg6tc0iW8Azs&RjR$7|_<* zs^i*U{i-?m`}gkwehDclgruaEMqP<9-1h!=Ijs)2W_^er9SsWTD5r@^5`SIc7$E(D|#Js%K;c95`!}9WSt^TbmS3V5H zx}6xav9Uq4d}(IJYcXCm+Y&xe?QH+^6V~tFzy0oR^P09s2$-0#*=GKps;8HfWV6uG zPYrQ%IJ5lF*@&emFaLczfb`=$+0*NlDGKMx>WpD&X@*u-R(g6fk_zY`>vf??q|g)pc|hn+17i=i`dFO1srN`1sa;zQ2PTVK!cMc<(hMHJoxu zIf$mHqYvmf5J^hR$LM$I!~#;A#1$11M0|`^H8SKNQMCE|@(#!NdYkt4mhl>Bae=w<6*KyNSW3e z&FJ+N%E6(o$)Cvy0(>X@TDb%?@N|QOlpW^N^MPha{7XwqF35?ov1+&^6AUwRb7<)3 z>tmJsKR%%2MRfF+)C3>8D6;@))5KVs=EA3uZEb3L!ouS1VA>+h-{$DY3D!la+R=6_1k6-BPb*n1+|RkXBJjvxGc< z-W5cdoFbB?))Pz}OakydDx7He0yY*p@{H$dS1PNhh|In&vgJ@YTfRi;q`f{G{;Raf z_7hH8GF5k1!h~B|UQO`eH`qn3qEX0IwoAQ5MQqouaopI$?Ffq<%XFK3>DpngO~u*s z?d6w1{)&ns11!`TCo@Wu4XOi%N7VsdMuXp8)?A8XFe2@&-rn({o~2fp)Xq6LM@@1o zO|dEnUM@BkisncNzJ&NQp)qx+WpQ-e!ACFB_wr?BmJUJZou{@kF)}|$0ngAMMt;Ih z`FPdJG9jKkGbcqR`nvu8H3Z@=*?@wg;_zli1L+}g?a7vu2#2P+q66*R3rELt<%gs! zAMx-dQr!{3OJ)*)c)j?^YP;dqW07)D(a@Bd4wyrvq7?Nlv!3@?Hn_u6Rug=F z=y`Ig&@3u=VF?=4qC;kByxk zZqMVzCYh>9%08r|9IlPy;ms&eted`qaIZ4iLh;NNx~JjytN0&#p!rd>7}x9G3uv#p zMNCYSvN$?6CKt;yRB69XDdry$8L3_6piqZzvnWVM*PBCnk4t#EQAxz(Vd6~i_Ngd;`BdO3~6&$;Z0Jer%hHW6@(kmNs zcRL#HNcp{4TWgV&=ict#&FT*Cyip$(7V0r1 zu%V8zN^0I`_NhOj_+IaTkX{W;OTtP6{a_jsLbe!Rct;o)I!ZtjBA z4NfXG6_b!)dx1zvO@s&#mGy9NLg7KvJ#nksNTb@IZ>NfHtZ2+p8;{VFhtQsU%O3=jyncJh_e)6?IKRj>mD zuGf2{{*9cRoSzC$!eF67l7lsAR14x(UERI~)Z$h+C`J)Tyf<##I66A|@#BZTzkk4e z-r&}<;b8(Yxw*M7(NgX0%JSrqFJT~@3;K%%g@rAxt#_Zi`0j;IBP}frsD_HwT$@@` zy>qeWVqyje6r=6`DQhey9!FYgmZnmQHFXEKe|=zR=(H!z@)L%D-`Q9YpOAoyi~D1G zQ<$O)rg-`C<;<)s>L=#Q{SeFd_I5*0b~3Iu07daIKH&AodOgc$Un3$S;EJN7qr-5I z%7xqg&HKFd^qYUYYmcSo=5{)ezpM|5wlyK(HPkf1MGp*OswYO; z)ZAQ(I`=ub{_Z!$PJZ_8QXd0k`_>5Nfjr&Pq9R{k-!I?emzD_dg=A&F#K~b}@BDf9 zcNipsWUTyBQVc9C!B7N*hB`VrT9%IjsBgf|%#}sQ2`*&Su93#ZwmGk%3Wj0$#s@_H z_EU+=u4~;-)mI8<1pLyRY%?`+(v@9tJ4zZDT39mi?i(A&$#$yu)Ola5Zo;h9W~ zr2TsEhb!8Z4-+oN`*K0QT;IsZ;pD(lS9ij&Bi8RW^ZSnZrzX!hqU~1Vje8c>vVKs;d} zEfW)b%*^>_BPG#KE$rUDbr_5wRVo}RG9!gbD}XE{iBh|Yw)|osmtY_Urlt(Hu7AQJ z4GRi-si$YPHPb9d=F^rMcx!7jBkz?L&u=)%R98`q>s+==HYW$0a5<0;8{ga8;SA@* zAtCB^M2X1728Q6r@G)IHwv%>Y`eD3Ema6mq+U%wSP(n2|HNa`W4{^`J-e30k*f}3J zptekY#KZ_j%o9A3y#QLfHjl+34zQl#%X; z<%L~q@V^Hm(gwf)7X~%O4@8ru*!H{<5KXrQhKBI`ZXgh3=%~>hBNG!*5s^)YDyWnt zLLUBe{^dx3rsF$L{{H<)(!8~K1m^h+=9#g!JX7tw50`rT&;Y9AxL|g3 zwKxGN!!+ec78=Qn54VmaWhH}cfK+f`*s%Iu$=jcvanjKgJx3Z&e6URp*b0Hu*&^=vnk#{iT1p(GbD(rgIS z=;*@oa${rT@!=sM0YO<8hvwkd`v@44OGbm%Ixp&w_h7Q zTzC-1n9!HC%y9TefbJDM*J)vTu61}=1FmUA#8)oc-`(9T%lPKC#SYA;o9JG`Y?c(L zt@<`NHpqo(gIxVae`8}~R>O9ejX&?It53roX(F9IL%BCCnwgm>5uy%B0kOzW_S6mN zb10y6EA7mHwu+0>1^!A!rLPf-*&gx-gLGuw1(XrLbX1md9TO9xTHk-b%gshJvVRDm zBpwvk>iDA=AXpv|AC+CRw6$%6Q$A7arlAo9WEVgALD}kjYsOev&_DdoYOt&*z}B0n z(Sn_YE=pF`o}QlV@oHxd4i1QHC+ThVg@!&HZ^-i_TwG|`lqDZrLTJP{>}|p}0wCpm z)f5QFJBHVJZ*~iaAW~9NIFs@5@uISqf>Saw%H7Ug?+4J}dAYc_lxdmE$h3J{=&+g+ znT<>9F}FpDaNCJ9(IEJJ5(k@BnY7Ao-M&2tHvt}GXgF^=kXvj%#>K>B(f*Y)C@AQH z6>9Wf1y(34D@%Clz3|@)-&5;$Zrqc)d3aK2*s(TLD5j}-EL6I`OU=#>^p*>1IUp2B z7fbcHgEuvwZr{EwEGDL@uFm+pAUQEn4=4-aBD>XLNIFeTO{HdiIhv(F9l^gy(0@v< za=19-9~KF^ZGmusGDN4wr5q*=3>DCkZu>_-!2!uCBjfj(meJRsHGWuQxWL1pEm%OK zoEpyyc#Ys-ydHrWA9-4+;8f(lhwGhp;f<>!FWF&8Y#dKp&$r+3sDrh}SJ2Uk&CjK(R0&ba` zK(eN!pis@#DmQ40+MI5LEqPn-O=!WLn!$~9-9>GuD|kP6kXci+GaDXCNT^~x*YvoQ z=f|eyhmV3UZEe~819W=?VS=iK6OV4*ya~nox{lao6rgh+tC=P`rPS8L^HP1_l%}Sp z!t<6cC?)GFSFRkMR7HK(XrHHXJK6Ni$jE?<9>s17fS%~ioy?S!-8qxWpQUy|fh zQKhs@MxE@$WZ~_(=Ep^&aC5{31TMv?Jx!mj%6B1H32Qi0qGMnnWi{}H>$VR>o7Lp^ zcUOShS#~A5eic}yH#3anS73cW=g_XOfjg03Qc`0%-Qa1yI4k137nn%#NS%LqK#G+T zn2Wwaq@BGz69WU#2|k}M{*<|$BXQdRsX#FW1jXj&CLGk$DIX>(T*74Yroab)S;xoE zP7b#Lv%=HKDrP_4ARrV0W$L!L+ZkOOT+KEm{bPsDcmX(nQYUV}3QXH=c%-{xE+q%7j1O09l`ouKD}-7m)1$eFJ-T7T-2HN=xsptYSRGax_a!2eH)% z+1a=Ozy2TS9BNFmqR1?Ud(ZeyOm@cXcY5Ty{oq7u#Rp7k1N-(C(*E;8176foZ+(5r zTCC~%Q&6Pp6|z)|TsTh;lD?isr6cWbw99Qd^${|?tZX~HC_ka>S$8iLGOp%O^azOADEb{{myb}>fwChV@njM-p^}mk z2+3~e9R2;fp;ab?sMF$|i(yK@Q=i?ra|clQ-*UPwik$%%fr^SF-VybGlQ|(SJd9Tn z{Nu0yN&ghi8-ITMgUTx_D}hcv;T^#wla-K2P7-oE5zs}6NKbg6{qqKVzx%vg+}xFL zG~j^2K_Y&v<6>^t?u7v+Q-EJE6HU)BK7db~V5xw^IHPy>^Y9L8dO z!bGQ~eD`bmR0YL{tcH9rFPstf^&X2il~V_d%>lP7{lMngpfbQha~_3y2IC zS`l2>`&>3nqoX{0eCOJx11beI$kT0{w#W~F-TBEr{KCA?^Nfb3v8!uyYqn)>ZjPCm zd0k^D6Tc<(14R6`q+atQ^VWC|qM+T&XkkCzxq{SXsfKEMl zF#Z3B_FvA)+FO%pZthLEvO4CI^a^2=-`Pn1=%*(R@%5`POvCoC% zBwD0NU#5zK!?S?Ktjx@<-CY=Ky2(awj%*AqXQb0kJf)b?=rekza7U<%A_d7lWdA+v z{~L&-^)L5&b$6%h@_7e{!IKNYhG0-uUj7=`uho&K?CgENeo;MrTKX;&6O)$C>u5JA zNvyfePp2x-5%3v_0NE9Nr@a+NC@mlnL(Uu+A9tOoL1AV0=H3IUS7%VKO)h}pBQ&1`}$%+q=usb$`oip)it93#aaNxK}{|F z>*_^m$lT;}k;rFeo^f(&ms{13j-EgY%F9d0lcS@1r6))u8y|crK2m_}!(D(bZNLG- zg)}zKNK2ddCS>@fx9Qg3*_H6|DhqpxFD94?>I6SQoh*L)==O}y-?NT^g#~~D9zFYo zP6EY5gVB9BmjS6V(P6Q%F5vY;!`&nIv!LkQhlq3a;Qs<}$6bvqRRU5eZ0s-LV*dU+8xO3RFCmckj&4Vx zf$I2<{{_^WOTBbbQZ3op*=l)xDg{ZD^d!hmkpHZ#twEhSJi2C!XcZt63h9C=LHq;Z z@}l^J^V1UcC{IU8Ee(7oR*5Gre~l>-J~ym#Dk_{dOD9O|*11_;3_Tg};zh%TTG4=u z0D%i1OavJU>iE3>$p&YhvD?~mIRt)Bbk-2GQf@?UGx}%xW(m~wn=Xhp2 zhqcd6*(g(Czka``9C0z}YiMW<4Gl{R3s=$6xj8v`T~Er+uG!jp`%&B5S6E#O#k9cl z5+1StbTjP@d8q2Hj}xZbOZNHoKabW&vH8JW(n(cbQSrYx*L!KliB*eXVl*2PWQZ?P?fjrh2f|q(OI)zTB6Ou`VVlQgsx&SEO>-V;ji^2M%5^ z=~Q)gb{d^LYm)8$r zXR7i3CaB{kPDA)UyC%3kDnl(dP@{VJLvQW}lsfO5|Kl<+A1#B_s#j=yYzM-~eO?MN zF%S!y5>m$+!R&D}v0#9R-dm?>6+M%j^#3AjwEX``95vZM#d&TtjC!N5FBFcqSYI0} z!o;Zf%x&<;k9Xzriyy&>&29sO2MW>cuLk9wx%PdKwKE+!ueW*ZZg3fe`AFoyZAkDK$VX>| zuQC3E*>a#g<%UXBr^Y7ei1Xa}dQvv5P;sNXJ(rJCDhYPO6;Imzhph{ zt(uc~L31G;gBRVmvPw$A>h(_NHQd0zmhI+_j$pfUbX()Do7*|0oyC7*9~UR@*`DT< z)xS8e)ShNK5s`XXZNG&Ex3iW+7i9lXe{hC4q74(?n}|y(Ix{nadHczqUtahybI$3; zp6(Q7E$Q}lfC4>>Grg&N4jLmUbwj=M%=f=zQ2DP?HEZ)yyS}E0X|>K$ETn&U+B2;Y_)&5z0=JGNh74D z7QU#3XuFzg@5BHboSN!f-81sP<$AZpWrnjYjA9cJX6BtA_Kv0x2Dnj-TI;>!Rrze! zD?Q%2U_QF*Q$O|g89L5=5G25a^sSPA<0RT5J==G5jE>H0(FW1^K0e@*5tKC-9Q_eg z=>boDe5<}0;ok6=nH2Eyk`}w-9tK;;FWj4@mKQ=J=j7m^RcY5|wLRCg*dsxk%&brQ z;N7ATPy_IwCE%jKO9KKyK>-Woud=V~v+vYYMK$TNfQkqUn z_FWt)Eh`9qC>YfP372qWL$=NYsf>KPi*uBqSXNli;5 zCL`;Ze0$TQPJxlAHq-l|TxvS4fs&Ung>xx$kK5oaMmFr%Bd+C~H4{&K-oL+Wpmd3U z8ceO@k_rkzP^%2)3rReWWFT_(5w2?vfg1UTxSRQbrhKmEmI&i>Y3h(0DXfC#dw0kV z+E~yiFS!fD$Bu*3hy>JNQvj2mtc4dIf6Amk9p%os9^xU!9#B z2bO5*qrbb9OoTL@CjN8LAbw?$O=eGN-}%%1_&r9 z3zFHcx%+~f@gw+ffWI7kV{T^V9uPoFCEP&b`iHUGTU&PEyf&CjyK9);^ZchGNh1Q` zrSzpC9`XV(VgA0pz5V_7x$WMBKi1aL)=pu@bzcF3bAPeNFws-&twi%RzS>hJorU%o zhQc8@fG)HyjoBSn;&_-;<&{+vGHX@0d3YO}84(C^FXhfGkSD}{kEk-wEB7T~nM)~1)gbXN9uvaa5TScc7a8?ai z2|719oov3vO>AwvtsSdmwHQ^mJ^1Du5Ih?xPn(^a+W`CxB-MC>T1^51g5JKqiE4l4 zBXv2syt1;gwRtet0bOOE{pQ6B^0+uPd|V`-BNj5xwWpxk+0W0{VB=7;pddFYQsnEi zcR%~Nfb=@3su1|=efCj4%Yg7i4n@tH;XD2(VEQy}y-ZFcdUBvYH{rJbI$tqQyKrS- z9jGE{nqW$}nBh#ixtW=IT-V*JLL|w6;a;7n3QaS zfG;}sAa2okQ~K+%f+T>_&gVZmL{AwxHYq4FT@vosyj3J?%Ml=r@NanXPmD_*Xe7f% zjed*|Al)edm$LueAy%iIufxME6n7RxT}Pf1`xi+aEG``?JzC1^Nsa%LN6`@`r*&+i zP%LgOGQoW~UsPNi*;3E*Um>$r8qrK&@a?+A*u&=v^`AetH+G$8|B68i-?4#Mj?>fi zYH6qbWJ}iI{CRSEc5nU!u=%$ouad9BZ49(1*J%n$x^ zLYn801@;=PK%kZUj~cZK#&SHEeLJ)Gta z6Qm8o^9hX!9m@CV0>Uo>o0bybzt3E2?@^oJgO^w_m`XnCy&O|M>AWM6?XY1may+7P z=V+aXT1oX6OYg`;Wi)t2Ram7M`&Ct)-|pKHCz*rWO$wuYWj(+yoVHtAU2-6m*WPon^p~I&Xe&~HRKeP z3@d8S`)_bcNu;BlblOqv?0>tB4#j-Zu8S~-6>LeTrMYUv$o;I+%k4qpT4h1cD(XQejYyE zH>Ox#c8I~yHIS-**}aM%md#_}<7Vb_?(~iODplmRtG;Vt{yqUjCEZvZ+#D87>S6B% zjf~R4HULWK7An8pD7Q zz?x9-?OW6D-+Ek(h$oQk$RCB!IBD}nZ@0{csNkIOJ4y)KWNzP@kBq)Kv~nooVcgL0 zZ|w#pE`Gh|lJk3HS~SJDNJy zn+`UW(qx>^PRjlK+Q4uOmPZDk&Th|tBR??tU3w*|t$o@z7LAVckGsk3%yO)hiJKuy zx7HPsJk0g-J9khozhmw&BZQ9jQj)1mCSnBzowBteZKpm0(*TQ?lb!8?LV+(HKzxM% zbwt4jB-)Gi7Rm8y&F$?DVstc<#cO0?iwV2CN?frg)5YP`De}FKCyjsbC5`Lw;XO|KsWUTH+S(mk1=^c#wAgng zz7ljlO&m$PKU#k8{{40vBqH$I4zv5+g+2yG@;^0E{Zv0{#-a^rNp@0SNA`Ag%wH}uO3|;gko7tEwtNF?3#-oCg@38K(HB)L-a6>nP@}3{xeK}y_ z=D^SD8v|rd7p~;-xt4;m=|ARFY>+|2S81lKM3|M#)n%iYMog^swkC?z&|jW*XJg|! z7FJ((cd+ssV=$L2bXLnvhFkWQh@B=9U(?9?q}#+bo}ok|n$(Q(Z|Fx(bDzgSUS?&a zkc0aq*j{L&sX9~dJn}!sqn`@kb(~P^rB&9vGUdH*IwK>jw%hp$z7ss z4krN9BQUQ0GxxeoTQ>|b7a`tk^U}qYZ&aHVuB8ff6j^<>3L^D^4}`#na#2pja2x(D zr>eFH5c=&7c>7hwDR%lou~f4TR@N+$k7D$=)a4qmKGAs(Re`NIAkpR>{ASQH@rTZ zWQF?YvSg#?R#sYV*bt5YJOeS}WcGTc$M}o$*3LFJ>Vjq|dH*tsd0DS0w*GA@s&+07 z4ef(~5aBcW?XF)=6P1i7>`O`+C5(Q=!@vO{?>I@bJC^u=|u~J#LS6F zzB$b2DQnCtZ0MsUiT#pehYyki971WwP zpmllS&n!t&Q`gtmv*!%UyAdBf4&mBKGo@KD^zr`vd%h!%HHHv@gi??{*Go7t&h0eE zwDy696WWzAn!AU4nk>u-z<=7V4&*1*<=n;dk*Fm_MT-hGc5NRQXPommY`8=F$Avuu zu?1~!Bb81YczL6-gwKy^HHozjLe$ObkrfE06j8ZaqUonEuX8t>zC0 zg1-J-jbi%0!cElT0b&F9;z0~Z6%#v@GBb8(nxW z=IV6q&cuGNwrSobN^XCgD&WJsw$h~d#UkfVf!b2NSM@vMq9NO_rj zRl8mvehfQvI82X9iOCYnf*St+XhkE82y&c@g=zskzN^erwbP*@Rzw76VdqlLF6F?< zUTyf(gx0nWvYrGBNek|2=XpgpYc^U(#p#V%eY~h;?XI3^YBqx6rM9o9Vchr!Cmv=X5ucfaGYXm4r#R+U3y7l2~c~u&Wuha*S-1 z(^>7VIY{{S^Ba^%YxXUu%X7SLIyL}jL5KoO6$K3a{5$}{Dgu9j9jIqrSi0| zICu~zq`7=(M#G|IWm?>Eq$T$2hbI`PqrMy_(zG4rORiFZRlkQUCF-hu#OQ3L9zD&; z)|SKbVTv0~Io#kTRFzRzSBLf+8yg#_7$eTG5boDen4Op)I=gNj&fD^-eHQNdjVYvA zy8Xe9qSqdSW_L7}luaQ>im00alHA3p54g20{JHgPvF z*fT8r(jg*S6k*pnSZ(@a^-C~~D7(tJjzDkE*_*Rn=z4M68v-L6FDbL$)f!o}KoEo7 z4Mfz`_J8G5HXLfA$l~~t6UI_f>0gH`m8Lz_%~4Ru%;=I75uv7{qWYJ_;O>qH691)T z0(#>WHtuStU9L#0orYQKQ){`0i%YhTtD>uh%a40Vg@yI<4d%k=^v9O^cm9gVZ=gyA z2Ij+upHNgrv|@D@0J9K9108?4)lS9SVYjmSGp#4bW^~P*?oNyzS=eX!XDU6Eb1jbo z36-DxHpd%vQPEEzFWcF1e2BcH!2)5>y5DW%#d2k72Nuhk@(~-uR`dqv^i*P^|Cm%sgGStA4j?gw4i^A6_d|B~sye*H2sHHE$4=H})@9Vzcg zT+(2Kv9)|R=;_a4vwjGQgUjF(hSR;(%H7RlmT&R#eY=T&A zNYBJC1qjiId2q!>cY=2*iYqi!A(Z_ngk#mE-__mg^~;x&wF65-h4YZb;9fg}1$+E)h{`Zf^Vh zHt6BtA$=W35!w&!?WTze-`W7A>F)7b$oB)XM$aikYcg6dN5S<`Vkqsd4k#HIJGrXkC#Xifl_9inm=vQm}GHmX*JlSG@JMvKlYxix>C+ z;OgtwuV9+dd->9GM-^ftFS7(+rvqNdEqig4w6|?OH6B zwr7F2kMXb11jvcjAAR4PburQu@;$LnorV5($q|EPCNs0bYF5(1!XiPwsgvnaCl8!t zjX;3$88$0Y*=pw-unsP1*DQZZXOuZC6s!-%H1dA6UrBBr=&3o}U4Gr7JK_RE1Dymg z)HpCZurQ#cNg&7{!09AP23sh*$G(ncy1LENt{-RiIUE}7eO}JtgS@RtvHjHB*yt7` zw$P<8pbCBfBLjm}5084#3uR* zsuQ#W&huvB^{bGpcSOoY$%s3^ zd$79m2?z+l2q_5WV7uS@9m>eb5ucC`_b1ONPac?=|Ik0m~357 z2D`hhz^Met(d{t!uMrKkI^^&EkA%>}i1ug8(_&mEXmatD^QvX2HrpdbZK_e-o#f?W)Ajqm!K?Jw4*AN!0JIvY zQ<`UjmXPX{UGky_q3ZsMXslH#-~$6B|2UEoj%+1sj@1$xrrAn z_2d}oMF;kyM`pmt;@s!?R$2g)Yf^0Shn(uJ2DL4ipwcNXP3#2sa=s`rA zsM4x_`;^D0r&E3Vk5akQ7JpFBCS}>+ph`D!E|l4*puE~tm8|rCnD2=F-231i{I|Dw zW(MRIC6ZTHjW}SErpCtFt!)}66UORG`&XtfpK=rGB13wz)R|mihKLL6 z=o)>*SJB!ZDG}?OQ?d`O_ z1UwBmC;6anPn-(6<0q}kEh_y<5ITZnSH7c1aEEi4W#-K^HSOoN>*d!REoFi85^gCn zZhdV{M_HNbLj*#G7``Y1>08Tp?V5rNmQ0jzrM+7d(Z5wxpTCWEl{SmPMXZZ0Y%^s@E+<_V)WPe}0mQTuggLYTDKi@CW z(4;|=Hf-YT?Cjyu5%d+T!7}r5@Qk{;)+8HTLU6J;vaAk^yx~A?UOPSAM>kK-%Zm#P zd;%^r5K7e4)F3SO`66WMkNNUkH>c{szB{2+^LA2@$VX*=8`_0ni3*%{P43;hM?p_d z@8p<92xeW-A?$t6fqe#Ywf3$F`0>D2ah5(IAh~hcAHB5Jp`xVp6XI3($$G~wc9JOF zr;q9Fu`=6pDyquLhsU)pBEWB{snxC?Hl80(oP&X<{8cj^bZ{^AW`LAX6nI=S>6aqV z=2{A0F#`SEwazj7`<7;AtCdVMOmuW$UXEci4n99WSL*HQfmo7pTwYeDuB&@~FPilB z?WXxt7O(637S32};Y0C6@a-II`e+#$UA-CfQeo+|3_Vqjwm#qyCmjUr$Wl*bG?E|R{2L}gC z5oE3hle2Y~uAo6nGT=;#-)(L8p1qA1F1YOeb!&@4MP+L%@ft>YNf;3$c_L)na%Y)G zovTX2LxP9BkJ>TV2H+ZUJKYVBi;K$+ zY56bSz^``P_`CZhC^4Djf`PU)1pEPQKG=7keFGzQka!W;73{w-BiP82#FUf?pamI& zI1K6PvOF20QR|hbW0rDUXJEcCe*KITl?@;Sa01{zx5L?RxNyzQ&4;ynYdqu)Cs>FB zR@QEmx8VE&zl1ok2Z47@!sYaa8R<4%3F&tk6eKx)y2sdL zdRo^52HKglvkja==C=p9Cmbi%k6TA}klQuu`_DjLfxA)3=J2uU)Apkh47a@EPXmo+ zb<5Lo!eSpjTzL{XLfH4ztmSkj$2ozo0I%ba%-Es_O#CoUSQg)V+0F-s_|1>^4<97>QF}yFxLTZ)6u^l_pR0))8tH^E^$nrnjj7~CO>>yYx*5W zk#PPZ@zsg#MANsnDXrYR;62$J#zQ(Q+wWYHME#C}hoQ9^&iKCr!!gfN zGbF9F!T+zBEyL(^K_F{CMyJK8fN`B5?csFv>{6RT8fklE#k+=3DpL7O0ELs@^cjToxVv(EK%X_NjS| zUMv@Cu8{~GO1x1+fzJdH0l0!Ez@r}ToW&gU9Jgm%N(W$i1z=tXew#$mZ8amBy?U#D zR+i=L`EKjHwPAI$@5{7iYw3JQXu?&^W#ttCMRl<%#jo3-alj~t!Oc$uHKuy>JB9WmC} zj-LN+*v$&Ft?DDI+`FwYd=}M=)M9@%6scU{@A~}t5cIM_f&07Vuge&Ps(k4B@hVp1 z6=UK(Ig5+G@%_=eAEN!gzTN{G>py-QzfmM)6(S><8A(=TWR^{XY*A4nE0kG;q-2+n z%BZZ!-lLF&QufNq3Mo6D>+bvfpYuQG`JJb8n%}S6eZN2N_iJ3&^}61-_j7YAr*3X( zY)$4*_*!fUnV!&2PZNLkt3tSpo=N1^bB%zWrJx$jTr|iPpU%-Cr$6~D@K>w*Y_wu> zpB4o{QLzdMINunvkrxwD+~-GCc>Mo%x_;cF3GwvbUl-Hu7dok2Y>ymKvf#MSNkL0% zmtNu4IM!zJMXlVHnqVfM5c#18r7nqoaInVt^QeN)pE%KowLrz*uEt5Wzoyz73tL|<%pe6v$Z)If_5g#uw z|AU@^g}9?4srQnGhPG8HJ~>7yD%$4Y5Fuowyyt5HcedK`<30QdxopNxE|YGuIaZjp zhJA&LySs>xPy&2o6m-=GMTsx*i<*O)l2Xiyu#Mt&7*%dJfsX0=*FSMtbA5GF(u2Vi z^z%bK4KZv}^~$kFTdqY!M>|*qV}cr;IZ7M#6#epw3XFcBWiH)(&ed^}xF279PaTb* zo|msX<0O(p;p!;6Rl)%re^W92M;Jze)SW})bj6qFsiq;vhmfGp8nyk zSBIsgVejL1?HXoiB*nyv;X0F&Vr^9afKGAf&tc^Zwzki=>Q(g(Z&5Mpc6L&J^|f2@ zP4?Z%&Tn%oFYgz!BB~W&?>3H(sLllGO!|1v*KK6@6fdv8FfN3AT1^3>w5%gW0hrp$JLCNH7yDI&YTIBK1x3= z88o*|rRV6R$|)LEg-nZ|t7BjF1$G}gl!KfN6kJhJ5vp47s5NTgbe2{M>O0)|U%l#h z!SnPBzfpMwWBw}t!}Uu=S;c$z5ZmZ2lPFMn$iFD_psW=^?w^@)I9?w{SM~2}j~qN0 z5x)b2dwzeu>ksGK$HrQkN5#f|!&hLO5!(*J8Bxp1j}2n<-w*x!q`@beSXmJ-ckQaS z^>x>YjEqEU3G(sf>({O>E~rt*-yS)}uRK~y+_u#PBgp?AmV z{;*N}js;>S(3eij*g;A8^f{TdV|BEkzG?5H575aZJ$!iB`FnkN`7s-t5#WKoL81B+ z*2G0}+PRaaGsoz4hLWM-qm=z4f7d^q{+6znjNS%oJ2iFr=FOX&oSdI0{53-SiBBa9 zP4%k>$r3J4hYtvDU**^1c$qP9KXg(%2oPTndORd?HC0uZs>t44azNiQ~{Us>eTE=h~IbpOf>=Qk3<4|E~M(7}WjI(I^pP{+pRcs9rc=5m?DV z{9Ma1k&&Ne^l8cWk}18k9dw@lo_|_{^$ja4pSJ(hld;b@A~L?ZGEV|L3`60(FzO0Ef~P^#ULkS?HF)P z%%n@n`L_#w@BpbQ)?e5d2F1@%>)bvlBGUMAn~;#ep}A4fz@VVNfB*iUV?6OG(R8rn z{uy=&jb?2Bw?CR28#DAqC@%LrdXSUADi{zpFn)bDW>|ZQ->3=Mh;}ON;u2*hn(c0%x7#pOQ%G? zv7X~~p1Icudy7^!4*pquqQpcJF+LhC^K3P+k3fYpWB6 zX6EFi1z3(7oZLPz;b(X{Qd;R;!J_2zB$9uxXC?1@PxX2}eR}H_^}b!5Mf0=Y+nOrX zLSG$F3%lEO@nUs)n(?VL?WV>?765H7E_nd~$Dt?S7c$FtOR>#hme`QnCY`S?{&9LD zxlfKwU`mi!BvsP5PLxt-HZsxtx%I14-;{j0&U)PO$5%GORN%YxEUgnWuLpz_IfaFX zW=$(+3{+GO$jkR*qzz;{!X`#N9WGrqecN{RQR1VHrH7wuIK+>Kz1UVsG@1E%kpwzIX z_*@~zLXCl{gE7g9YkR5RqXRzX$6LPPL#dK^Xub2}_}twK<|oTa)pJ%v?5?ONlTx!( z$0fRy^dUIHhb*9ZEZY64VEuG zJ+cAANdwG!rY2?IImJAA^RK)rMMilLMAwD4&oQRnHQnG!{1)ot1dq2fp(52SukJKyD!ehDCb?7dHMMRS2Z(c;%%f$3P=P^Ag@t8Y(TBTy% z(;>kx^U=%FLh#&Ly?OSvE!xN39+78-%{QFG2P%d?^R5h22pqh%Fp`oRVObU%6%}^> z{?e~sC?g*!_>>kENe9;r8;$*t3vPYT8`OHlq;3Mu6MizZEshLDEQU$Xy*hV|X^n=I z;2F#9bA5QWt1(3-xX>)--K|GQ_6t*=J}tAbK&hsNku`RB9m4+Z#S2^hx*a=rx_Efx z?{;S1gD}U{17M&BsIEzjyts0wOQf>cuO3Z3UPGIEq z_a%ZNJh@o`PtOU*OHwJT4DS3>$S%9|aE+z?m63953p+e52|FLtkRQnjymMV49ul7S_4UPNWqt_s zAEE_`fj)=Pr|92NcqYJa~_SQ zq?5-DDbnK`C56q)Gb;YTu14maUP8v(?b-aF;y)T>9z3~n<#R@DugUGoAI@{kzvkyp zoH(JcuaBq3iq-{spH<_dYr1&hjn1yF_^7C;xVX-a4%O?z8R@_<2S+|iXp}~{L>`hK zi75Np7@r%)E|K>9%cP0s&I*PlX@iVxstvt_Vu90DVVZJt$81mBOz=)TZ1WyS@qIXx z09GO=Cr5$%-RW;e148o3jOvi!c1fMZb6PrSWlQN-Ao2;C3DJLG2mwT2*Uaa|_eM-r z3Y=v>J$qh1OdG)nkX#qf_wPr)&`Mvp&U!LX*u2^E<~ftXL+K|!4{&hEe|K^~W-PG_?&Q*p`B5uW}oi5|Sy#<(sb zELg@Mj=|0`3j{aahlJ}dum%}>6x6}K8%VrE=O zy^E9l+__?BGHU7-HXZ_~zK==rW$0T#f`i5Vp7?$KzmvB7n%=MC;75wF;pE*f?|a9_ zX&K67P`tX-aqCBVMMC`r7I*gk97nPsQVQBz>HMcpSHCzJ@vx?02PG8cl{c3GgF0$z z-bHq~L%1Gr13gSgGS7<(DQkcE)y~Y>t~VCt%PMa@T57YN7aogx)@NIhQ#_%af}yuu zhwg@G?`6>{?$P$Pwi8-f32?we-vBEX1d5hr^QTEKn7c`ya*Q=Rx*u%gahQE;ZRK(E zo(KJtvb_&Gp6Wly`*NwGznu5$BI)s~y9r9ZuYRA&QLI(2EGL&r=m*A5Ane?}G)Hl8 z&(d6QQ`CN0)_eC>*s=lx>oM7L{byeZ`hP%umo8lRyVUE%?u5=Q&#LCuT$U4Qa2F$k!i!H3!M@1L%FFOW@29qsuM`xukpMOiXI(7-~UqC%vXH)ocFx)g4s$tsP|U?=igx zy))1puBU4YYb*;<@$trn+O`f34(DB7>E~F)YI!_<^yne`?kRgd?RfnNpB%{CG*j<} zhWa$|VGc=*_0k#pvP2tB(%qMJkFU`#9#g(QTaYBaU10ahx)UAaZN;rX!BboZ(Os-? zEMokGh^{y}aWXSsva@3WoBI6umw^w+J)nWTACR~k-ndb!G~Iy1+6oZy!-u;w0{XPe z$&Qv+2MdZW*B-nd@TH;i_Py5=+p~XLILeO=o=e(XAs;{JN=Q^^xqXFHf@XSqDuR zw)E_4`jS1*L$dR;8n@JPSntmwC!^jg>nqjw*{iLpX%&^sp7<+6zunr{7%yh63?Av_ zOM3?gVZZ4IckkxCeazEQRs>pFe{O&g5(dkvPlM)Mo5VhlArs4HBy14-=f+b?62gv9 zDVZ5h{rNTes&v;MAUN&LYJSi5V$9sB`&fSEN@BohzQ%IL*WP58_GT(?AH_6V-%FYt z@Ni_4cJ%b}iisn7)vm9t{Yve@?ngTfXu9vC*Sn;*OlG^@@Ml&08U2Gzh3I!fy>%SC z*WjLNI?;a}DMKbQZ0Aegp4%bH)?ajprol1RZFX2I)!W`V33B`r^{k=0XGKBkha)(|vF4qmq+3Wj4OO9aHFX z3UUss_Pr9-N_MU5df%WQWbw&4&wSu=E5V9!Zp^@Ux3v)sE_iu)*)!)RCLq)M`bfS| zke7FCu4?P2)pppB04AuMGkQwQ*4wm@OXANBJj-Q%ZiaXm?YVi|(l?;LEG30xANzhY zf7fT8o}N5>eAqScsVplgaZhV^_x0V(?k}_cE}pwUesFfnNk7ACWIJQr+~#x+I7xTD z9?S}374f~dZ{L3A>{&p1F>za4bIlj?6LN?YHdEP%OG$Etx|3_rcu@Yu7NWC;RTP+* zLYaI0it;wd`joLTF?;@4^K?kCb(LrCNJ@qHDT=v+d42WL%JdUm-x0EKKV{#7IskqUz1h1#!-92cet4e)2Si{rcIz~swB_aaWlt6(00E@V7 z2oeEY4!|s9X!!79aq(YJ2B6`9N18UDE3CnAs##fCVYq%mgNOrSQQzbDy z4Jw5IXQZ{UI7?Wr09A&~h?;~3Ee#FK{|*yS6>QGe(F&c-WRb9oh>SEeGuubVgbfG* z!47C779gj4Z01uD!S)C%K>>l8Rh!oxj;@#c2IuEZa_lT8|3>L@ zbZ@oX(d(VD6%~Yps0hGaI262Bkmb?QaB?QYzJwB{feBKx>B+u#!^7P@Jb?AWAP(9Q z%q+t39_nhRupWF39o7R*Df;?PQ&S6IOGl7#9oI(31C@|-;_S!>8G)MocCo-E@kfqt z=+69qS^%QOT2axVg9qWfJ&08#SV2xfxCZQ{tE&srz?)uPLBYX_7~4f|>-QQuLJTPZ zraxr2d|fh&r0P;OruclOM(*vVxG9%+d+pHKtXl^(6w*f9^lN4{jEy~kJXp%?uuF*7 z=F`aNrynQr7veD)oYd%O2@MO&Hx?#D#KkFM-V8#6B8TqUF_--OeA7%p9-h-?X60ak zc(r1WL6eR8E$d3cQP(tJJOp?>Gtef12kr0gha@ZG^b}kkOp6#gKYxbko zIW>zuP`>jm5FWzC*vIFuS{M`fx5F&=z7;I|e0)Mv6T`{`B^@1_oP|UHK?Yspe0V%p z6?k^h&=kCV`+IQ_)K01Q>aR|}(P1*&lLdRFux%T!B+uRz^sbC8*o;}=u+q&fH+=9#d&!zKxl(d zgfbX9DW`m8i$iHp4}%9M^@n+n6L&BiNEm~Xc>$4|6_EL(uF+Hc>xPYh;gPk~Ri819 zJ;$Etk?s$y?0TlAlzJ+p2_{sZv05LZyZ@sGxQc9_Qrj~0}({N?Xk&j2l?%tzS zElbz?V+Y0JNnAAb7s$m$4MsN4vOe`x;E7jG@pd1BWf?LF1p)5_nh*S7owdn%1@CNV z=wo7IiDwrFvi_P73>-^KOG`>h5XfP^gYh&RuGo^2RcJ(dy}uDHw!v5`di~;&m3>^i zn*&CUpdBzNdDhZ0IW{)!)vKKZWRWkQKaHn&zMlIsiMnO&}{51j=BQwZ0LOiVZz z9$0&H`|uyS%I)7Iv3jSO7D67JJGpB^gd84W;g5ZNeK^dmtvMrCVMdD7vcf>_hYl@* zUAd_4V*Xxg@@@k+ImBuxjR2e^;*A44$$L&0|CCEK{C#SBaX`S9eOYUgFmO z72a#VUnV5X zK*}RBLnnymt6DbpQ`^$A3V*ZJIL@jtIs&i{1`wCvin6-8s@jD81ECfKhn@uE5|>nD zY9h|32SYG@fuZlDj*j}4v|4eI*tzg&!*vS$a(B0?TUx?r=o&k^z5CkQa&ZnJeTj&m zvlzx3@SI%+&a8XPL1{-y(#3J@r}|c(_Ras^Cd!O^4`%$g!4K?`>XFxY9MBVWwYR^4 zQT1%rF}t>>{CY`lxylrf?%}=$*jboF^YihcO(*zc><{)>&chT0=s~cn{N{%Oz!HPB zgk(fjO>wCX2&)&?4`Yy(-1oA7uX>xAnoiHn4VHS3eTV_V2Xnga?sFI#xR@LEY;a8lRwaq`Pr}B>L^{@hamyjbj#cLvMAv9-89>y*n~~LRohD4@N_F*yQC+q%1E>MuHh2I0&qseGri*A(1&z^ zjF3~Pc<%?YW7S$dVstNxoTf-#kq>w-K8xczkU+qh3rho^Z(meD$f;Z|i!iM(F>^$w zgFO-;3xfZ<^Ek<`-n?la7)TnJyx)mCHm1{lrWw9WW*;A0T#c_Aek+~m4o@-Idgwio zp~plFkOMQbCrL?wNx^}&viTK2i#Retg2_<~C82If4u3K2b7W-IeGdRQUw3X&U~vX7 zPlF9gN`636{cgLen)Q;yaKV+Jpg^nDU-ymXR_eL=_`W?_YBg5^NnTe+MtJ{#GbcUW z$kLLS9^2Z`U&kdR$iavXk$oXM6!6$}NRSN-+L5FLgoMc89AA}~$o`PIwyti{trV@S zy*<(0!~$ME*vDRr<8QiWP@|yq0s-;}aqQ6}Nm`--#SSG+%_(5XC`gRKGhog<)cP$+ zHCzf<##sqC_7F>B|ABm3!L29mzw(i!O|N+kFRmJEYF>u5<<-h}7xNqL?RCW)B6#8# zXlii6!cj4}yCbTG)>Oh&vNCsFN_mIR>x&=#+w|iPlby}R20oiPVz72E`QRDIO zA^pP#w{PFZ*WlYGCMKf!2J5kks}HbUK2N&A-xiTmHc^zHzte&MeqHr@mDeJl(}Qhz zYUlTJaaj$NdqG-|S6DcZ2V;P935!3|PPM|hw*U@tO2S*4>vMP?y#-g83Bb7?uu7sW z)I{`05j~!Dn@(B&TgS_5V>`8zcfCGK5={2`>_XP~tAk?F!MfVDD}ORh3y1{i9Xapp z{08(hmI$&JY^Zh&w8K^edMTJ9>VSy_&vx>pAd-AB!}@H|Ahs&e-zGNp`sRig)L~M~ zr%)U;AF86O(?^f^6~^n6qoW-+#_%HGlZ?)uy%QLSYfXrjoX?)!Dqe9+dGUe=rN4}f zF+hR;thV44G}S>u&r=yrA&w$*ApR|m3c8K{DnG@rce41WFjJZx`#X+wcPZHk5I>NS zijRDzWoz=~)YRdj7P1vL{^rS0CWHYhLvI7@YDFRk&5V*W*yk((a^)HtWr}$BIQ8XMIq%ls#nne z@<>d4Jj>xLDIoA*O^2xyLNGb4Sh94iXK6<^Kf&v;h+$z*Q>Gtd> zjMf2C+<-{;Ce7W1#Xo=KQPCp_SXO$ket$;=y#Q7hHgD)bV7kM(-r4oW#*6IobrmAJ z6*9=Dw;7Lvvq!c+t;iI??ZL~Jf^%coYe|ZJpN6kJd;Ywxu1@0~3q2^xJ$uyp$_mlR zU{mGgncy41O$Dz@u)@Zx02p{=%I~5b$dw#@O`q~fpH-GsOCB1N3y5lEJfT&9P zm$FNK>2M^Snd=}0rpZYBdAnxCVok1qUyw3QH>k&Cejz}_G$aqD0^a1=919e>9lZOW zZ4JR6G2QSbE|#Fv|2w!)wNrTqWpv3=v#MPT3_~L@Nwn3tT`EWHEqKH(Ui_!a8JecD zups`kI_I!`~md+V%731z~v!+Y6^gq6x^pyhtaxB4)$Y6t zSZP2^^||{I+gsKzAg{x6MC{Q=Ty(UTjSbqn>B&i&eKKwR{fV9QuZ4&d_5PY8l0hq; z5ixsusyIsJf_nzAx5GrW5o*dOZ+KZ$`631*GPDYzbQ--TgGKY&+&D_OCi4U};nKJe zc>7HRI0#T`YinU%1DOK_M0nP;DQ_U0oc!s%*@y=xJ3xFE8OZ2O)74F5n|#qtDIFp@g<2JpD2WM~9ZyR@l42l`jcePIOqXJfWfKHoJONWX>=_ zGnK){A11zzs9)ePP5^@nCc1a6wiLw*${N(^I6vmcUhP4pNH=xxx%$`O;IQuQn)c__ zW3>+tSVl&|pdWU)mJx?7((c~XG%+z*6uplrtz0-fewl=QAAX?mzzgA5yduU63JMF! z2~1%zQBf*x?xw}ptgWn`!eo$e47>`?JEAe*jxP8KhKK9m^)MK9{dytH4^h72&1uc> zBKmbrqN6~k8|qC>KxK}6O5zWzpl&$vAa0q7dO(PVxuK62pvHiX_0QrW8xX5|dyl|6 zgaqbe1OM6V;_3tR)9N`E74O5@I@eA$fB1lUaC~%>$mOJPggwupb#}J8u)X2Fk9Je? z^fUPDpA-HTM}6v@2i~U0`;4dh0{i#x$BqMz3N*PFg$)={6q*S+D$m=I;^T;LG4V%j z!g6O@TLjBxWj(z)R3U_j$B!@LDTs>hBA^2;@8*M2=^9jqu$Uvi{V*Y+`L!36`1Q(g z*2gD1Sr0Q8z`@_RU7(o8Qs7AO@$%{<%0l7nXI|uJj^2kTvS(qDfh?lBS_ysk(ptkQ zf#~cx*$1r;=%>)g6xb{$(cAFvV!b&3y!X6ewoO}+ZT*grFfuQ%`NiA3S_*Q`(8Ch9 zWQi>bCdxwzQqpce+VFNYG&JBYT*MLZ3#T736Z^3Yx25G>XoiF0+-*843D$5=+1`$h zdN#$dA}A^`9_fZs7bybsflOiV)^(I@9SK(X-C5EO$8~ibaf=l6t+EKKn4}I-Mg;*Z z47*-IT-*hb=&GafxpS*f!R}YN+*JJg zw_DzbazC4MjPN1ah6lHUDUP}d`o_TS8h+Xg&HHwxr={JoqvaJ9wJkWo6QZr*ZK?lmy7l_Ve>gTi0&eyY~@syOsfV_9@#`{6HgQ$O#}2EX9R&Gl#G_iqjw zX;8d5QYz<(_7U|jZpj0pG7rEE@Qt*zGy#`|K}R}^UH2{X95x6sm?4M(cwQ2=JN)r$khUwtTtgIL))!x)15j@gP zOG>g(Q`_F|eQ!Ay7dOEg@v-z#n`8eA`<^`#s!m9&Tof6}7PWY`hzDnZ49f@yOKhY9TexXyC6XUc(0(!RBHT61#tA zD^fM&IG$=|Z2poC<=VS~)Nt*qPxDga0mL8N~7-9VIt$fIbI@ONZ< zaen?wKiX1=>^zf}g+(RaSz4O9fdM^%m5mJp5~0nfAbH2>06Gfpv)p^t(A+#xIRzOA z#Y3azqUe@Q{8nY;FS`R(5m@bK8GY| zCn5Z{_CfOS#M#0ZTZVU%%TfeoC>92||;-Af3UB?Vwxmw05AGpG zg4oQ=nc<2u&7H17gB7~>Lx<$4r%8W0W{Z~?R5-Ge=rR(j*S(uYJ|#%s@aW6f z@r0U;yt<10db`JVkV}JNpf)l)5(;(BF|c*;NPVVAdgAP`c=v0weA9g@9}!7O@EZv~ zRsvUcC37D5eRX=UYAfdHDMGcaxYr10ij(oyrh|cjp?ZTVyN&oG(%JfuRhASE(kSOv zE@(x!HdeW0*;!fr>quB>0)v`%-g!rK_1hW5&BN1i@?S}D;aW1VfMVS@dO}Nh$8{{0&#iB@P3)7kJ{mGq^XHTPzkOLXX8mjk8{jzH zS8;Q2V?U;p4H>$+B4Q#@n2DN~zO`xC#S|uqx)N=%)NospcMx#q zz*2c`URpNtrY5VaG?J1pRF6XqTV9@RQ2~`5;{PTp`14i53jgrP!CSt6xfD2l|K{Qi zs*k270JttgngEK6c#P3QPDNksvpn+D#Oh>C{r4=Dw9~Bsk{4;UkU^U3oaOqD=0sQd z0acKc6fk98p~$3di_X2MmQ<9L8}C2s1#=M+9?mOw*AY@ax#ge3-gP48Rla|b^lUZS zXP?MnCdmx5#;vaW${=1n$_ssDZwkj%(A4r9S z7$z>g_`liF%^s~KOTWJ{Rd0O4h@4nkk-9qh`SaC{KWsEN=L71ELFvRievGsP9?Ra& z4(bT4^J0S%#K-iThTAaj&EdW>jT@TZz+C>j+Vel=Qc&URn(XKUOVl^e$ivf1=Q>w% z2C$mTmuu5DM9>;ZN=OV@+Xpn+8Vc+_CM=R`oQa+Xe?a#OI$&`+S6^9~XCM2`3m2u% z8F!dfe29r1*DA0Ci-YD6{XYdcIqraTK*QVqOwF?LXk7Dbx8)v;EVq85QNv)IIit=^ z$Usp|3hdrlV*M7CD0DUGQ<`?YxM`i=?I6WAL4P@5h18>HF#5&ooScS}0VbF$WZbhS z^_SBfo0Fm*$5qJoaGgCN5Uf68RA3qY?mRtB+2)tfXUGPK+*ZdQ>M1LKZ-1`wnSIlW zTM>&#r@RA48^4YIBNlc%q$M7c{i+JY)e59rB`z@j#ln*Y@Ggq2X(|xuA(Al4y6Lr>Dm$Zo6Xv zm-?8Mx(SMlGY|k0pP&if2RsYcfP~(==M4a=v{bg;JQqwK?%ITFf`Nenu3?*DDPy(Z zguTM6%P1+)qLqtUqq4!I+MwX>yKo~yciu#kGc96P+%`B^g*Fj@ysWG&lIDRAXe}^^ z*5$B-0hEx%=H(IKRw(dMl3W0{3WfnibL0IG2^DiZ_I_L9(N& z@^Q^RSkdBQ@a)*Hpsddt7+@>D2s)93=}(A!R16IxJFWi2^7j@Dk#9S0N1wi~^4Ddr+ zQAzr|Fq#g7wa0~SInLCy9c_P0Y|dI}YUu^C%BaW6p5%a^$P=9V697!;Q=nj(UN`}aFWN^Gs5;GBMF z8M-xv-+^y}x|*L{NHKf~kYccRKkfs({op|>9(e+@l%lW%YZidP!Cq@YVd1{QtEMp6 zi))rVazsl@i)_PbYS-e)hzqd)N9iiE6JY93deKEv}Fv8*K5@p&;JS0bP^t-!**ZUpp6aQDMo+%0dTALI5BEAQ9l`eAVQ7 zO9T7c6eJgUOkV-O3NdKMyF-Z%;NfH0*Y~#KC{J(NzHY>{qWiq#>C@4eXT^MOY%G%j z&Cuc_fPR2bp-7PgLfsD0^Mq z13fcTBnr@`)d%*Pi7ume;N#=7)#&^R$OUIB8O~1Sxo_W|1~dhw&hQGkE;CX>Zh}gb0nNrt%)GaVJCI zD_=6h7Q-HZirh?;I6~Fa^SGn!#5IhhW5xr`E)Wwmpuqe@<8Zg$tIW)e;W`Sb1bOHh zpoxxPzi3qF-S-fi0H5#IV}13wQvJ511~( zccs_joeo6Egcgfjs{kzgts+vwer*G9_F0rcUY+eiQ^T=H7v_bw-U4^mX z+VUL2%waGe*x@d>d2n0291$V4qm`I!Qcpew^4xQMfx+RC>_e&> zo!-H9a&GrpE>IjV}r^N0eTTaQ!4gshCposrs9UESK_=?0?K` i|If7dKmW%~3LEFQi`-?GCUDIv;iQ_bYPPb~t^Wl_*#(mT literal 0 HcmV?d00001 diff --git a/v0.1.1/examples/Rosenbrock/index.html b/v0.1.1/examples/Rosenbrock/index.html new file mode 100644 index 0000000..aa71490 --- /dev/null +++ b/v0.1.1/examples/Rosenbrock/index.html @@ -0,0 +1,57 @@ + +Rosenbrock · ManoptExamples.jl

                The Rosenbrock Function

                Ronny Bergmann 1/3/23

                After loading the necessary packages

                using Pkg;
                +Pkg.activate("."); # use the example environment,
                using Manifolds, Manopt, ManoptExamples
                +using Plots

                We fix the parameters for the Rosenbock example.

                a = 100.0
                +b = 1.0
                +p0 = [1/10, 2/10]

                which is defined on $\mathbb R^2$, so we need

                M = ℝ^2
                Euclidean(2; field = ℝ)

                and can then generate both the cost and the gradient

                f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
                ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

                For comparison, we look at the initial cost

                f(M, p0)
                4.42

                And to illustrate, we run two small solvers with their default settings as a comparison.

                Gradient Descent

                We start with the gradient descent solver.

                Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

                gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
                # Solver state for `Manopt.jl`s Gradient Descent
                +After 200 iterations
                +
                +## Parameters
                +* retraction method: ExponentialRetraction()
                +
                +## Stepsize
                +ArmijoLineseach() with keyword parameters
                +  * initial_stepsize = 1.0
                +  * retraction_method = ExponentialRetraction()
                +  * contraction_factor = 0.95
                +  * sufficient_decrease = 0.1
                +  * linesearch_stopsize = 0.0
                +
                +## Stopping Criterion
                +Stop When _one_ of the following are fulfilled:
                +    Max Iteration 200:  reached
                +    |Δf| < 1.0e-9: not reached
                +Overall: reached
                +This indicates convergence: No
                +
                +## Record
                +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

                gd_x = get_record(gd_state, :Iteration, :Iteration)
                +gd_y =  get_record(gd_state, :Iteration, :Cost)
                +f(M, get_solver_result(gd_state))
                0.10562873187751265

                Quasi Newton

                We can improve this using the quasi Newton algorithm

                qn_state = quasi_Newton(M, f, grad_f, p0;
                +    record = [:Iteration, :Cost], return_state=true
                +)
                # Solver state for `Manopt.jl`s Quasi Newton Method
                +After 45 iterations
                +
                +## Parameters
                +* direction update:        limited memory InverseBFGS (size 20), projections, and ParallelTransport() as vector transport.
                +* retraction method:       ExponentialRetraction()
                +* vector trnasport method: ParallelTransport()
                +
                +## Stepsize
                +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
                +  * retraction_method = ExponentialRetraction()
                +  * vector_transport_method = ParallelTransport()
                +
                +## Stopping Criterion
                +Stop When _one_ of the following are fulfilled:
                +    Max Iteration 1000: not reached
                +    |Δf| < 1.0e-6: reached
                +Overall: reached
                +This indicates convergence: Yes
                +
                +## Record
                +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

                qn_x = get_record(qn_state, :Iteration, :Iteration)
                +qn_y =  get_record(qn_state, :Iteration, :Cost)
                +f(M, get_solver_result(qn_state))
                1.4409702527480214e-14

                and see that the final value is close to the one of the minimizer

                f(M, ManoptExamples.minimizer(f))
                0.0

                which we also see if we plot the recorded cost.

                fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
                +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

                Figure 1: The result of the robust PCA vs. SVD

                diff --git a/v0.1.1/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.png b/v0.1.1/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6b4f0b4daa1ce18bd1e7ddef7130ba6691011f GIT binary patch literal 16964 zcma*P1yq#Z_b)sa2B;vZ5=sh^A_$U_(h@_5GL)orhXP7E($YvuOE(A#NDD}pNVg2# zcMtylzjwXsu66I_>-yr%InO!!>^}S1AN`-nOJ2Ql>k0yaxGMEjObLNF>x)2~X}@$9 zzG2=JuY_MX`ZAJYh!gC8Ni`W^2*e$Pl-Ls$r?{0dM>iGZxX|CV3dj9a$FrAHf5r-@ z`X}8XiSfEKpLaj!PGm{`^JRMqtR`1L6k?{(5v5 zeFlNpe8-Q2K>VaS9q|0$2lO`Pteu^mi|QEQK?Ac{{?4why6s^zQU0N+^@nR2qJa%t zS7=@ff1TS{(7E7qMKAAfkH|oF^v2-Y&c(B@@fB2&CC)+=nnZbOWRr2Im;3B**wma} zep>Qf|9>aq|3}^BkY*v3=XdWS5bO_+Hq<8{I!S$&F$ac=(T0s*_|X0%V_xSx;%mOD zva&5^x`n>_=hQk6`Fo@Mi!o8(CZEd4m{sfy2%-Hi)$}3o&**yW%~aUVaZgHe&&6@{ z-=KS9I~hkxL_|bFQaUQ>6W%OzwAs7AwWN^19~~FR|DwTXcX!u_^^Kx1UD&bv90DOX zw{vjv_ni>`=1)-<(z6|1OIxKcd(*{*s8jK@zdWxmoA7Ak)vIx_FS8tr>A!1xjU?J_ z&;k#Ez++C`UiZE(Nan_G@Z&?oeKq-5?%bP!U!JyS+`v&lAijQK%|Y+}o%{wADCg_e z#FSmimerMAfRmoXwHF-VTdTJ164)u%&SOY)E3}%ZHRj7LEVP-Zbthzy$D?#!E@-x~ zwY@DcwBnG++Mu+WLq^^FTmHL7DbRnPAPoYYwTsIeQhgrP(_oHmO zTJ5_t>)R_Mt~;w8WcQhwwQJq>+;_$Xs>Ri5gQ(6SibI9(d@&y?%+)H3>6p#asd|5t zGySp-qpz>;&ZupdB$d0E*td7r^(t&;F4$i$AF~W=v74Q<94a(yi)0ZC4-E~CjvlIV zw9<%VD=wwqaH$DMp6??dQ)&=8ST6GS_osMlH$Pr;@L4e>T_JHCcD1e}L z+v^mMi*06F`Buwm`1tsC8FPPkJesJUOK{a(nYwi;)4lq6{n@&SwRIXB_LgYbb6bs*6B72;xbA==^yRa&v90aRB@R%YY~_1W2zeZS5`9;^IaFdc z@b>EMKY#wv%YIDikY!?JJzg&A%F4VJd60rboTXEEbC8>b_T3E9Ts}TUD?h0a|%$+s}pq- zQ|od3&X_(mJtVT^^JkO6FE98US80<20s_vQ!&x4$sVXlo_mEsjl?p3vIn1xdv?`kqh}F9)`UKDhgzUUPRCO^5vO@eqo*BA>;Y3r^HzX2iRJ0fGIPScV7B%j&l>5XR zr{)mTCKetOv;Ttz{mXL$gTe6H&Mr^X32|_Q_%*$!s4{2?y-Y}t-wi69Q?mjJ$Za{w zBpF{i9dV7L^YgdB6aB_rlhP+Pss~5Vulyirl z-ceo|Z?pwcNOhei-%)vdt}C56cb%WzYP=d)f*;bT@4QknpzF3SPTktp<~kFh=J&a{ z*lzt#<8`owA0aelRuh7*+so;PwkM_{(*;QS#8!WHE&>E~N3r~JOi+Jph>G6ZqRHz> zmNL-JMJl)H5J`H4gq#_ynHGEZ_4R@4n)~1_lIN$>?>4=^!jnK+}r~aXj6b z${DwZOoolFLUBvZ9B1HTW{d#p6hB-yQ*z1SK*NE!9liNI?tU;=juyxgY#!+|S>? zrK^h}8A4m0M$ucp4L^enIC2gYK`=aOJ zdh_dZ7n{Cgf3QY$)so2-e#ywlL@{e%zMi{&FCa7`qA%&3cBJ9EZv~)E3j?wzf7tXN&+JfA8d)9wz3DKLKsxPhp?=NRbG26Lis775Q_qlFqxnk62#$V{?1-1q z$diuSEDtul@Ahm9vEIL*LUQoJ51S3rTrs?WmgrroW;5^h)$9t|lL*8+O5*V`38jWq z_3Q8NKTy#x1W6&@DiY1?u1|H8`!7baXkDXt{7ZYyNLGKkAa%?WGAou{3e&}Y`bxSbNXc~T`euwZ&x234&U%) zkfls<$3y(YjDtK#_1vsGVz?mRU}0u9pQt_J8qiK*F?YVEo4?cU&Beu4-@Gx~5zB#U zik?$vj{GerZQQf^ZX*sTngKm=CcU-#L5TLuAO z3N19AuUD6olLIdJAxh0Ho50Y6t3Myd%Wqo9gZr zJH@$US=iXDz%!;u1cR&XA-Q~)x@;u3#GkEp_fI^Zqb74?Pfri*+?^t6Y-}t9Ikee8 zUPngBJ~eCn$uU%D8t`%{zxB zO!u|U+tb!^a>2>>uDwe+ege+^yJBk7;)=ywby?ZjOLdd25%&l3^%TU`*ViA7+4Tkx-)}-wDTqOKlH#ECH!VuH5-tSK zj{SY8#VDsd7=Ug?(fr_BF1h2#U;e?ta#B)|<>r^(iJ})05-Pte_Uy|ix4C#noU^ZQ zavDKqa(L*LOHl2!{^z>j?(^frJ@BWlFkUPd*GW%DH&Z%d>AIMi@uuuVRaLdMkUS23 z1m65cH)xq<^?DP8Bs@y~T}a+Oa+yUY-y2Ssy$bh~-#wZf931s@CGnk=z6~8l8_ts7 zFVIR*qK-@vUaB16H?a{P)5bQ?|3$mlq#K-Sv9O%9^kWbWSb++1tk(Si;=BKRc7Cm9 zv56w^(A3P#`|>Rc3U|1YOn|+v)gG*BS=HFD^3x|@q;mU$g2ai>Vfp8$a|By(qe)Iq zt}lJt-Q5kA;kLh!VO22`DIfos7-EY~pxAT)A=uJW(m6>$zRdt>KK<`Tu@}AW&vL zbi=$&7qTCSC8&Sy+lwvg6`#^ zqIXwsJM_vuf+PS^?CSFJT}a37CQp8QhrN+fx&1vuaP{VcX$bn2)1fkcKlBUm$a!AD zg*X1O{eExa@g@Yd6L8@t>&;YXa^6DFtKZj1CguIMvg`Qk^@eg;YnA3B+7U}??+9}A zasyv!)M+C7u6^f3dAc=^g@in(e}u3`-KV2V1JCnX_;*p4ARokB z2zW?U)qcp%+uPfL1Lk9uCF$u#e}C6Q)j+HmtPG+FT-XLqlKQgMASmjL1ee2vg`PCX z{O5;D?i1{})e_%VCFixF<>Ipc?nfXcB_#%T%K})<#Je8u0em*oKO)q0GixFSmX21d z)<9rfkXmNHRG(>7}Y;h*8SQ$|c)7XrW_uxc_&HlX6W7Y2MG#V-cgY z;%Q7A%F8L&^lN$?cNN1EbO&uu!0Jps?NEiySL_#mL9kuW37iiqPCO6kGeR?}cj1@i z0~~_q0{Ga12~-|bZ!Wz?AiO@oU&~LRmV$T983Im{5C?|r0Ir{21(!MMhM7W0S5Syc zw%6WGfkwp&c^>=Lez2viK1cTbJFnH3RmUPiYBbA(J))eh3y8@T(AcV(NUfN^B4r~K z+WS|0`g$I128J|~3E_DCWoW}VKjJeDA2M&!=ezTLw?HHLw1|Tz>&H(|{hb4WAd9}| zY_4xY4ZBG+M_-1b6TLL07VTSXZRgt!dbFYW`gsJRiB6VMW*TXY`v9H_ho{6L z+d<&ThVwUt-a#Oq8~iK(Tn=lV&xZ%k5z?V^Z#aiE!;nhybiswwqrZk>_3N-2p6o~d zCXyd8_#6h2)NI55naDA#2DF60ynigh`^Tae81<$j>=bR7P7Dk}u(K;-2AMh9=b)tV z?FJo|C0|akCyD^tB3{AG8bKCy&pBu-8>0UYpBB{V%yWeF=mN+B5M&?!J0{kGD#oS= z*h$OS6aa@_o)UFB2^KJqXvsbmA^Sbp@XeMm6j#2&OzfQzX3A2c4o~@z#NTv`B~Tqp zAf(#=PA2~EOYMef4y;mq{d&F?HHzKiEuHkgCxd{4+%nUWlyGcC5CQ0l1pPD0wjlO5 zFs+I9871nn8621SHD-{BlkM#XSmgt(5*W0NJ#F|?XXX%vMg&$WAtuf_js&oP3qIq2 zq=rNHj8dyx5CoEP;~ttL5f@l5lX{w|B7&rI_?vdIi-ZZoF>juVK=$lRfjB)C$rpG; z^aeHBy?LA9Ka~GKAsP2ZzWHFYEq3-Zn2%E0m+?c8*sK?UC+)*;Bo_Bm?<$rl!jyyr zb3XrA1$h^>$UjvH;*T^?LI!?k$C42w<;QOn+FoHAQgAA^aC~RkP_Y30kRRw{Q`ms^ zF6Lv)12y9Ra7&DmFzhMP`gCd}nKN@+DihX~!f9X`B^^($f7FXi7xe1|pHj$t7o#5A z<$Hu>`xl=ds89nDPcE$B?*PZLGz~C}r(HjlIw24zEU6fBcCdg)6ZU>*8w`bC}9hWI`NF?QIB@40nh;RO7^s` zMgPQdANB7Oz5h?FRbf9#g;pfvhsZUtV2wabf4YDJQ%%5C-Jg(w+n6|1OnWK6XV;1On*U+8~X@7w6K*OPycwK{*;Wk4;Y>wQ|mc8Romd6d7F6!6W4xz5*q+&jIyRh6PR9l1LxQ6ns`EU7jT2Ympo9QnIEajc+G%>?w#1#j~b{)!?8S89&e_tkG39g zcwik5jTq&{ov>Fw1{FXvPPKov%p~+u2iB_ZfYHS#=*fw3N1GD6w?T>D#6o16qs9KH z&xcV5R(h&G&5^y7pI)hz@Y5J8pr5@5>z2BPtuN1xY;pZXjLScEXl1EK}? z^#+~<_!*m{W7B^^gayB+x*V|RV}m<8IR~cP<3RnNGlfHId)A4EiJ4$sdN+0^nKjpL zJCia?v*o4!shx`waH0!nF9A(~?9T19f9!AmQ~PQ#5bcK!j2CM|~1M;Pl6@v$s; zbJQnBWcbf#-uW}V-nD|F4k%%_(*RCe!=_t1TC^6IZl2}`c&AL+1)|Gmuz})~X|i=D zRGiG0LGzpL!XaokT&9{ij7Bk#lHgFwQ_7_NbMDf>;5u`ve@Q^VJrJlnYr_%Nl-PlP zVFstJ^94j}+LOY%TUxAVA!WG~)|>;b?d@q;es>R8G9>uEo&;XTJg0?+3UD?mPR$cf z>?41q;eS^MlDax;`{~qfMZ@{i^~To>9x2KRH=jCn$Yn;K3zFUq1=|AoOyTVCg>d@> zoth$E1H_D8wvpxnlB@=NZ2b4e&KA0yHDaTfZ-b2qr;pc(H?aJNi1p}|DRt&Mka|u3#>}e04y$MVN5-q1a82(WY3=i&@ zYdCfJM1Q8OQ{aTBF6NFjC8yM^@%Wn0=?Xa56}GYqbm@V}x4@Z?-*0QM5uPSVmy)M} zDinCUL2ODK^aMDs^bK+edVjaYAziQ+d|pt+$0>C&e){crGH)Q%5&)}>H`NF&ok5P@ zKrye zoNc2z*=ZheKKb-Cf0$KXpXL$>>r);`aWm!hrGbm}Qib#_v0{RnAZ=LV#Z~Mx_9^G4btpUlLMZ95muqhrv?awpIyWBx(2PfMzq=*cqD}8$9d;C z{gheDlW+w z!O~|Sm_p45;^L3CwyM3^SgkxF`bQoo)`h{+rr5OC>nVv6rJh~4_`%MaC*1P2N=f>6 zkDBTI+iz5yV>y@v)<1sWYop}m<|Z@n#Mp|8P%$f>xbJU{N&gi?7%Z-ZG{ue*JvZN- z0@aM9?O*2HU2(je0s=MNVKut>L*~~6kt!HhGdif~afapQBuUGaB@JjQT+Ji(YhT;R z4&LH^{SliQ$d&5`aRfHntlGx#q75~;qh;&2i(3o|HFHCMIpvqrN^PC^Ma$k$Okv0v z&ipPD>a$&ta7&vFKiVPfRZYW%TJ6cS%L9Q08*^%$a|LA2ioqxT>jmgDg=(cIutt=3 z$eerNgjke2npPtCxF=**CBVJiyy+z0#q?E;@T;t>KQ6wwZWRqOxH@bhH&&Ssr0^9T z9**ewcY?C|sYB8Rb$nYJo7M6uY~2Iu{P2>cicXq$#3NAb7vJlZd!i81guh?Otb5GK zY1@~Dtj~aI2#ZpiM*q3H$>aXmVB}|Tccx&-ytA{@azUxHTaUu{Zfv`J-?NyS#%y4y ziTl}Lszj_cyU_iVe;5Md76Eb7wxq^!pEzX;(#q>Lw9)(vQh0s zhDHqheptJGcy?yJV$HEfJN#>D1k_vMNV$?=a-nvmN3?I=mcCe$kDDV0g1*o^qYQIP z*wYq!SjeJfPmc9=_%Fp;Q4Yu3)@Ucy*|e~PenyD=NfDRAo0)yKIS6zTI%~zEu%<`y z8p9L5r|rXP23v}qow2^RQQ>D|p!KrPn)o%CP>5I(zu?-wc8m&N+TdV<4K28Tv1tBU6RF#^c}hX+=egm{AdSBUe6-D8vS^XG1bV z4IZVPmNEPw{>|#@-B12l>YiW?{FgRunpJOYBES^Rsc{3#x#98Rzya}U+- zu}PJ7r?^l1XGds`2Ex9RvPt~?gO#&sqdPWRZyWi4U!OVTtCFfA9Ll|okCkncPaBFl zl)O7~TgPCgRy*Xfc?| z%uRT%1)hBi&r;iL-kiN$(Wbd!Ahh=}wyx&->5$R)4wTl;nQ_soK267YHV&E1$r%hv z>sLN5#|P|@#76mzi~@6QCx&%mS?7@&-ODL$GfQIUroYTt5W+=U}lxP&r`xo}0diV)Hon^)P-`CU}I6hn{DRPzB+5W()m9^Zg z4npyh+vV@HaG@mZ&echsV~u3h%X4!+8v<1Sxgmshb-B)Ec!_s@-~44u1g8CJD=yzF zJ$UMp^d^7gvZ9T4;mP+&y$yQz8$+JWt%*me`cLFw$FOT_4dYp(e!@Okw0FZY569W}`cIe~-EviuKEcKfm)`MrE-VPdDVS~q z9bc0|@zKX5xBuD*`+D&rdooNAx#W$N5@SK|+HU=p|+QVm#nJ<^0R|S2Z`RJ38~VR+U-J zzHz_j6zGxku&nBtJ2^{5C2^4(0$lm4RaA)#?+=I*rBxTveOR~c!+s>XiiXlI=0rzAZ zxX|8l=kf~e7u2@v1M7^?)A$;OmDyFrR)q`437F~{(?o@H_pf{aL;Q)?Ac*$A=djGe zkN^H$G`id>~p1BKUt>9iffH)Jjm%kBom@kdUDGE-FcFYo5R=i2l$J|Ux~`lwIY|5l(z=jDmw?^?Ombn2WcxZlhX z@Pc}D$~2YN>1H_+6QR;497Fqqx!pPCE$0jztyCTZ9bZHnJ>CNu+yoKLrSk6Ki_)I; zXKHXW!zK-`Z-&=a^%t9@x;1=rJx=s&y=5qVra2hPVqviv4h|Cgmihj~K6~A6A$*p@BU(RtnTUEtp9a739~c z1nLqxAH+R1LU{cpeC=#5{S+6f5(CYC`?Q6E{>veOsSnt4ALr#U|F$j73NrcJ|0%xp zaT9gy8AOBV`PqW$pviH~)g6u^#aTf*^_SA659wn4=0C>f3$;9o`{Oy38R_hNLX_$G zpo%A2C+_hj0-15(cvcjCZ-7xwL+C*49go$ZL5%V8Cv1w-jYro9na2 zl;KG=yr-lp*ULOrc959W_2oYX4%QEUC<>(KXWFtv#{dpTg=deO3nbZprm5B+4zKI_gJuJ!==zQ|CMwEM$__lNsSJ`u}b%-&tKsV#dW$lI{9^6a|my4dX{GSPT_ zjSTfjijG3mXHlY})_sy|h&#zY+EG2}b`iueBX&Ql@KZi$=&be&IW>ISLH5*2*Vcu4 zI=`XH`tweQzp0@xh4Il_dw zDswv6L@LW8uT|~VGbQNNPmDERS6NT#(>4kx?s(i(C|>}lut5P6WWK)9M?5DZh;2^) zUM$S`_Jer1d5XbEmu&^tDuN>C&%yn@VX-sv2E2?Rh@EFXf#BVC*1bZ9uWCnYe*ecz=_$}cl0zaLa8{M&>k;jF57&qPXd{ho=5JDr4v|I~4)Xni z0mG67_lo2_uOhtg#mp(S3M(7ss&fs-zgbTi53yCMtl1>-Y8YC0Mcc6L*lOK3KokkX?#hMQ#lY?;fb9D_jh zW8sBsk)|1T7iDap#l)u#F*bH8t%Mt881Px9;&_pewm{@b{}mK|pv&sI6J5BIfUa9V zGqvo8XIvQjS%!ScMq=#|!37njoJj_L``krkuHrPG#GFZAuIlo)@=oR7#4O@-;=|Gg z@Ab(`arZYpv7lh?lV@~jXFKO*gg*(3hjxV6ErreC>aiV91nN z_mfI4mGAGDGL|SwA6AeYJM@XYV&){pLOg(3Nwe!oNyz!sqnWk2Zo&z*n#wRJqXftI zkTW+*SdcTfNVITAnhUiZoJGWu?7>E~E$hmwnYt%0XD~ZXxmuY_W%diCLNk<`&qe(p zkz{#qZ?azBj+?>BC{OikQ#c%ZZ1Zro~tOPWU6QiawMgyO|H6pM`XSL43 z?dCnpH(1J=n|6bZ!g`&BPGxZ>t)%*wjG^x8wsMf~jU482>2;FG=V@ZMORT>T-KHB+ zkMUMACo(paKj&_C2JgGyggJfe4bKyk1ucb0HYcv*{VIZ%pI4GQh%7AKI3v{gx|(OnJ<~y_nzl2a2~p`}oJ-GkmUA>Tv!6+^ zuw|w-+{*QpGt?bcYtivw+Q1Z6(&UWJJ(3}^da6Q5y%;tV2aNQX3sDqB&?7l_i z%u$({@k;Kp?W6{oi`h=TXePJnhUT^!m6;4CD#yJRCgnI^I7hdH6gP?SCmvk!SdARu zC6SdOhmlPTW538c35jtdKbMygY7}0M^F9{zXcaJAtNVy)9-xaAU9&;NB#I})eS6ru z!Z`u4m8mk*duvE#G3^SQ<6dTuBm=*jBX5MWvoE^paC$q8WR6~9T@`k6y3Z?X5Vdq` zw19-f?2|ffV+`<8zn#c9O&vFoo6vF=$0YpI#z#MMosH!h95rSqu1Ux13p%)7$ILhA zhVHeHn0g!_v;HbpM5*n6?vYGDI9~kRAQ>UZ^lD?w5Dq7usEIvc#i7dNl&)_aeE@e6 zY$-=%n0}8lu;^KFbaMOj!vb|UZ_7(~vDB#X;|29QfBkmmR#_thUNP2`ISzuxpaj*; z9s#(@l-bv)uW2G0f;6&5zASCN{_yzA*cqGn)w}tB6-yG;4l*AL6YFMSHo_=vE`A=B zS@l}%?%Y(C^BO&~x*gUlt4MFe`7-xaKpFcxsU@QfpnxOno0zp~;ZvZ&$xNr1PnMa| zHP~zLL-Th7<S!97*&qWRqg6rIm&tt^S<%*Lz_+h|tIldqU;nu8#Ot1N?&qvPnvbj~Y#Gw%YTvymwbneJqE zbg9mZXXkuz@$4$X`K-!9$|7Rt{O4f>%@0unuj-`xJTT`!t4Jlbt`ZBpqBY#l* z?(+zE5QYS{ibuClAB~a^^gQktd62?`%PEx_9L3i`gfh~cmW*wog;Hv?`WOmv6;m!h zTEZDPC-7&UGf2bSW#BA=Mf`TKrA?ffiaeYd`B`F;RcH?cAF4*DfIYr4=-8EvKbjt` z%A^~si2T3SD`jUKz1*%;oEyyu?LTJ~mCMbWboIl-- zK^y@^zh-K5jJR)}p&I|tY%iO6vy}Bndr2_30)tayb_VfDDo7qJ@#qI8ee{I**@B91 ztOkW{L~*H88rqGi;xNvywI;P>VC;2eY=7|tj$e6OSIP2#O^w84$ra=QXqLa?=)zZe z>Z<;8YyO8ToEZWWWmiyQsCip+U7&o4XV z29~`~K;^#PlfBWX;S|2n&TO?mHWneM#2azI6Tg}~&@@&e;g+jJddPJKlclmcDd;5a-mY`ym&Scqk=02`@I@JLy zDwL6!{kno!0ZAxXP;rKwxo@QT+D9$#chH01Y z^|s36qY>|ZEnzVZlF-IoVubS{?l$GQqYD>X$6W*8)e8cJ31M4yZ(!Ud53@ix%YI^p2Z{AO6c!KZ{^*?-?6(ym@Fa-`eX?k0UoCO zBO75ci(HJ1Xv~t;9_O^RD2Lin`erUKao|Kyl>>cg4BYnG7C4rRj>s*K6T9la3}9mA zA5AErhm^g-+PYY-SZ$-}r>$wo0#8;>!fW@$7F@gNMqde~Yn?-o`EVa4ES}uJcc0aO zx9=AI3X)OgG_FD2X%%8 zc8^h&Al?JCY`g&5GnL<(du%n(B;@t?E&nl+)>Y*&_#p@NZ5~XeD$#z*?@GUOW{mlh^UV*lav8-gZ z6R5@HIYQA7pSyEH@Y?ya(005ske|5y5V~mRI^)9_6f7qj8m@Cjv)qhlz8N3qooDS? zmbF`Qk%Cn3g|sXUwUO;pZids$%5`*}@2LZWCe*B(?2h@N&srJD#m%kidW)1)4d5!J zVbCBCCnBe!qT(-f+rt1DgWIKWWTp12={L!;C!MA7Zn0{6@|1LSQTNa2D$9-ED(Q#+ zt>#YF4sX=?ceNQ3hG{umeAPVd+8)3E*2aidFW+x!=KzV^IyeF(+}--9`_&I8U8F*% zU-5LhckXTQ2ny1sx%|9;jo`-|x+{T86(3~veS_vP|eO+PI))F+4mR&|bXp!3vU4Kle(9K{@(f zWd(t)U&;z4c2K-WH2G{jfcKW08OD@#Tm4!90#ir$bk5jdJAz%*&U_k%*3_op+go{O zMYaG`MNC4n2;j#>s*_zwnd;mG=R@c)S4AQh;Hg!3?ZmQKcc<6~`ik?_3q;nK?x;Zf z<`WN(+Hs`tXG-_Y?noys>{~L#{PojTxw;RtYI^wMihynr+y-S&9o%Ju|~Fu_kJ)8l%twG+7Q?$YHMAg4X=YpH$y*v z{;X5waKZ77i3;Z&ys<<)JcE6y|9`-X4jk@Ky)zlBw1+la3+TE9T#J`h!ueu=jQ#ne zzhZ4y*&k8`8T_J^A*wzP|qEef%HLFg{wb0bS34qyg}x++QaTk7LYC z+tk#QRr%!G-z;cAcHojQKO-`P4%dZ+g~t)*CIBXZzG)T~mKtcJrp?S_DR$elf$nmF zRY2AOKBTz0%3(#bKwsR(1_K>7qSf9+F^YHa)dA!K@P=iFgTVrnx8BXpy-+$Cz;gl2 zV*+4^I9(If&KogYW<9;V8M4v(+_ACSpZ1H1f38euDFCbVhH3*^bl_X zip#oFMp`;fey$~qL8}grrwrh49_x*ySFeq`ZFB$w%D0^W(1f)wv#1MOyGI_K&VVb4 zV%53D&jT&Kfb@&7&ATTJ&DxP{dY!zU$9r=OfVPTf2PyzarH*#FDu+ZubGuwzwXW4) zCkF=y4-XITFiGeP^E`IzbiRZCqoqZo%E7`c@=Ba7G|9TTHB&f_0va!Fqo+qHqgUhE zv#-1p6}HAoN=kBaSLdn$1pwOeJ8q!AA7D9_Bc-`7sj@^5c7NAn(On=OhGc*^fydKF z@o=zcmt(OShld+o-jV>J$$n1SL9C`-0Km<7>2uW7VVNQ8>A$%`XmyGE}|bA`X@b#)thJ9mX)1k#4-CShYMzZ3fk=u_&G`0-LyyF+NUsQo(ylUs+<=q2}My?)C+{lN! zqJ>38fMWun2cPY%?8@^OFJ6FBZ1d33T_BZzNQrKqvFWRm$dHdu?$xXO{Y0C`THCgR z%VN0r^7*q^%p%~i{61G#kIrqxI}30HPl4!XPnMEj7Fvljq@Zh|X3tZ`n!jcaAf&V$l#M=lXTq}%ydz+M3YisR9!gc|Vi9ST_Dg^ki`mVrb0EEYMFps( zPK8YxE7w&eW+x383{ryGSYVY~Vfet?qr x|H8A-G{i%%;}6(A?|p1L#s9?Z|J%T^(DbDF1fKn1Ej)>k5| +Overview · ManoptExamples.jl

                LIst of Examples

                NameprovidesDocumentation
                Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
                Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
                Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚

                Symbols:

                • A Allocating variant
                • I In-place variant
                • 📚 link to documented functions in the documentation
                diff --git a/v0.1.1/index.html b/v0.1.1/index.html new file mode 100644 index 0000000..2ccff3b --- /dev/null +++ b/v0.1.1/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

                ManoptExample.jl

                This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

                Each example usually consists of

                • a cost function and additional objects, like the gradient or proximal maps, see objectives
                • an example explaining how to use these, see examples

                Helping functions that are used in one or more examples can be found in the section of functions in the menu.

                diff --git a/v0.1.1/objectives/index.html b/v0.1.1/objectives/index.html new file mode 100644 index 0000000..0b5042a --- /dev/null +++ b/v0.1.1/objectives/index.html @@ -0,0 +1,17 @@ + +Objectives · ManoptExamples.jl

                List of Examples

                Riemannian Mean

                See the Riemannian mean example to see these in use.

                ManoptExamples.RiemannianMeanCostType
                RiemannianMeanCost{P}

                A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

                where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

                Constructor

                RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

                Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

                See also

                RiemannianMeanGradient!!, Riemannian_mean_objective

                source
                ManoptExamples.RiemannianMeanGradient!!Type
                RiemannianMeanGradient!!{P} where P

                A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

                where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

                This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

                Constructors

                RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

                Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

                RiemannianMeanGradient!!(
                +    M::AbstractManifold,
                +    data::AbstractVector{P};
                +    initial_vector::T=zero_vector(M, first(data)),
                +) where {P,T}

                Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

                See also

                RiemannianMeanCost, Riemannian_mean_objective

                source
                ManoptExamples.Riemannian_mean_objectiveMethod
                Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
                +Riemannian_mean_objective(M, data;
                +initial_vector=zero_vector(M, first(data)),
                +evaluation=AllocatingEvaluton()
                +)

                Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

                See also

                RiemannianMeanCost, RiemannianMeanGradient!!

                Note

                The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

                source

                Robust PCA

                See the Robust PCA example to see these in use.

                ManoptExamples.RobustPCACostType
                RobustPCACost{D,F}

                A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

                \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

                This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

                \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

                Note that this is a mutable struct so you can adapt the $ε$ later on.

                Constructor

                RobustPCACost(data::AbstractMatrix, ε=1.0)
                +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

                Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

                source
                ManoptExamples.RobustPCAGrad!!Type
                RobustPCAGrad!!{D,F}

                A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

                Note that this is a mutable struct so you can adapt the $ε$ later on.

                Constructor

                RobustPCAGrad!!(data, ε=1.0)
                +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

                Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

                source
                ManoptExamples.robust_PCA_objectiveFunction
                robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
                +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

                Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

                See also

                RobustPCACost, RobustPCAGrad!!

                Note

                Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.

                source

                Rosenbrock Function

                See the Rosenbrock example to see these in use.

                ManoptExamples.RosenbrockCostType
                RosenbrockCost

                Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

                which means that for the 2D case, the manifold $\mathcal M$ is ignored.

                See also Rosenbrock (Wikipedia)

                Constructor

                f = Rosenbrock(a,b)

                generates the struct/function of the Rosenbrock cost.

                source
                ManoptExamples.RosenbrockGradient!!Type
                RosenbrockGradient

                Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

                i.e. also here the manifold is ignored.

                Constructor

                RosenbrockGradient(a,b)

                Functors

                \operatorname{grad} f(M,p)
                +\operatorname{grad} f(M, X, p)

                evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

                source
                diff --git a/v0.1.1/search/index.html b/v0.1.1/search/index.html new file mode 100644 index 0000000..a8f7dde --- /dev/null +++ b/v0.1.1/search/index.html @@ -0,0 +1,2 @@ + +Search · ManoptExamples.jl

                Loading search...

                  diff --git a/v0.1.1/search_index.js b/v0.1.1/search_index.js new file mode 100644 index 0000000..0fca125 --- /dev/null +++ b/v0.1.1/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 7/2/23","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794764022\n 0.006531600682543096\n 0.726779982085954","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868395649618767\n 0.006531393870513675\n 0.7267797141480264","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393265070905\n 0.006531566700408201\n 0.7267799379452656","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/ManoptExamples.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"objectives/#List-of-Examples","page":"Objectives","title":"List of Examples","text":"","category":"section"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective-Tuple{AbstractVector}","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also Rosenbrock (Wikipedia)\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\n\\operatorname{grad} f(M,p)\n\\operatorname{grad} f(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny Bergmann, Laura Weigl 7/2/23","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139394\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.43069094790552","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412965075156471","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/#LIst-of-Examples","page":"Overview","title":"LIst of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation\nRiemannian Mean f, operatornamegradf (A/I), objective 📚\nRobust PCA f, operatornamegradf (A/I), objective 📚\nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"#ManoptExample.jl","page":"Home","title":"ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 1/3/23","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the Rosenbock example.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field = ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLineseach() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n * linesearch_stopsize = 0.0\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |Δf| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 45 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 20), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector trnasport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |Δf| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"1.4409702527480214e-14","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"}] +} diff --git a/v0.1.1/siteinfo.js b/v0.1.1/siteinfo.js new file mode 100644 index 0000000..20089fd --- /dev/null +++ b/v0.1.1/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.1"; diff --git a/v0.1.2/assets/documenter.js b/v0.1.2/assets/documenter.js new file mode 100644 index 0000000..4248476 --- /dev/null +++ b/v0.1.2/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +window.MathJax = { + "tex": { + "packages": [ + "base", + "ams", + "autoload" + ], + "inlineMath": [ + [ + "$", + "$" + ], + [ + "\\(", + "\\)" + ] + ], + "tags": "ams" + }, + "options": { + "ignoreHtmlClass": "tex2jax_ignore", + "processHtmlClass": "tex2jax_process" + } +} +; + +(function () { + var script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.js'; + script.async = true; + document.head.appendChild(script); +})(); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// 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() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/v0.1.2/assets/search.js b/v0.1.2/assets/search.js new file mode 100644 index 0000000..c133f74 --- /dev/null +++ b/v0.1.2/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/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'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + 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) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + searchbox.val(search_query) + } + update_search_box(); + }) +}) + +}) diff --git a/v0.1.2/assets/themes/documenter-dark.css b/v0.1.2/assets/themes/documenter-dark.css new file mode 100644 index 0000000..0bf1af7 --- /dev/null +++ b/v0.1.2/assets/themes/documenter-dark.css @@ -0,0 +1,7702 @@ +@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 .tabs, html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .breadcrumb, html.theme--documenter-dark .file, html.theme--documenter-dark .button, .is-unselectable, html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after, html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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 .admonition:not(:last-child), html.theme--documenter-dark .tabs:not(:last-child), html.theme--documenter-dark .message:not(:last-child), html.theme--documenter-dark .list:not(:last-child), html.theme--documenter-dark .level:not(:last-child), html.theme--documenter-dark .breadcrumb:not(:last-child), html.theme--documenter-dark .highlight:not(:last-child), html.theme--documenter-dark .block:not(:last-child), html.theme--documenter-dark .title:not(:last-child), +html.theme--documenter-dark .subtitle:not(:last-child), html.theme--documenter-dark .table-container:not(:last-child), html.theme--documenter-dark .table:not(:last-child), html.theme--documenter-dark .progress:not(:last-child), html.theme--documenter-dark .notification:not(:last-child), html.theme--documenter-dark .content:not(:last-child), html.theme--documenter-dark .box:not(:last-child) { + margin-bottom: 1.5rem; } + +html.theme--documenter-dark .modal-close, html.theme--documenter-dark .delete { + -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 .modal-close::before, html.theme--documenter-dark .delete::before, html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::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 .modal-close::before, html.theme--documenter-dark .delete::before { + height: 2px; + width: 50%; } + html.theme--documenter-dark .modal-close::after, html.theme--documenter-dark .delete::after { + height: 50%; + width: 2px; } + html.theme--documenter-dark .modal-close:hover, html.theme--documenter-dark .delete:hover, html.theme--documenter-dark .modal-close:focus, html.theme--documenter-dark .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + html.theme--documenter-dark .modal-close:active, html.theme--documenter-dark .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + html.theme--documenter-dark .is-small.modal-close, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.modal-close, html.theme--documenter-dark .is-small.delete, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + html.theme--documenter-dark .is-medium.modal-close, html.theme--documenter-dark .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + html.theme--documenter-dark .is-large.modal-close, html.theme--documenter-dark .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +html.theme--documenter-dark .control.is-loading::after, html.theme--documenter-dark .select.is-loading::after, html.theme--documenter-dark .loader, html.theme--documenter-dark .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdee0; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +html.theme--documenter-dark .hero-video, html.theme--documenter-dark .modal-background, html.theme--documenter-dark .modal, html.theme--documenter-dark .image.is-square img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square img, +html.theme--documenter-dark .image.is-square .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, html.theme--documenter-dark .image.is-1by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +html.theme--documenter-dark .image.is-1by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, html.theme--documenter-dark .image.is-5by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +html.theme--documenter-dark .image.is-5by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, html.theme--documenter-dark .image.is-4by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +html.theme--documenter-dark .image.is-4by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, html.theme--documenter-dark .image.is-3by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +html.theme--documenter-dark .image.is-3by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, html.theme--documenter-dark .image.is-5by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +html.theme--documenter-dark .image.is-5by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, html.theme--documenter-dark .image.is-16by9 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +html.theme--documenter-dark .image.is-16by9 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, html.theme--documenter-dark .image.is-2by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +html.theme--documenter-dark .image.is-2by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, html.theme--documenter-dark .image.is-3by1 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +html.theme--documenter-dark .image.is-3by1 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, html.theme--documenter-dark .image.is-4by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +html.theme--documenter-dark .image.is-4by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, html.theme--documenter-dark .image.is-3by4 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +html.theme--documenter-dark .image.is-3by4 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, html.theme--documenter-dark .image.is-2by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +html.theme--documenter-dark .image.is-2by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, html.theme--documenter-dark .image.is-3by5 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +html.theme--documenter-dark .image.is-3by5 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, html.theme--documenter-dark .image.is-9by16 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +html.theme--documenter-dark .image.is-9by16 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, html.theme--documenter-dark .image.is-1by2 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +html.theme--documenter-dark .image.is-1by2 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, html.theme--documenter-dark .image.is-1by3 img, html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +html.theme--documenter-dark .image.is-1by3 .has-ratio, +html.theme--documenter-dark #documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +html.theme--documenter-dark .pagination-previous, +html.theme--documenter-dark .pagination-next, +html.theme--documenter-dark .pagination-link, +html.theme--documenter-dark .pagination-ellipsis, html.theme--documenter-dark .file-cta, +html.theme--documenter-dark .file-name, html.theme--documenter-dark .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 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 .pagination-previous:focus, + html.theme--documenter-dark .pagination-next:focus, + html.theme--documenter-dark .pagination-link:focus, + html.theme--documenter-dark .pagination-ellipsis:focus, html.theme--documenter-dark .file-cta:focus, + html.theme--documenter-dark .file-name:focus, html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .button:focus, html.theme--documenter-dark .is-focused.pagination-previous, + html.theme--documenter-dark .is-focused.pagination-next, + html.theme--documenter-dark .is-focused.pagination-link, + html.theme--documenter-dark .is-focused.pagination-ellipsis, html.theme--documenter-dark .is-focused.file-cta, + html.theme--documenter-dark .is-focused.file-name, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-focused.button, html.theme--documenter-dark .pagination-previous:active, + html.theme--documenter-dark .pagination-next:active, + html.theme--documenter-dark .pagination-link:active, + html.theme--documenter-dark .pagination-ellipsis:active, html.theme--documenter-dark .file-cta:active, + html.theme--documenter-dark .file-name:active, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .button:active, html.theme--documenter-dark .is-active.pagination-previous, + html.theme--documenter-dark .is-active.pagination-next, + html.theme--documenter-dark .is-active.pagination-link, + html.theme--documenter-dark .is-active.pagination-ellipsis, html.theme--documenter-dark .is-active.file-cta, + html.theme--documenter-dark .is-active.file-name, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .is-active.button { + outline: none; } + html.theme--documenter-dark .pagination-previous[disabled], + html.theme--documenter-dark .pagination-next[disabled], + html.theme--documenter-dark .pagination-link[disabled], + html.theme--documenter-dark .pagination-ellipsis[disabled], html.theme--documenter-dark .file-cta[disabled], + html.theme--documenter-dark .file-name[disabled], html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], html.theme--documenter-dark .button[disabled], fieldset[disabled] html.theme--documenter-dark .pagination-previous, html.theme--documenter-dark fieldset[disabled] .pagination-previous, + fieldset[disabled] html.theme--documenter-dark .pagination-next, + html.theme--documenter-dark fieldset[disabled] .pagination-next, + fieldset[disabled] html.theme--documenter-dark .pagination-link, + html.theme--documenter-dark fieldset[disabled] .pagination-link, + fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis, + html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis, fieldset[disabled] html.theme--documenter-dark .file-cta, html.theme--documenter-dark fieldset[disabled] .file-cta, + fieldset[disabled] html.theme--documenter-dark .file-name, + html.theme--documenter-dark fieldset[disabled] .file-name, fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark fieldset[disabled] .select select, html.theme--documenter-dark .select fieldset[disabled] select, html.theme--documenter-dark fieldset[disabled] .textarea, html.theme--documenter-dark fieldset[disabled] .input, html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] html.theme--documenter-dark .button, html.theme--documenter-dark fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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. + */ + /*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/ + /* 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + html.theme--documenter-dark code, + html.theme--documenter-dark pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + html.theme--documenter-dark body { + color: #fff; + font-size: 1em; + font-weight: 400; + line-height: 1.5; } + html.theme--documenter-dark a { + color: #1abc9c; + cursor: pointer; + text-decoration: none; } + html.theme--documenter-dark a strong { + color: currentColor; } + html.theme--documenter-dark a:hover { + color: #1dd2af; } + html.theme--documenter-dark code { + background-color: rgba(255, 255, 255, 0.05); + color: #ececec; + font-size: 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + html.theme--documenter-dark .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + html.theme--documenter-dark .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + html.theme--documenter-dark .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + html.theme--documenter-dark .content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + html.theme--documenter-dark .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + html.theme--documenter-dark .content ul ul ul { + list-style-type: square; } + html.theme--documenter-dark .content dd { + margin-left: 2em; } + html.theme--documenter-dark .content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + html.theme--documenter-dark .content figure:not(:first-child) { + margin-top: 2em; } + html.theme--documenter-dark .content figure:not(:last-child) { + margin-bottom: 2em; } + html.theme--documenter-dark .content figure img { + display: inline-block; } + html.theme--documenter-dark .content figure figcaption { + font-style: italic; } + html.theme--documenter-dark .content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + html.theme--documenter-dark .content sup, + html.theme--documenter-dark .content sub { + font-size: 75%; } + html.theme--documenter-dark .content table { + width: 100%; } + html.theme--documenter-dark .content table td, + html.theme--documenter-dark .content table th { + border: 1px solid #5e6d6f; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + html.theme--documenter-dark .content table th { + color: #f2f2f2; } + html.theme--documenter-dark .content table th:not([align]) { + text-align: 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 .content kbd, html.theme--documenter-dark .content .tags kbd, html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + html.theme--documenter-dark .tags .tag:not(:last-child), html.theme--documenter-dark .tags .content kbd:not(:last-child), html.theme--documenter-dark .content .tags kbd:not(:last-child), html.theme--documenter-dark .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large), html.theme--documenter-dark .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 15px; } + html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium), html.theme--documenter-dark .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + html.theme--documenter-dark .tags.is-centered { + justify-content: center; } + html.theme--documenter-dark .tags.is-centered .tag, html.theme--documenter-dark .tags.is-centered .content kbd, html.theme--documenter-dark .content .tags.is-centered kbd, html.theme--documenter-dark .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + html.theme--documenter-dark .tags.is-right { + justify-content: flex-end; } + html.theme--documenter-dark .tags.is-right .tag:not(:first-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + html.theme--documenter-dark .tags.is-right .tag:not(:last-child), html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child), html.theme--documenter-dark .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag, html.theme--documenter-dark .tags.has-addons .content kbd, html.theme--documenter-dark .content .tags.has-addons kbd, html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + html.theme--documenter-dark .tags.has-addons .tag:not(:first-child), html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-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 .content kbd:not(:last-child), html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child), html.theme--documenter-dark .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + html.theme--documenter-dark .tag:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + align-items: center; + background-color: #282f2f; + border-radius: 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 .content kbd:not(body) .delete, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + html.theme--documenter-dark .tag.is-white:not(body), html.theme--documenter-dark .content kbd.is-white:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + html.theme--documenter-dark .tag.is-black:not(body), html.theme--documenter-dark .content kbd.is-black:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + html.theme--documenter-dark .tag.is-light:not(body), html.theme--documenter-dark .content kbd.is-light:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: #ecf0f1; + color: #282f2f; } + html.theme--documenter-dark .tag.is-dark:not(body), html.theme--documenter-dark .content kbd:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-dark:not(body), html.theme--documenter-dark .content .docstring > section > kbd:not(body) { + background-color: #282f2f; + color: #ecf0f1; } + html.theme--documenter-dark .tag.is-primary:not(body), html.theme--documenter-dark .content kbd.is-primary:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) { + background-color: #375a7f; + color: #fff; } + html.theme--documenter-dark .tag.is-link:not(body), html.theme--documenter-dark .content kbd.is-link:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .tag.is-info:not(body), html.theme--documenter-dark .content kbd.is-info:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #024c7d; + color: #fff; } + html.theme--documenter-dark .tag.is-success:not(body), html.theme--documenter-dark .content kbd.is-success:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #008438; + color: #fff; } + html.theme--documenter-dark .tag.is-warning:not(body), html.theme--documenter-dark .content kbd.is-warning:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ad8100; + color: #fff; } + html.theme--documenter-dark .tag.is-danger:not(body), html.theme--documenter-dark .content kbd.is-danger:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #9e1b0d; + color: #fff; } + html.theme--documenter-dark .tag.is-normal:not(body), html.theme--documenter-dark .content kbd.is-normal:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.85em; } + html.theme--documenter-dark .tag.is-medium:not(body), html.theme--documenter-dark .content kbd.is-medium:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 15px; } + html.theme--documenter-dark .tag.is-large:not(body), html.theme--documenter-dark .content kbd.is-large:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child), html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child, html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child, html.theme--documenter-dark .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + html.theme--documenter-dark .tag.is-delete:not(body), html.theme--documenter-dark .content kbd.is-delete:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + html.theme--documenter-dark .tag.is-delete:not(body)::before, html.theme--documenter-dark .content kbd.is-delete:not(body)::before, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + html.theme--documenter-dark .tag.is-delete:not(body)::after, html.theme--documenter-dark .content kbd.is-delete:not(body)::after, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + html.theme--documenter-dark .tag.is-delete:not(body):hover, html.theme--documenter-dark .content kbd.is-delete:not(body):hover, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, html.theme--documenter-dark .tag.is-delete:not(body):focus, html.theme--documenter-dark .content kbd.is-delete:not(body):focus, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #1d2122; } + html.theme--documenter-dark .tag.is-delete:not(body):active, html.theme--documenter-dark .content kbd.is-delete:not(body):active, html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #111414; } + html.theme--documenter-dark .tag.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:not(body), html.theme--documenter-dark .content kbd.is-rounded:not(body), html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input:not(body), html.theme--documenter-dark .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, html.theme--documenter-dark .content .title kbd, html.theme--documenter-dark .title .docstring > section > a.docs-sourcelink, + html.theme--documenter-dark .subtitle .tag, + html.theme--documenter-dark .subtitle .content kbd, + html.theme--documenter-dark .content .subtitle kbd, + html.theme--documenter-dark .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + html.theme--documenter-dark .title { + color: #fff; + font-size: 2rem; + font-weight: 500; + line-height: 1.125; } + html.theme--documenter-dark .title strong { + color: inherit; + font-weight: inherit; } + html.theme--documenter-dark .title + .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 .select select, html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #1f2424; + border-color: #5e6d6f; + border-radius: 0.4em; + color: #dbdee0; } + html.theme--documenter-dark .select select::-moz-placeholder, html.theme--documenter-dark .textarea::-moz-placeholder, html.theme--documenter-dark .input::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select::-webkit-input-placeholder, html.theme--documenter-dark .textarea::-webkit-input-placeholder, html.theme--documenter-dark .input::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-moz-placeholder, html.theme--documenter-dark .textarea:-moz-placeholder, html.theme--documenter-dark .input:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:-ms-input-placeholder, html.theme--documenter-dark .textarea:-ms-input-placeholder, html.theme--documenter-dark .input:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(219, 222, 224, 0.3); } + html.theme--documenter-dark .select select:hover, html.theme--documenter-dark .textarea:hover, html.theme--documenter-dark .input:hover, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:hover, html.theme--documenter-dark .select select.is-hovered, html.theme--documenter-dark .is-hovered.textarea, html.theme--documenter-dark .is-hovered.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #8c9b9d; } + html.theme--documenter-dark .select select:focus, html.theme--documenter-dark .textarea:focus, html.theme--documenter-dark .input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:focus, html.theme--documenter-dark .select select.is-focused, html.theme--documenter-dark .is-focused.textarea, html.theme--documenter-dark .is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .select select:active, html.theme--documenter-dark .textarea:active, html.theme--documenter-dark .input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:active, html.theme--documenter-dark .select select.is-active, html.theme--documenter-dark .is-active.textarea, html.theme--documenter-dark .is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #1abc9c; + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .select select[disabled], html.theme--documenter-dark .textarea[disabled], html.theme--documenter-dark .input[disabled], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] html.theme--documenter-dark .select select, fieldset[disabled] html.theme--documenter-dark .textarea, fieldset[disabled] html.theme--documenter-dark .input, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + background-color: #8c9b9d; + border-color: #282f2f; + box-shadow: none; + color: white; } + html.theme--documenter-dark .select select[disabled]::-moz-placeholder, html.theme--documenter-dark .textarea[disabled]::-moz-placeholder, html.theme--documenter-dark .input[disabled]::-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder, html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-moz-placeholder, html.theme--documenter-dark .textarea[disabled]:-moz-placeholder, html.theme--documenter-dark .input[disabled]:-moz-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder, html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder, html.theme--documenter-dark .input[disabled]:-ms-input-placeholder, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder, fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.3); } + html.theme--documenter-dark .textarea, html.theme--documenter-dark .input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + html.theme--documenter-dark .textarea[readonly], html.theme--documenter-dark .input[readonly], html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + html.theme--documenter-dark .is-white.textarea, html.theme--documenter-dark .is-white.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + html.theme--documenter-dark .is-white.textarea:focus, html.theme--documenter-dark .is-white.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:focus, html.theme--documenter-dark .is-white.is-focused.textarea, html.theme--documenter-dark .is-white.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-white.textarea:active, html.theme--documenter-dark .is-white.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-white:active, html.theme--documenter-dark .is-white.is-active.textarea, html.theme--documenter-dark .is-white.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + html.theme--documenter-dark .is-black.textarea, html.theme--documenter-dark .is-black.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + html.theme--documenter-dark .is-black.textarea:focus, html.theme--documenter-dark .is-black.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:focus, html.theme--documenter-dark .is-black.is-focused.textarea, html.theme--documenter-dark .is-black.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-black.textarea:active, html.theme--documenter-dark .is-black.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-black:active, html.theme--documenter-dark .is-black.is-active.textarea, html.theme--documenter-dark .is-black.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + html.theme--documenter-dark .is-light.textarea, html.theme--documenter-dark .is-light.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: #ecf0f1; } + html.theme--documenter-dark .is-light.textarea:focus, html.theme--documenter-dark .is-light.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:focus, html.theme--documenter-dark .is-light.is-focused.textarea, html.theme--documenter-dark .is-light.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-light.textarea:active, html.theme--documenter-dark .is-light.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-light:active, html.theme--documenter-dark .is-light.is-active.textarea, html.theme--documenter-dark .is-light.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(236, 240, 241, 0.25); } + html.theme--documenter-dark .is-dark.textarea, html.theme--documenter-dark .content kbd.textarea, html.theme--documenter-dark .is-dark.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark, html.theme--documenter-dark .content kbd.input { + border-color: #282f2f; } + html.theme--documenter-dark .is-dark.textarea:focus, html.theme--documenter-dark .content kbd.textarea:focus, html.theme--documenter-dark .is-dark.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:focus, html.theme--documenter-dark .content kbd.input:focus, html.theme--documenter-dark .is-dark.is-focused.textarea, html.theme--documenter-dark .content kbd.is-focused.textarea, html.theme--documenter-dark .is-dark.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .content kbd.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-focused, html.theme--documenter-dark .is-dark.textarea:active, html.theme--documenter-dark .content kbd.textarea:active, html.theme--documenter-dark .is-dark.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-dark:active, html.theme--documenter-dark .content kbd.input:active, html.theme--documenter-dark .is-dark.is-active.textarea, html.theme--documenter-dark .content kbd.is-active.textarea, html.theme--documenter-dark .is-dark.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .content kbd.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(40, 47, 47, 0.25); } + html.theme--documenter-dark .is-primary.textarea, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink { + border-color: #375a7f; } + html.theme--documenter-dark .is-primary.textarea:focus, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:focus, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:focus, html.theme--documenter-dark .is-primary.is-focused.textarea, html.theme--documenter-dark .docstring > section > a.is-focused.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .docstring > section > a.is-focused.input.docs-sourcelink, html.theme--documenter-dark .is-primary.textarea:active, html.theme--documenter-dark .docstring > section > a.textarea.docs-sourcelink:active, html.theme--documenter-dark .is-primary.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-primary:active, html.theme--documenter-dark .docstring > section > a.input.docs-sourcelink:active, html.theme--documenter-dark .is-primary.is-active.textarea, html.theme--documenter-dark .docstring > section > a.is-active.textarea.docs-sourcelink, html.theme--documenter-dark .is-primary.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active, html.theme--documenter-dark .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(55, 90, 127, 0.25); } + html.theme--documenter-dark .is-link.textarea, html.theme--documenter-dark .is-link.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #1abc9c; } + html.theme--documenter-dark .is-link.textarea:focus, html.theme--documenter-dark .is-link.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:focus, html.theme--documenter-dark .is-link.is-focused.textarea, html.theme--documenter-dark .is-link.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-link.textarea:active, html.theme--documenter-dark .is-link.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-link:active, html.theme--documenter-dark .is-link.is-active.textarea, html.theme--documenter-dark .is-link.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(26, 188, 156, 0.25); } + html.theme--documenter-dark .is-info.textarea, html.theme--documenter-dark .is-info.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #024c7d; } + html.theme--documenter-dark .is-info.textarea:focus, html.theme--documenter-dark .is-info.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:focus, html.theme--documenter-dark .is-info.is-focused.textarea, html.theme--documenter-dark .is-info.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-info.textarea:active, html.theme--documenter-dark .is-info.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-info:active, html.theme--documenter-dark .is-info.is-active.textarea, html.theme--documenter-dark .is-info.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(2, 76, 125, 0.25); } + html.theme--documenter-dark .is-success.textarea, html.theme--documenter-dark .is-success.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #008438; } + html.theme--documenter-dark .is-success.textarea:focus, html.theme--documenter-dark .is-success.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:focus, html.theme--documenter-dark .is-success.is-focused.textarea, html.theme--documenter-dark .is-success.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-success.textarea:active, html.theme--documenter-dark .is-success.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-success:active, html.theme--documenter-dark .is-success.is-active.textarea, html.theme--documenter-dark .is-success.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(0, 132, 56, 0.25); } + html.theme--documenter-dark .is-warning.textarea, html.theme--documenter-dark .is-warning.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ad8100; } + html.theme--documenter-dark .is-warning.textarea:focus, html.theme--documenter-dark .is-warning.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:focus, html.theme--documenter-dark .is-warning.is-focused.textarea, html.theme--documenter-dark .is-warning.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-warning.textarea:active, html.theme--documenter-dark .is-warning.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-warning:active, html.theme--documenter-dark .is-warning.is-active.textarea, html.theme--documenter-dark .is-warning.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(173, 129, 0, 0.25); } + html.theme--documenter-dark .is-danger.textarea, html.theme--documenter-dark .is-danger.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #9e1b0d; } + html.theme--documenter-dark .is-danger.textarea:focus, html.theme--documenter-dark .is-danger.input:focus, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:focus, html.theme--documenter-dark .is-danger.is-focused.textarea, html.theme--documenter-dark .is-danger.is-focused.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-focused, html.theme--documenter-dark .is-danger.textarea:active, html.theme--documenter-dark .is-danger.input:active, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-danger:active, html.theme--documenter-dark .is-danger.is-active.textarea, html.theme--documenter-dark .is-danger.is-active.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(158, 27, 13, 0.25); } + html.theme--documenter-dark .is-small.textarea, html.theme--documenter-dark .is-small.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 3px; + font-size: 0.85em; } + html.theme--documenter-dark .is-medium.textarea, html.theme--documenter-dark .is-medium.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + html.theme--documenter-dark .is-large.textarea, html.theme--documenter-dark .is-large.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + html.theme--documenter-dark .is-fullwidth.textarea, html.theme--documenter-dark .is-fullwidth.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + html.theme--documenter-dark .is-inline.textarea, html.theme--documenter-dark .is-inline.input, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + html.theme--documenter-dark .input.is-rounded, html.theme--documenter-dark #documenter .docs-sidebar form.docs-search > input { + border-radius: 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 .radio, html.theme--documenter-dark .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + html.theme--documenter-dark .radio input, html.theme--documenter-dark .checkbox input { + cursor: pointer; } + html.theme--documenter-dark .radio:hover, html.theme--documenter-dark .checkbox:hover { + color: #8c9b9d; } + html.theme--documenter-dark .radio[disabled], html.theme--documenter-dark .checkbox[disabled], fieldset[disabled] html.theme--documenter-dark .radio, fieldset[disabled] html.theme--documenter-dark .checkbox { + 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.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.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.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]), html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]), + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover, html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover, html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover, html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover, + html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover, + html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + html.theme--documenter-dark .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + html.theme--documenter-dark .field.has-addons.has-addons-centered { + justify-content: center; } + html.theme--documenter-dark .field.has-addons.has-addons-right { + justify-content: flex-end; } + html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped { + display: flex; + justify-content: flex-start; } + html.theme--documenter-dark .field.is-grouped > .control { + flex-shrink: 0; } + html.theme--documenter-dark .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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-right .input.is-small ~ .icon, html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + html.theme--documenter-dark .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + 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 1em; + 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: 1.25em 1.5em; } + 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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > html.theme--documenter-dark .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1, html.theme--documenter-dark .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2, html.theme--documenter-dark .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2, html.theme--documenter-dark .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4, html.theme--documenter-dark .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5, html.theme--documenter-dark .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5, html.theme--documenter-dark .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7, html.theme--documenter-dark .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8, html.theme--documenter-dark .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8, html.theme--documenter-dark .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10, html.theme--documenter-dark .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11, html.theme--documenter-dark .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11, html.theme--documenter-dark .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + html.theme--documenter-dark .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + html.theme--documenter-dark .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + html.theme--documenter-dark .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + html.theme--documenter-dark .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + html.theme--documenter-dark .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + 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.3333333333%; } + html.theme--documenter-dark .tile.is-2 { + flex: none; + width: 16.6666666667%; } + html.theme--documenter-dark .tile.is-3 { + flex: none; + width: 25%; } + html.theme--documenter-dark .tile.is-4 { + flex: none; + width: 33.3333333333%; } + html.theme--documenter-dark .tile.is-5 { + flex: none; + width: 41.6666666667%; } + html.theme--documenter-dark .tile.is-6 { + flex: none; + width: 50%; } + html.theme--documenter-dark .tile.is-7 { + flex: none; + width: 58.3333333333%; } + html.theme--documenter-dark .tile.is-8 { + flex: none; + width: 66.6666666667%; } + html.theme--documenter-dark .tile.is-9 { + flex: none; + width: 75%; } + html.theme--documenter-dark .tile.is-10 { + flex: none; + width: 83.3333333333%; } + html.theme--documenter-dark .tile.is-11 { + flex: none; + width: 91.6666666667%; } + 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, #e8e3e4 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, #e8e3e4 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 .hero.is-dark .tabs.is-toggle li.is-active a, html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: #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 .hero.is-primary .tabs.is-toggle li.is-active a, html.theme--documenter-dark .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #375a7f; } + html.theme--documenter-dark .hero.is-primary.is-bold, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } + @media screen and (max-width: 768px) { + html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu, html.theme--documenter-dark .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%); } } + html.theme--documenter-dark .hero.is-link { + background-color: #1abc9c; + color: #fff; } + html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + html.theme--documenter-dark .hero.is-link strong { + color: inherit; } + html.theme--documenter-dark .hero.is-link .title { + color: #fff; } + html.theme--documenter-dark .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + html.theme--documenter-dark .hero.is-link .subtitle a:not(.button), + html.theme--documenter-dark .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark .hero.is-link .navbar-menu { + background-color: #1abc9c; } } + html.theme--documenter-dark .hero.is-link .navbar-item, + html.theme--documenter-dark .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + html.theme--documenter-dark .hero.is-link a.navbar-item:hover, html.theme--documenter-dark .hero.is-link a.navbar-item.is-active, + html.theme--documenter-dark .hero.is-link .navbar-link:hover, + html.theme--documenter-dark .hero.is-link .navbar-link.is-active { + background-color: #17a689; + color: #fff; } + html.theme--documenter-dark .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + html.theme--documenter-dark .hero.is-link .tabs a:hover { + opacity: 1; } + html.theme--documenter-dark .hero.is-link .tabs li.is-active a { + 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 .content kbd, html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + 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 pre { + position: relative; + overflow: hidden; } + html.theme--documenter-dark pre code, html.theme--documenter-dark pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + html.theme--documenter-dark pre code:first-of-type, html.theme--documenter-dark pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + html.theme--documenter-dark pre code:last-of-type, html.theme--documenter-dark pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + html.theme--documenter-dark pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #fff; + cursor: pointer; + text-align: center; } + html.theme--documenter-dark pre .copy-button:focus, html.theme--documenter-dark pre .copy-button:hover { + opacity: 1; + background: rgba(255, 255, 255, 0.1); + color: #1abc9c; } + html.theme--documenter-dark pre .copy-button.success { + color: #259a12; + opacity: 1; } + html.theme--documenter-dark pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + html.theme--documenter-dark pre:hover .copy-button { + opacity: 1; } + html.theme--documenter-dark .admonition { + background-color: #282f2f; + border-style: solid; + border-width: 1px; + border-color: #5e6d6f; + border-radius: 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.5rem 0.75rem; + position: relative; } + html.theme--documenter-dark .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + html.theme--documenter-dark .admonition-body { + color: #fff; + padding: 0.5rem 0.75rem; } + html.theme--documenter-dark .admonition-body pre { + background-color: #282f2f; } + html.theme--documenter-dark .admonition-body code { + background-color: rgba(255, 255, 255, 0.05); } + html.theme--documenter-dark .docstring { + margin-bottom: 1em; + background-color: 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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #5e6d6f; } + html.theme--documenter-dark .docstring > section:last-child { + border-bottom: none; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + html.theme--documenter-dark .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + html.theme--documenter-dark .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + html.theme--documenter-dark .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + html.theme--documenter-dark .documenter-example-output { + background-color: #1f2424; } + html.theme--documenter-dark .outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #282f2f; + border-bottom: 3px solid #9e1b0d; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + html.theme--documenter-dark .outdated-warning-overlay a { + color: #1abc9c; } + html.theme--documenter-dark .outdated-warning-overlay a:hover { + color: #1dd2af; } + html.theme--documenter-dark .content pre { + border: 1px solid #5e6d6f; } + html.theme--documenter-dark .content code { + font-weight: inherit; } + html.theme--documenter-dark .content a code { + color: #1abc9c; } + html.theme--documenter-dark .content h1 code, html.theme--documenter-dark .content h2 code, html.theme--documenter-dark .content h3 code, html.theme--documenter-dark .content h4 code, html.theme--documenter-dark .content h5 code, html.theme--documenter-dark .content h6 code { + color: #f2f2f2; } + html.theme--documenter-dark .content table { + display: block; + width: initial; + max-width: 100%; + overflow-x: auto; } + html.theme--documenter-dark .content blockquote > ul:first-child, html.theme--documenter-dark .content blockquote > ol:first-child, html.theme--documenter-dark .content .admonition-body > ul:first-child, html.theme--documenter-dark .content .admonition-body > ol:first-child { + margin-top: 0; } + html.theme--documenter-dark pre, html.theme--documenter-dark code { + font-variant-ligatures: no-contextual; } + html.theme--documenter-dark .breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + html.theme--documenter-dark .breadcrumb a.is-disabled, html.theme--documenter-dark .breadcrumb a.is-disabled:hover { + color: #f2f2f2; } + html.theme--documenter-dark .hljs { + background: initial !important; } + html.theme--documenter-dark .katex .katex-mathml { + top: 0; + right: 0; } + html.theme--documenter-dark .katex-display, html.theme--documenter-dark mjx-container, html.theme--documenter-dark .MathJax_Display { + margin: 0.5em 0 !important; } + html.theme--documenter-dark html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + html.theme--documenter-dark li.no-marker { + list-style: none; } + html.theme--documenter-dark #documenter .docs-main > article { + overflow-wrap: break-word; } + html.theme--documenter-dark #documenter .docs-main > article .math-container { + overflow-x: auto; + overflow-y: hidden; } + @media screen and (min-width: 1056px) { + html.theme--documenter-dark #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + @media screen and (max-width: 1055px) { + html.theme--documenter-dark #documenter .docs-main { + width: 100%; } + html.theme--documenter-dark #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + html.theme--documenter-dark #documenter .docs-main > header, html.theme--documenter-dark #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar { + background-color: #1f2424; + border-bottom: 1px solid #5e6d6f; + z-index: 2; + min-height: 4rem; + margin-bottom: 1rem; + display: flex; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb { + flex-grow: 1; } + html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-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-package-name a, html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover { + color: #fff; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #5e6d6f; + display: none; + padding: 0.5rem; } + html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #5e6d6f; + padding-bottom: 1.5rem; + /* 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 .ansi span.sgr1 { + font-weight: bolder; } + html.theme--documenter-dark .ansi span.sgr2 { + font-weight: lighter; } + html.theme--documenter-dark .ansi span.sgr3 { + font-style: italic; } + html.theme--documenter-dark .ansi span.sgr4 { + text-decoration: underline; } + html.theme--documenter-dark .ansi span.sgr7 { + color: #1f2424; + background-color: #fff; } + html.theme--documenter-dark .ansi span.sgr8 { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr8 span { + color: transparent; } + html.theme--documenter-dark .ansi span.sgr9 { + text-decoration: line-through; } + html.theme--documenter-dark .ansi span.sgr30 { + color: #242424; } + html.theme--documenter-dark .ansi span.sgr31 { + color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr32 { + color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr33 { + color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr34 { + color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr35 { + color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr36 { + color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr37 { + color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr40 { + background-color: #242424; } + html.theme--documenter-dark .ansi span.sgr41 { + background-color: #f6705f; } + html.theme--documenter-dark .ansi span.sgr42 { + background-color: #4fb43a; } + html.theme--documenter-dark .ansi span.sgr43 { + background-color: #f4c72f; } + html.theme--documenter-dark .ansi span.sgr44 { + background-color: #7587f0; } + html.theme--documenter-dark .ansi span.sgr45 { + background-color: #bc89d3; } + html.theme--documenter-dark .ansi span.sgr46 { + background-color: #49b6ca; } + html.theme--documenter-dark .ansi span.sgr47 { + background-color: #b3bdbe; } + html.theme--documenter-dark .ansi span.sgr90 { + color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr91 { + color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr92 { + color: #79d462; } + html.theme--documenter-dark .ansi span.sgr93 { + color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr94 { + color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr95 { + color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr96 { + color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr97 { + color: #ecf0f1; } + html.theme--documenter-dark .ansi span.sgr100 { + background-color: #92a0a2; } + html.theme--documenter-dark .ansi span.sgr101 { + background-color: #ff8674; } + html.theme--documenter-dark .ansi span.sgr102 { + background-color: #79d462; } + html.theme--documenter-dark .ansi span.sgr103 { + background-color: #ffe76b; } + html.theme--documenter-dark .ansi span.sgr104 { + background-color: #8a98ff; } + html.theme--documenter-dark .ansi span.sgr105 { + background-color: #d2a4e6; } + html.theme--documenter-dark .ansi span.sgr106 { + background-color: #6bc8db; } + html.theme--documenter-dark .ansi span.sgr107 { + background-color: #ecf0f1; } + html.theme--documenter-dark code.language-julia-repl > span.hljs-meta { + color: #4fb43a; + font-weight: bolder; } + html.theme--documenter-dark .hljs { + background: #2b2b2b; + color: #f8f8f2; } + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-quote { + color: #d4d0ab; } + html.theme--documenter-dark .hljs-variable, + html.theme--documenter-dark .hljs-template-variable, + html.theme--documenter-dark .hljs-tag, + html.theme--documenter-dark .hljs-name, + html.theme--documenter-dark .hljs-selector-id, + html.theme--documenter-dark .hljs-selector-class, + html.theme--documenter-dark .hljs-regexp, + html.theme--documenter-dark .hljs-deletion { + color: #ffa07a; } + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-link { + color: #f5ab35; } + html.theme--documenter-dark .hljs-attribute { + color: #ffd700; } + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-addition { + color: #abe338; } + html.theme--documenter-dark .hljs-title, + html.theme--documenter-dark .hljs-section { + color: #00e0e0; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + color: #dcc6e0; } + html.theme--documenter-dark .hljs-emphasis { + font-style: italic; } + html.theme--documenter-dark .hljs-strong { + font-weight: bold; } + @media screen and (-ms-high-contrast: active) { + html.theme--documenter-dark .hljs-addition, + html.theme--documenter-dark .hljs-attribute, + html.theme--documenter-dark .hljs-built_in, + html.theme--documenter-dark .hljs-bullet, + html.theme--documenter-dark .hljs-comment, + html.theme--documenter-dark .hljs-link, + html.theme--documenter-dark .hljs-literal, + html.theme--documenter-dark .hljs-meta, + html.theme--documenter-dark .hljs-number, + html.theme--documenter-dark .hljs-params, + html.theme--documenter-dark .hljs-string, + html.theme--documenter-dark .hljs-symbol, + html.theme--documenter-dark .hljs-type, + html.theme--documenter-dark .hljs-quote { + color: highlight; } + html.theme--documenter-dark .hljs-keyword, + html.theme--documenter-dark .hljs-selector-tag { + font-weight: bold; } } + html.theme--documenter-dark .hljs-subst { + color: #f8f8f2; } diff --git a/v0.1.2/assets/themes/documenter-light.css b/v0.1.2/assets/themes/documenter-light.css new file mode 100644 index 0000000..9595d5b --- /dev/null +++ b/v0.1.2/assets/themes/documenter-light.css @@ -0,0 +1,7738 @@ +@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); } } + +.tabs, .pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .breadcrumb, .file, .button, .is-unselectable, .modal-close, .delete { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.navbar-link:not(.is-arrowless)::after, .select:not(.is-multiple):not(.is-loading)::after { + border: 3px solid 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; } + +.admonition:not(:last-child), .tabs:not(:last-child), .message:not(:last-child), .list:not(:last-child), .level:not(:last-child), .breadcrumb:not(:last-child), .highlight:not(:last-child), .block:not(:last-child), .title:not(:last-child), +.subtitle:not(:last-child), .table-container:not(:last-child), .table:not(:last-child), .progress:not(:last-child), .notification:not(:last-child), .content:not(:last-child), .box:not(:last-child) { + margin-bottom: 1.5rem; } + +.modal-close, .delete { + -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; } + .modal-close::before, .delete::before, .modal-close::after, .delete::after { + background-color: white; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .modal-close::before, .delete::before { + height: 2px; + width: 50%; } + .modal-close::after, .delete::after { + height: 50%; + width: 2px; } + .modal-close:hover, .delete:hover, .modal-close:focus, .delete:focus { + background-color: rgba(10, 10, 10, 0.3); } + .modal-close:active, .delete:active { + background-color: rgba(10, 10, 10, 0.4); } + .is-small.modal-close, #documenter .docs-sidebar form.docs-search > input.modal-close, .is-small.delete, #documenter .docs-sidebar form.docs-search > input.delete { + height: 16px; + max-height: 16px; + max-width: 16px; + min-height: 16px; + min-width: 16px; + width: 16px; } + .is-medium.modal-close, .is-medium.delete { + height: 24px; + max-height: 24px; + max-width: 24px; + min-height: 24px; + min-width: 24px; + width: 24px; } + .is-large.modal-close, .is-large.delete { + height: 32px; + max-height: 32px; + max-width: 32px; + min-height: 32px; + min-width: 32px; + width: 32px; } + +.control.is-loading::after, .select.is-loading::after, .loader, .button.is-loading::after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 290486px; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + position: relative; + width: 1em; } + +.hero-video, .modal-background, .modal, .image.is-square img, #documenter .docs-sidebar .docs-logo > img.is-square img, +.image.is-square .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-square .has-ratio, .image.is-1by1 img, #documenter .docs-sidebar .docs-logo > img.is-1by1 img, +.image.is-1by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by1 .has-ratio, .image.is-5by4 img, #documenter .docs-sidebar .docs-logo > img.is-5by4 img, +.image.is-5by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by4 .has-ratio, .image.is-4by3 img, #documenter .docs-sidebar .docs-logo > img.is-4by3 img, +.image.is-4by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by3 .has-ratio, .image.is-3by2 img, #documenter .docs-sidebar .docs-logo > img.is-3by2 img, +.image.is-3by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by2 .has-ratio, .image.is-5by3 img, #documenter .docs-sidebar .docs-logo > img.is-5by3 img, +.image.is-5by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-5by3 .has-ratio, .image.is-16by9 img, #documenter .docs-sidebar .docs-logo > img.is-16by9 img, +.image.is-16by9 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-16by9 .has-ratio, .image.is-2by1 img, #documenter .docs-sidebar .docs-logo > img.is-2by1 img, +.image.is-2by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by1 .has-ratio, .image.is-3by1 img, #documenter .docs-sidebar .docs-logo > img.is-3by1 img, +.image.is-3by1 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by1 .has-ratio, .image.is-4by5 img, #documenter .docs-sidebar .docs-logo > img.is-4by5 img, +.image.is-4by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-4by5 .has-ratio, .image.is-3by4 img, #documenter .docs-sidebar .docs-logo > img.is-3by4 img, +.image.is-3by4 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by4 .has-ratio, .image.is-2by3 img, #documenter .docs-sidebar .docs-logo > img.is-2by3 img, +.image.is-2by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-2by3 .has-ratio, .image.is-3by5 img, #documenter .docs-sidebar .docs-logo > img.is-3by5 img, +.image.is-3by5 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-3by5 .has-ratio, .image.is-9by16 img, #documenter .docs-sidebar .docs-logo > img.is-9by16 img, +.image.is-9by16 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-9by16 .has-ratio, .image.is-1by2 img, #documenter .docs-sidebar .docs-logo > img.is-1by2 img, +.image.is-1by2 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by2 .has-ratio, .image.is-1by3 img, #documenter .docs-sidebar .docs-logo > img.is-1by3 img, +.image.is-1by3 .has-ratio, +#documenter .docs-sidebar .docs-logo > img.is-1by3 .has-ratio, .is-overlay { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; } + +.pagination-previous, +.pagination-next, +.pagination-link, +.pagination-ellipsis, .file-cta, +.file-name, .select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input, .button { + -moz-appearance: none; + -webkit-appearance: none; + align-items: center; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: none; + display: inline-flex; + font-size: 1rem; + height: 2.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; } + .pagination-previous:focus, + .pagination-next:focus, + .pagination-link:focus, + .pagination-ellipsis:focus, .file-cta:focus, + .file-name:focus, .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .button:focus, .is-focused.pagination-previous, + .is-focused.pagination-next, + .is-focused.pagination-link, + .is-focused.pagination-ellipsis, .is-focused.file-cta, + .is-focused.file-name, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-focused.button, .pagination-previous:active, + .pagination-next:active, + .pagination-link:active, + .pagination-ellipsis:active, .file-cta:active, + .file-name:active, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .button:active, .is-active.pagination-previous, + .is-active.pagination-next, + .is-active.pagination-link, + .is-active.pagination-ellipsis, .is-active.file-cta, + .is-active.file-name, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .is-active.button { + outline: none; } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled], + .pagination-ellipsis[disabled], .file-cta[disabled], + .file-name[disabled], .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], .button[disabled], fieldset[disabled] .pagination-previous, + fieldset[disabled] .pagination-next, + fieldset[disabled] .pagination-link, + fieldset[disabled] .pagination-ellipsis, fieldset[disabled] .file-cta, + fieldset[disabled] .file-name, fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input, fieldset[disabled] .button { + cursor: not-allowed; } + +/*! 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif; } + +code, +pre { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace; } + +body { + color: #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: #1081cb !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: #6b6b6b !important; } + +.has-background-grey { + background-color: #6b6b6b !important; } + +.has-text-grey-light { + color: #b5b5b5 !important; } + +.has-background-grey-light { + background-color: #b5b5b5 !important; } + +.has-text-grey-lighter { + color: #dbdbdb !important; } + +.has-background-grey-lighter { + background-color: #dbdbdb !important; } + +.has-text-white-ter { + color: 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 Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-secondary { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-sans-serif { + font-family: "Lato Medium", -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important; } + +.is-family-monospace { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-family-code { + font-family: "JuliaMono", "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", "DejaVu Sans Mono", monospace !important; } + +.is-block { + display: block !important; } + +@media screen and (max-width: 768px) { + .is-block-mobile { + display: block !important; } } + +@media screen and (min-width: 769px), print { + .is-block-tablet { + display: block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-block-tablet-only { + display: block !important; } } + +@media screen and (max-width: 1055px) { + .is-block-touch { + display: block !important; } } + +@media screen and (min-width: 1056px) { + .is-block-desktop { + display: block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-block-desktop-only { + display: block !important; } } + +@media screen and (min-width: 1216px) { + .is-block-widescreen { + display: block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-block-widescreen-only { + display: block !important; } } + +@media screen and (min-width: 1408px) { + .is-block-fullhd { + display: block !important; } } + +.is-flex { + display: flex !important; } + +@media screen and (max-width: 768px) { + .is-flex-mobile { + display: flex !important; } } + +@media screen and (min-width: 769px), print { + .is-flex-tablet { + display: flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-flex-tablet-only { + display: flex !important; } } + +@media screen and (max-width: 1055px) { + .is-flex-touch { + display: flex !important; } } + +@media screen and (min-width: 1056px) { + .is-flex-desktop { + display: flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-flex-desktop-only { + display: flex !important; } } + +@media screen and (min-width: 1216px) { + .is-flex-widescreen { + display: flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-flex-widescreen-only { + display: flex !important; } } + +@media screen and (min-width: 1408px) { + .is-flex-fullhd { + display: flex !important; } } + +.is-inline { + display: inline !important; } + +@media screen and (max-width: 768px) { + .is-inline-mobile { + display: inline !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-tablet { + display: inline !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-tablet-only { + display: inline !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-touch { + display: inline !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-desktop { + display: inline !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-desktop-only { + display: inline !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-widescreen { + display: inline !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-widescreen-only { + display: inline !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-fullhd { + display: inline !important; } } + +.is-inline-block { + display: inline-block !important; } + +@media screen and (max-width: 768px) { + .is-inline-block-mobile { + display: inline-block !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-block-tablet { + display: inline-block !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-block-tablet-only { + display: inline-block !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-block-touch { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-block-desktop { + display: inline-block !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-block-desktop-only { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-block-widescreen { + display: inline-block !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-block-widescreen-only { + display: inline-block !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-block-fullhd { + display: inline-block !important; } } + +.is-inline-flex { + display: inline-flex !important; } + +@media screen and (max-width: 768px) { + .is-inline-flex-mobile { + display: inline-flex !important; } } + +@media screen and (min-width: 769px), print { + .is-inline-flex-tablet { + display: inline-flex !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-inline-flex-tablet-only { + display: inline-flex !important; } } + +@media screen and (max-width: 1055px) { + .is-inline-flex-touch { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) { + .is-inline-flex-desktop { + display: inline-flex !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-inline-flex-desktop-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) { + .is-inline-flex-widescreen { + display: inline-flex !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-inline-flex-widescreen-only { + display: inline-flex !important; } } + +@media screen and (min-width: 1408px) { + .is-inline-flex-fullhd { + display: inline-flex !important; } } + +.is-hidden { + display: none !important; } + +.is-sr-only { + border: none !important; + clip: rect(0, 0, 0, 0) !important; + height: 0.01em !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + white-space: nowrap !important; + width: 0.01em !important; } + +@media screen and (max-width: 768px) { + .is-hidden-mobile { + display: none !important; } } + +@media screen and (min-width: 769px), print { + .is-hidden-tablet { + display: none !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-hidden-tablet-only { + display: none !important; } } + +@media screen and (max-width: 1055px) { + .is-hidden-touch { + display: none !important; } } + +@media screen and (min-width: 1056px) { + .is-hidden-desktop { + display: none !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-hidden-desktop-only { + display: none !important; } } + +@media screen and (min-width: 1216px) { + .is-hidden-widescreen { + display: none !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-hidden-widescreen-only { + display: none !important; } } + +@media screen and (min-width: 1408px) { + .is-hidden-fullhd { + display: none !important; } } + +.is-invisible { + visibility: hidden !important; } + +@media screen and (max-width: 768px) { + .is-invisible-mobile { + visibility: hidden !important; } } + +@media screen and (min-width: 769px), print { + .is-invisible-tablet { + visibility: hidden !important; } } + +@media screen and (min-width: 769px) and (max-width: 1055px) { + .is-invisible-tablet-only { + visibility: hidden !important; } } + +@media screen and (max-width: 1055px) { + .is-invisible-touch { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) { + .is-invisible-desktop { + visibility: hidden !important; } } + +@media screen and (min-width: 1056px) and (max-width: 1215px) { + .is-invisible-desktop-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) { + .is-invisible-widescreen { + visibility: hidden !important; } } + +@media screen and (min-width: 1216px) and (max-width: 1407px) { + .is-invisible-widescreen-only { + visibility: hidden !important; } } + +@media screen and (min-width: 1408px) { + .is-invisible-fullhd { + visibility: hidden !important; } } + +.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: #3c5dcd; + color: #363636; } + .button:focus:not(:active), .button.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .button:active, .button.is-active { + border-color: #4a4a4a; + color: #363636; } + .button.is-text { + background-color: transparent; + border-color: transparent; + color: #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: #1497ed; + border-color: transparent; + color: #fff; } + .button.is-info:focus, .button.is-info.is-focused { + border-color: transparent; + color: #fff; } + .button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .button.is-info:active, .button.is-info.is-active { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .button.is-info[disabled], fieldset[disabled] .button.is-info { + background-color: #209cee; + border-color: 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: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus, .button.is-warning.is-focused { + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .button.is-warning:active, .button.is-warning.is-active { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .button.is-warning[disabled], fieldset[disabled] .button.is-warning { + background-color: #ffdd57; + border-color: 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: #6b6b6b; + 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.is-lower-alpha:not([type]) { + list-style-type: lower-alpha; } + .content ol.is-lower-roman:not([type]) { + list-style-type: lower-roman; } + .content ol.is-upper-alpha:not([type]) { + list-style-type: upper-alpha; } + .content ol.is-upper-roman:not([type]) { + list-style-type: upper-roman; } + +.content ul { + list-style: disc outside; + margin-left: 2em; + margin-top: 1em; } + .content ul ul { + list-style-type: circle; + margin-top: 0.5em; } + .content ul ul ul { + list-style-type: square; } + +.content dd { + margin-left: 2em; } + +.content figure { + margin-left: 2em; + margin-right: 2em; + text-align: center; } + .content figure:not(:first-child) { + margin-top: 2em; } + .content figure:not(:last-child) { + margin-bottom: 2em; } + .content figure img { + display: inline-block; } + .content figure figcaption { + font-style: italic; } + +.content pre { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding: 0; + white-space: pre; + word-wrap: normal; } + +.content sup, +.content sub { + font-size: 75%; } + +.content table { + width: 100%; } + .content table td, + .content table th { + border: 1px solid #dbdbdb; + border-width: 0 0 1px; + padding: 0.5em 0.75em; + vertical-align: top; } + .content table th { + color: #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 .content kbd, .content .tags kbd, .tags .docstring > section > a.docs-sourcelink { + margin-bottom: 0.5rem; } + .tags .tag:not(:last-child), .tags .content kbd:not(:last-child), .content .tags kbd:not(:last-child), .tags .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 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 .content kbd:not(.is-normal):not(.is-large), .content .tags.are-medium kbd:not(.is-normal):not(.is-large), .tags.are-medium .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-large) { + font-size: 1rem; } + .tags.are-large .tag:not(.is-normal):not(.is-medium), .tags.are-large .content kbd:not(.is-normal):not(.is-medium), .content .tags.are-large kbd:not(.is-normal):not(.is-medium), .tags.are-large .docstring > section > a.docs-sourcelink:not(.is-normal):not(.is-medium) { + font-size: 1.25rem; } + .tags.is-centered { + justify-content: center; } + .tags.is-centered .tag, .tags.is-centered .content kbd, .content .tags.is-centered kbd, .tags.is-centered .docstring > section > a.docs-sourcelink { + margin-right: 0.25rem; + margin-left: 0.25rem; } + .tags.is-right { + justify-content: flex-end; } + .tags.is-right .tag:not(:first-child), .tags.is-right .content kbd:not(:first-child), .content .tags.is-right kbd:not(:first-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0.5rem; } + .tags.is-right .tag:not(:last-child), .tags.is-right .content kbd:not(:last-child), .content .tags.is-right kbd:not(:last-child), .tags.is-right .docstring > section > a.docs-sourcelink:not(:last-child) { + margin-right: 0; } + .tags.has-addons .tag, .tags.has-addons .content kbd, .content .tags.has-addons kbd, .tags.has-addons .docstring > section > a.docs-sourcelink { + margin-right: 0; } + .tags.has-addons .tag:not(:first-child), .tags.has-addons .content kbd:not(:first-child), .content .tags.has-addons kbd:not(:first-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:first-child) { + margin-left: 0; + border-bottom-left-radius: 0; + border-top-left-radius: 0; } + .tags.has-addons .tag:not(:last-child), .tags.has-addons .content kbd:not(:last-child), .content .tags.has-addons kbd:not(:last-child), .tags.has-addons .docstring > section > a.docs-sourcelink:not(:last-child) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; } + +.tag:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink: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, .content kbd:not(body) .delete, .docstring > section > a.docs-sourcelink:not(body) .delete { + margin-left: 0.25rem; + margin-right: -0.375rem; } + .tag.is-white:not(body), .content kbd.is-white:not(body), .docstring > section > a.docs-sourcelink.is-white:not(body) { + background-color: white; + color: #0a0a0a; } + .tag.is-black:not(body), .content kbd.is-black:not(body), .docstring > section > a.docs-sourcelink.is-black:not(body) { + background-color: #0a0a0a; + color: white; } + .tag.is-light:not(body), .content kbd.is-light:not(body), .docstring > section > a.docs-sourcelink.is-light:not(body) { + background-color: whitesmoke; + color: #363636; } + .tag.is-dark:not(body), .content kbd:not(body), .docstring > section > a.docs-sourcelink.is-dark:not(body), .content .docstring > section > kbd:not(body) { + background-color: #363636; + color: whitesmoke; } + .tag.is-primary:not(body), .content kbd.is-primary:not(body), .docstring > section > a.docs-sourcelink:not(body) { + background-color: #4eb5de; + color: #fff; } + .tag.is-link:not(body), .content kbd.is-link:not(body), .docstring > section > a.docs-sourcelink.is-link:not(body) { + background-color: #2e63b8; + color: #fff; } + .tag.is-info:not(body), .content kbd.is-info:not(body), .docstring > section > a.docs-sourcelink.is-info:not(body) { + background-color: #209cee; + color: #fff; } + .tag.is-success:not(body), .content kbd.is-success:not(body), .docstring > section > a.docs-sourcelink.is-success:not(body) { + background-color: #22c35b; + color: #fff; } + .tag.is-warning:not(body), .content kbd.is-warning:not(body), .docstring > section > a.docs-sourcelink.is-warning:not(body) { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .tag.is-danger:not(body), .content kbd.is-danger:not(body), .docstring > section > a.docs-sourcelink.is-danger:not(body) { + background-color: #da0b00; + color: #fff; } + .tag.is-normal:not(body), .content kbd.is-normal:not(body), .docstring > section > a.docs-sourcelink.is-normal:not(body) { + font-size: 0.75rem; } + .tag.is-medium:not(body), .content kbd.is-medium:not(body), .docstring > section > a.docs-sourcelink.is-medium:not(body) { + font-size: 1rem; } + .tag.is-large:not(body), .content kbd.is-large:not(body), .docstring > section > a.docs-sourcelink.is-large:not(body) { + font-size: 1.25rem; } + .tag:not(body) .icon:first-child:not(:last-child), .content kbd:not(body) .icon:first-child:not(:last-child), .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:not(:last-child) { + margin-left: -0.375em; + margin-right: 0.1875em; } + .tag:not(body) .icon:last-child:not(:first-child), .content kbd:not(body) .icon:last-child:not(:first-child), .docstring > section > a.docs-sourcelink:not(body) .icon:last-child:not(:first-child) { + margin-left: 0.1875em; + margin-right: -0.375em; } + .tag:not(body) .icon:first-child:last-child, .content kbd:not(body) .icon:first-child:last-child, .docstring > section > a.docs-sourcelink:not(body) .icon:first-child:last-child { + margin-left: -0.375em; + margin-right: -0.375em; } + .tag.is-delete:not(body), .content kbd.is-delete:not(body), .docstring > section > a.docs-sourcelink.is-delete:not(body) { + margin-left: 1px; + padding: 0; + position: relative; + width: 2em; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before, .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + background-color: currentColor; + content: ""; + display: block; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + transform-origin: center center; } + .tag.is-delete:not(body)::before, .content kbd.is-delete:not(body)::before, .docstring > section > a.docs-sourcelink.is-delete:not(body)::before { + height: 1px; + width: 50%; } + .tag.is-delete:not(body)::after, .content kbd.is-delete:not(body)::after, .docstring > section > a.docs-sourcelink.is-delete:not(body)::after { + height: 50%; + width: 1px; } + .tag.is-delete:not(body):hover, .content kbd.is-delete:not(body):hover, .docstring > section > a.docs-sourcelink.is-delete:not(body):hover, .tag.is-delete:not(body):focus, .content kbd.is-delete:not(body):focus, .docstring > section > a.docs-sourcelink.is-delete:not(body):focus { + background-color: #e8e8e8; } + .tag.is-delete:not(body):active, .content kbd.is-delete:not(body):active, .docstring > section > a.docs-sourcelink.is-delete:not(body):active { + background-color: #dbdbdb; } + .tag.is-rounded:not(body), #documenter .docs-sidebar form.docs-search > input:not(body), .content kbd.is-rounded:not(body), #documenter .docs-sidebar .content form.docs-search > input:not(body), .docstring > section > a.docs-sourcelink.is-rounded:not(body) { + border-radius: 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 .content kbd, .content .title kbd, .title .docstring > section > a.docs-sourcelink, + .subtitle .tag, + .subtitle .content kbd, + .content .subtitle kbd, + .subtitle .docstring > section > a.docs-sourcelink { + vertical-align: middle; } + +.title { + color: #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; } + +.select select, .textarea, .input, #documenter .docs-sidebar form.docs-search > input { + background-color: white; + border-color: #dbdbdb; + border-radius: 4px; + color: #363636; } + .select select::-moz-placeholder, .textarea::-moz-placeholder, .input::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input::-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .input::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-moz-placeholder, .textarea:-moz-placeholder, .input:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input:-moz-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:-ms-input-placeholder, .textarea:-ms-input-placeholder, .input:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder { + color: rgba(54, 54, 54, 0.3); } + .select select:hover, .textarea:hover, .input:hover, #documenter .docs-sidebar form.docs-search > input:hover, .select select.is-hovered, .is-hovered.textarea, .is-hovered.input, #documenter .docs-sidebar form.docs-search > input.is-hovered { + border-color: #b5b5b5; } + .select select:focus, .textarea:focus, .input:focus, #documenter .docs-sidebar form.docs-search > input:focus, .select select.is-focused, .is-focused.textarea, .is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .select select:active, .textarea:active, .input:active, #documenter .docs-sidebar form.docs-search > input:active, .select select.is-active, .is-active.textarea, .is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + border-color: #2e63b8; + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .select select[disabled], .textarea[disabled], .input[disabled], #documenter .docs-sidebar form.docs-search > input[disabled], fieldset[disabled] .select select, .select fieldset[disabled] select, fieldset[disabled] .textarea, fieldset[disabled] .input, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input { + background-color: whitesmoke; + border-color: whitesmoke; + box-shadow: none; + color: #6b6b6b; } + .select select[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .input[disabled]::-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-moz-placeholder, fieldset[disabled] .select select::-moz-placeholder, .select fieldset[disabled] select::-moz-placeholder, fieldset[disabled] .textarea::-moz-placeholder, fieldset[disabled] .input::-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .input[disabled]::-webkit-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]::-webkit-input-placeholder, fieldset[disabled] .select select::-webkit-input-placeholder, .select fieldset[disabled] select::-webkit-input-placeholder, fieldset[disabled] .textarea::-webkit-input-placeholder, fieldset[disabled] .input::-webkit-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input::-webkit-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input::-webkit-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .input[disabled]:-moz-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-moz-placeholder, fieldset[disabled] .select select:-moz-placeholder, .select fieldset[disabled] select:-moz-placeholder, fieldset[disabled] .textarea:-moz-placeholder, fieldset[disabled] .input:-moz-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-moz-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-moz-placeholder { + color: rgba(107, 107, 107, 0.3); } + .select select[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .input[disabled]:-ms-input-placeholder, #documenter .docs-sidebar form.docs-search > input[disabled]:-ms-input-placeholder, fieldset[disabled] .select select:-ms-input-placeholder, .select fieldset[disabled] select:-ms-input-placeholder, fieldset[disabled] .textarea:-ms-input-placeholder, fieldset[disabled] .input:-ms-input-placeholder, fieldset[disabled] #documenter .docs-sidebar form.docs-search > input:-ms-input-placeholder, #documenter .docs-sidebar fieldset[disabled] form.docs-search > input:-ms-input-placeholder { + color: rgba(107, 107, 107, 0.3); } + +.textarea, .input, #documenter .docs-sidebar form.docs-search > input { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1); + max-width: 100%; + width: 100%; } + .textarea[readonly], .input[readonly], #documenter .docs-sidebar form.docs-search > input[readonly] { + box-shadow: none; } + .is-white.textarea, .is-white.input, #documenter .docs-sidebar form.docs-search > input.is-white { + border-color: white; } + .is-white.textarea:focus, .is-white.input:focus, #documenter .docs-sidebar form.docs-search > input.is-white:focus, .is-white.is-focused.textarea, .is-white.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-white.textarea:active, .is-white.input:active, #documenter .docs-sidebar form.docs-search > input.is-white:active, .is-white.is-active.textarea, .is-white.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25); } + .is-black.textarea, .is-black.input, #documenter .docs-sidebar form.docs-search > input.is-black { + border-color: #0a0a0a; } + .is-black.textarea:focus, .is-black.input:focus, #documenter .docs-sidebar form.docs-search > input.is-black:focus, .is-black.is-focused.textarea, .is-black.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-black.textarea:active, .is-black.input:active, #documenter .docs-sidebar form.docs-search > input.is-black:active, .is-black.is-active.textarea, .is-black.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25); } + .is-light.textarea, .is-light.input, #documenter .docs-sidebar form.docs-search > input.is-light { + border-color: whitesmoke; } + .is-light.textarea:focus, .is-light.input:focus, #documenter .docs-sidebar form.docs-search > input.is-light:focus, .is-light.is-focused.textarea, .is-light.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-light.textarea:active, .is-light.input:active, #documenter .docs-sidebar form.docs-search > input.is-light:active, .is-light.is-active.textarea, .is-light.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25); } + .is-dark.textarea, .content kbd.textarea, .is-dark.input, #documenter .docs-sidebar form.docs-search > input.is-dark, .content kbd.input { + border-color: #363636; } + .is-dark.textarea:focus, .content kbd.textarea:focus, .is-dark.input:focus, #documenter .docs-sidebar form.docs-search > input.is-dark:focus, .content kbd.input:focus, .is-dark.is-focused.textarea, .content kbd.is-focused.textarea, .is-dark.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .content kbd.is-focused.input, #documenter .docs-sidebar .content form.docs-search > input.is-focused, .is-dark.textarea:active, .content kbd.textarea:active, .is-dark.input:active, #documenter .docs-sidebar form.docs-search > input.is-dark:active, .content kbd.input:active, .is-dark.is-active.textarea, .content kbd.is-active.textarea, .is-dark.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .content kbd.is-active.input, #documenter .docs-sidebar .content form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25); } + .is-primary.textarea, .docstring > section > a.textarea.docs-sourcelink, .is-primary.input, #documenter .docs-sidebar form.docs-search > input.is-primary, .docstring > section > a.input.docs-sourcelink { + border-color: #4eb5de; } + .is-primary.textarea:focus, .docstring > section > a.textarea.docs-sourcelink:focus, .is-primary.input:focus, #documenter .docs-sidebar form.docs-search > input.is-primary:focus, .docstring > section > a.input.docs-sourcelink:focus, .is-primary.is-focused.textarea, .docstring > section > a.is-focused.textarea.docs-sourcelink, .is-primary.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .docstring > section > a.is-focused.input.docs-sourcelink, .is-primary.textarea:active, .docstring > section > a.textarea.docs-sourcelink:active, .is-primary.input:active, #documenter .docs-sidebar form.docs-search > input.is-primary:active, .docstring > section > a.input.docs-sourcelink:active, .is-primary.is-active.textarea, .docstring > section > a.is-active.textarea.docs-sourcelink, .is-primary.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active, .docstring > section > a.is-active.input.docs-sourcelink { + box-shadow: 0 0 0 0.125em rgba(78, 181, 222, 0.25); } + .is-link.textarea, .is-link.input, #documenter .docs-sidebar form.docs-search > input.is-link { + border-color: #2e63b8; } + .is-link.textarea:focus, .is-link.input:focus, #documenter .docs-sidebar form.docs-search > input.is-link:focus, .is-link.is-focused.textarea, .is-link.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-link.textarea:active, .is-link.input:active, #documenter .docs-sidebar form.docs-search > input.is-link:active, .is-link.is-active.textarea, .is-link.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(46, 99, 184, 0.25); } + .is-info.textarea, .is-info.input, #documenter .docs-sidebar form.docs-search > input.is-info { + border-color: #209cee; } + .is-info.textarea:focus, .is-info.input:focus, #documenter .docs-sidebar form.docs-search > input.is-info:focus, .is-info.is-focused.textarea, .is-info.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-info.textarea:active, .is-info.input:active, #documenter .docs-sidebar form.docs-search > input.is-info:active, .is-info.is-active.textarea, .is-info.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .is-success.textarea, .is-success.input, #documenter .docs-sidebar form.docs-search > input.is-success { + border-color: #22c35b; } + .is-success.textarea:focus, .is-success.input:focus, #documenter .docs-sidebar form.docs-search > input.is-success:focus, .is-success.is-focused.textarea, .is-success.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-success.textarea:active, .is-success.input:active, #documenter .docs-sidebar form.docs-search > input.is-success:active, .is-success.is-active.textarea, .is-success.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .is-warning.textarea, .is-warning.input, #documenter .docs-sidebar form.docs-search > input.is-warning { + border-color: #ffdd57; } + .is-warning.textarea:focus, .is-warning.input:focus, #documenter .docs-sidebar form.docs-search > input.is-warning:focus, .is-warning.is-focused.textarea, .is-warning.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-warning.textarea:active, .is-warning.input:active, #documenter .docs-sidebar form.docs-search > input.is-warning:active, .is-warning.is-active.textarea, .is-warning.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .is-danger.textarea, .is-danger.input, #documenter .docs-sidebar form.docs-search > input.is-danger { + border-color: #da0b00; } + .is-danger.textarea:focus, .is-danger.input:focus, #documenter .docs-sidebar form.docs-search > input.is-danger:focus, .is-danger.is-focused.textarea, .is-danger.is-focused.input, #documenter .docs-sidebar form.docs-search > input.is-focused, .is-danger.textarea:active, .is-danger.input:active, #documenter .docs-sidebar form.docs-search > input.is-danger:active, .is-danger.is-active.textarea, .is-danger.is-active.input, #documenter .docs-sidebar form.docs-search > input.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .is-small.textarea, .is-small.input, #documenter .docs-sidebar form.docs-search > input { + border-radius: 2px; + font-size: 0.75rem; } + .is-medium.textarea, .is-medium.input, #documenter .docs-sidebar form.docs-search > input.is-medium { + font-size: 1.25rem; } + .is-large.textarea, .is-large.input, #documenter .docs-sidebar form.docs-search > input.is-large { + font-size: 1.5rem; } + .is-fullwidth.textarea, .is-fullwidth.input, #documenter .docs-sidebar form.docs-search > input.is-fullwidth { + display: block; + width: 100%; } + .is-inline.textarea, .is-inline.input, #documenter .docs-sidebar form.docs-search > input.is-inline { + display: inline; + width: auto; } + +.input.is-rounded, #documenter .docs-sidebar form.docs-search > input { + border-radius: 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; } + +.radio, .checkbox { + cursor: pointer; + display: inline-block; + line-height: 1.25; + position: relative; } + .radio input, .checkbox input { + cursor: pointer; } + .radio:hover, .checkbox:hover { + color: #363636; } + .radio[disabled], .checkbox[disabled], fieldset[disabled] .radio, fieldset[disabled] .checkbox { + color: #6b6b6b; + 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: #1190e3; } + .select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active { + box-shadow: 0 0 0 0.125em rgba(32, 156, 238, 0.25); } + .select.is-success:not(:hover)::after { + border-color: #22c35b; } + .select.is-success select { + border-color: #22c35b; } + .select.is-success select:hover, .select.is-success select.is-hovered { + border-color: #1ead51; } + .select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active { + box-shadow: 0 0 0 0.125em rgba(34, 195, 91, 0.25); } + .select.is-warning:not(:hover)::after { + border-color: #ffdd57; } + .select.is-warning select { + border-color: #ffdd57; } + .select.is-warning select:hover, .select.is-warning select.is-hovered { + border-color: #ffd83e; } + .select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active { + box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25); } + .select.is-danger:not(:hover)::after { + border-color: #da0b00; } + .select.is-danger select { + border-color: #da0b00; } + .select.is-danger select:hover, .select.is-danger select.is-hovered { + border-color: #c10a00; } + .select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active { + box-shadow: 0 0 0 0.125em rgba(218, 11, 0, 0.25); } + .select.is-small, #documenter .docs-sidebar form.docs-search > input.select { + border-radius: 2px; + font-size: 0.75rem; } + .select.is-medium { + font-size: 1.25rem; } + .select.is-large { + font-size: 1.5rem; } + .select.is-disabled::after { + border-color: #6b6b6b; } + .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.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: #1497ed; + border-color: transparent; + color: #fff; } + .file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(32, 156, 238, 0.25); + color: #fff; } + .file.is-info:active .file-cta, .file.is-info.is-active .file-cta { + background-color: #1190e3; + border-color: transparent; + color: #fff; } + .file.is-success .file-cta { + background-color: #22c35b; + border-color: transparent; + color: #fff; } + .file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta { + background-color: #20b856; + border-color: transparent; + color: #fff; } + .file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(34, 195, 91, 0.25); + color: #fff; } + .file.is-success:active .file-cta, .file.is-success.is-active .file-cta { + background-color: #1ead51; + border-color: transparent; + color: #fff; } + .file.is-warning .file-cta { + background-color: #ffdd57; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta { + background-color: #ffda4a; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25); + color: rgba(0, 0, 0, 0.7); } + .file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta { + background-color: #ffd83e; + border-color: transparent; + color: rgba(0, 0, 0, 0.7); } + .file.is-danger .file-cta { + background-color: #da0b00; + border-color: transparent; + color: #fff; } + .file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta { + background-color: #cd0a00; + border-color: transparent; + color: #fff; } + .file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta { + border-color: transparent; + box-shadow: 0 0 0.5em rgba(218, 11, 0, 0.25); + color: #fff; } + .file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta { + background-color: #c10a00; + border-color: transparent; + color: #fff; } + .file.is-small, #documenter .docs-sidebar form.docs-search > input.file { + font-size: 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.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.is-hovered:not([disabled]), + .field.has-addons .control .input:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):hover, + .field.has-addons .control .input.is-hovered:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-hovered:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-hovered:not([disabled]), + .field.has-addons .control .select select:not([disabled]):hover, + .field.has-addons .control .select select.is-hovered:not([disabled]) { + z-index: 2; } + .field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button.is-focused:not([disabled]), .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button.is-active:not([disabled]), + .field.has-addons .control .input:not([disabled]):focus, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus, + .field.has-addons .control .input.is-focused:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]), + .field.has-addons .control .input:not([disabled]):active, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active, + .field.has-addons .control .input.is-active:not([disabled]), + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]), + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]), + .field.has-addons .control .select select:not([disabled]):focus, + .field.has-addons .control .select select.is-focused:not([disabled]), + .field.has-addons .control .select select:not([disabled]):active, + .field.has-addons .control .select select.is-active:not([disabled]) { + z-index: 3; } + .field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button.is-focused:not([disabled]):hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button.is-active:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):focus:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):focus:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):focus:hover, + .field.has-addons .control .input.is-focused:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-focused:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-focused:not([disabled]):hover, + .field.has-addons .control .input:not([disabled]):active:hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input:not([disabled]):active:hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input:not([disabled]):active:hover, + .field.has-addons .control .input.is-active:not([disabled]):hover, + .field.has-addons .control #documenter .docs-sidebar form.docs-search > input.is-active:not([disabled]):hover, + #documenter .docs-sidebar .field.has-addons .control form.docs-search > input.is-active:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):focus:hover, + .field.has-addons .control .select select.is-focused:not([disabled]):hover, + .field.has-addons .control .select select:not([disabled]):active:hover, + .field.has-addons .control .select select.is-active:not([disabled]):hover { + z-index: 4; } + .field.has-addons .control.is-expanded { + flex-grow: 1; + flex-shrink: 1; } + .field.has-addons.has-addons-centered { + justify-content: center; } + .field.has-addons.has-addons-right { + justify-content: flex-end; } + .field.has-addons.has-addons-fullwidth .control { + flex-grow: 1; + flex-shrink: 0; } + +.field.is-grouped { + display: flex; + justify-content: flex-start; } + .field.is-grouped > .control { + flex-shrink: 0; } + .field.is-grouped > .control:not(:last-child) { + margin-bottom: 0; + margin-right: 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: #6b6b6b; } + .control.has-icons-left .input.is-small ~ .icon, .control.has-icons-left #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-left form.docs-search > input ~ .icon, + .control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon, .control.has-icons-right #documenter .docs-sidebar form.docs-search > input ~ .icon, #documenter .docs-sidebar .control.has-icons-right form.docs-search > input ~ .icon, + .control.has-icons-right .select.is-small ~ .icon { + font-size: 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.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: 1.5rem; } + +.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: #6b6b6b; + 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: #12537d; } + .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: #3c3108; } + .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 1em; + 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: 1.25em 1.5em; } + .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: #1190e3; + color: #fff; } + .navbar.is-info .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-info .navbar-start > .navbar-item, + .navbar.is-info .navbar-start .navbar-link, + .navbar.is-info .navbar-end > .navbar-item, + .navbar.is-info .navbar-end .navbar-link { + color: #fff; } + .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active, + .navbar.is-info .navbar-start .navbar-link:focus, + .navbar.is-info .navbar-start .navbar-link:hover, + .navbar.is-info .navbar-start .navbar-link.is-active, + .navbar.is-info .navbar-end > a.navbar-item:focus, + .navbar.is-info .navbar-end > a.navbar-item:hover, + .navbar.is-info .navbar-end > a.navbar-item.is-active, + .navbar.is-info .navbar-end .navbar-link:focus, + .navbar.is-info .navbar-end .navbar-link:hover, + .navbar.is-info .navbar-end .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-start .navbar-link::after, + .navbar.is-info .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1190e3; + color: #fff; } + .navbar.is-info .navbar-dropdown a.navbar-item.is-active { + background-color: #209cee; + color: #fff; } } + .navbar.is-success { + background-color: #22c35b; + color: #fff; } + .navbar.is-success .navbar-brand > .navbar-item, + .navbar.is-success .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active, + .navbar.is-success .navbar-brand .navbar-link:focus, + .navbar.is-success .navbar-brand .navbar-link:hover, + .navbar.is-success .navbar-brand .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-success .navbar-start > .navbar-item, + .navbar.is-success .navbar-start .navbar-link, + .navbar.is-success .navbar-end > .navbar-item, + .navbar.is-success .navbar-end .navbar-link { + color: #fff; } + .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active, + .navbar.is-success .navbar-start .navbar-link:focus, + .navbar.is-success .navbar-start .navbar-link:hover, + .navbar.is-success .navbar-start .navbar-link.is-active, + .navbar.is-success .navbar-end > a.navbar-item:focus, + .navbar.is-success .navbar-end > a.navbar-item:hover, + .navbar.is-success .navbar-end > a.navbar-item.is-active, + .navbar.is-success .navbar-end .navbar-link:focus, + .navbar.is-success .navbar-end .navbar-link:hover, + .navbar.is-success .navbar-end .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-start .navbar-link::after, + .navbar.is-success .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #1ead51; + color: #fff; } + .navbar.is-success .navbar-dropdown a.navbar-item.is-active { + background-color: #22c35b; + color: #fff; } } + .navbar.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > .navbar-item, + .navbar.is-warning .navbar-brand .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active, + .navbar.is-warning .navbar-brand .navbar-link:focus, + .navbar.is-warning .navbar-brand .navbar-link:hover, + .navbar.is-warning .navbar-brand .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-brand .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-burger { + color: rgba(0, 0, 0, 0.7); } + @media screen and (min-width: 1056px) { + .navbar.is-warning .navbar-start > .navbar-item, + .navbar.is-warning .navbar-start .navbar-link, + .navbar.is-warning .navbar-end > .navbar-item, + .navbar.is-warning .navbar-end .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active, + .navbar.is-warning .navbar-start .navbar-link:focus, + .navbar.is-warning .navbar-start .navbar-link:hover, + .navbar.is-warning .navbar-start .navbar-link.is-active, + .navbar.is-warning .navbar-end > a.navbar-item:focus, + .navbar.is-warning .navbar-end > a.navbar-item:hover, + .navbar.is-warning .navbar-end > a.navbar-item.is-active, + .navbar.is-warning .navbar-end .navbar-link:focus, + .navbar.is-warning .navbar-end .navbar-link:hover, + .navbar.is-warning .navbar-end .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-start .navbar-link::after, + .navbar.is-warning .navbar-end .navbar-link::after { + border-color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .navbar.is-warning .navbar-dropdown a.navbar-item.is-active { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } } + .navbar.is-danger { + background-color: #da0b00; + color: #fff; } + .navbar.is-danger .navbar-brand > .navbar-item, + .navbar.is-danger .navbar-brand .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active, + .navbar.is-danger .navbar-brand .navbar-link:focus, + .navbar.is-danger .navbar-brand .navbar-link:hover, + .navbar.is-danger .navbar-brand .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-brand .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-burger { + color: #fff; } + @media screen and (min-width: 1056px) { + .navbar.is-danger .navbar-start > .navbar-item, + .navbar.is-danger .navbar-start .navbar-link, + .navbar.is-danger .navbar-end > .navbar-item, + .navbar.is-danger .navbar-end .navbar-link { + color: #fff; } + .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active, + .navbar.is-danger .navbar-start .navbar-link:focus, + .navbar.is-danger .navbar-start .navbar-link:hover, + .navbar.is-danger .navbar-start .navbar-link.is-active, + .navbar.is-danger .navbar-end > a.navbar-item:focus, + .navbar.is-danger .navbar-end > a.navbar-item:hover, + .navbar.is-danger .navbar-end > a.navbar-item.is-active, + .navbar.is-danger .navbar-end .navbar-link:focus, + .navbar.is-danger .navbar-end .navbar-link:hover, + .navbar.is-danger .navbar-end .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-start .navbar-link::after, + .navbar.is-danger .navbar-end .navbar-link::after { + border-color: #fff; } + .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link, + .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link { + background-color: #c10a00; + color: #fff; } + .navbar.is-danger .navbar-dropdown a.navbar-item.is-active { + background-color: #da0b00; + color: #fff; } } + .navbar > .container { + align-items: stretch; + display: flex; + min-height: 3.25rem; + width: 100%; } + .navbar.has-shadow { + box-shadow: 0 2px 0 0 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: #3c5dcd; } + .pagination-previous:active, + .pagination-next:active, + .pagination-link:active { + box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2); } + .pagination-previous[disabled], + .pagination-next[disabled], + .pagination-link[disabled] { + background-color: #dbdbdb; + border-color: #dbdbdb; + box-shadow: none; + color: #6b6b6b; + 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: #6b6b6b; + 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.3333333333%; } + .columns.is-mobile > .column.is-offset-1 { + margin-left: 8.3333333333%; } + .columns.is-mobile > .column.is-2 { + flex: none; + width: 16.6666666667%; } + .columns.is-mobile > .column.is-offset-2 { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-4 { + margin-left: 33.3333333333%; } + .columns.is-mobile > .column.is-5 { + flex: none; + width: 41.6666666667%; } + .columns.is-mobile > .column.is-offset-5 { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-7 { + margin-left: 58.3333333333%; } + .columns.is-mobile > .column.is-8 { + flex: none; + width: 66.6666666667%; } + .columns.is-mobile > .column.is-offset-8 { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .columns.is-mobile > .column.is-offset-10 { + margin-left: 83.3333333333%; } + .columns.is-mobile > .column.is-11 { + flex: none; + width: 91.6666666667%; } + .columns.is-mobile > .column.is-offset-11 { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-mobile { + margin-left: 8.3333333333%; } + .column.is-2-mobile { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-mobile { + margin-left: 16.6666666667%; } + .column.is-3-mobile { + flex: none; + width: 25%; } + .column.is-offset-3-mobile { + margin-left: 25%; } + .column.is-4-mobile { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-mobile { + margin-left: 33.3333333333%; } + .column.is-5-mobile { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-mobile { + margin-left: 41.6666666667%; } + .column.is-6-mobile { + flex: none; + width: 50%; } + .column.is-offset-6-mobile { + margin-left: 50%; } + .column.is-7-mobile { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-mobile { + margin-left: 58.3333333333%; } + .column.is-8-mobile { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-mobile { + margin-left: 66.6666666667%; } + .column.is-9-mobile { + flex: none; + width: 75%; } + .column.is-offset-9-mobile { + margin-left: 75%; } + .column.is-10-mobile { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-mobile { + margin-left: 83.3333333333%; } + .column.is-11-mobile { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-mobile { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1, .column.is-offset-1-tablet { + margin-left: 8.3333333333%; } + .column.is-2, .column.is-2-tablet { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2, .column.is-offset-2-tablet { + margin-left: 16.6666666667%; } + .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.3333333333%; } + .column.is-offset-4, .column.is-offset-4-tablet { + margin-left: 33.3333333333%; } + .column.is-5, .column.is-5-tablet { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5, .column.is-offset-5-tablet { + margin-left: 41.6666666667%; } + .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.3333333333%; } + .column.is-offset-7, .column.is-offset-7-tablet { + margin-left: 58.3333333333%; } + .column.is-8, .column.is-8-tablet { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8, .column.is-offset-8-tablet { + margin-left: 66.6666666667%; } + .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.3333333333%; } + .column.is-offset-10, .column.is-offset-10-tablet { + margin-left: 83.3333333333%; } + .column.is-11, .column.is-11-tablet { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11, .column.is-offset-11-tablet { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-touch { + margin-left: 8.3333333333%; } + .column.is-2-touch { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-touch { + margin-left: 16.6666666667%; } + .column.is-3-touch { + flex: none; + width: 25%; } + .column.is-offset-3-touch { + margin-left: 25%; } + .column.is-4-touch { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-touch { + margin-left: 33.3333333333%; } + .column.is-5-touch { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-touch { + margin-left: 41.6666666667%; } + .column.is-6-touch { + flex: none; + width: 50%; } + .column.is-offset-6-touch { + margin-left: 50%; } + .column.is-7-touch { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-touch { + margin-left: 58.3333333333%; } + .column.is-8-touch { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-touch { + margin-left: 66.6666666667%; } + .column.is-9-touch { + flex: none; + width: 75%; } + .column.is-offset-9-touch { + margin-left: 75%; } + .column.is-10-touch { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-touch { + margin-left: 83.3333333333%; } + .column.is-11-touch { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-touch { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-desktop { + margin-left: 8.3333333333%; } + .column.is-2-desktop { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-desktop { + margin-left: 16.6666666667%; } + .column.is-3-desktop { + flex: none; + width: 25%; } + .column.is-offset-3-desktop { + margin-left: 25%; } + .column.is-4-desktop { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-desktop { + margin-left: 33.3333333333%; } + .column.is-5-desktop { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-desktop { + margin-left: 41.6666666667%; } + .column.is-6-desktop { + flex: none; + width: 50%; } + .column.is-offset-6-desktop { + margin-left: 50%; } + .column.is-7-desktop { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-desktop { + margin-left: 58.3333333333%; } + .column.is-8-desktop { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-desktop { + margin-left: 66.6666666667%; } + .column.is-9-desktop { + flex: none; + width: 75%; } + .column.is-offset-9-desktop { + margin-left: 75%; } + .column.is-10-desktop { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-desktop { + margin-left: 83.3333333333%; } + .column.is-11-desktop { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-desktop { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-widescreen { + margin-left: 8.3333333333%; } + .column.is-2-widescreen { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-widescreen { + margin-left: 16.6666666667%; } + .column.is-3-widescreen { + flex: none; + width: 25%; } + .column.is-offset-3-widescreen { + margin-left: 25%; } + .column.is-4-widescreen { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-widescreen { + margin-left: 33.3333333333%; } + .column.is-5-widescreen { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-widescreen { + margin-left: 41.6666666667%; } + .column.is-6-widescreen { + flex: none; + width: 50%; } + .column.is-offset-6-widescreen { + margin-left: 50%; } + .column.is-7-widescreen { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-widescreen { + margin-left: 58.3333333333%; } + .column.is-8-widescreen { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-widescreen { + margin-left: 66.6666666667%; } + .column.is-9-widescreen { + flex: none; + width: 75%; } + .column.is-offset-9-widescreen { + margin-left: 75%; } + .column.is-10-widescreen { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-widescreen { + margin-left: 83.3333333333%; } + .column.is-11-widescreen { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-widescreen { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .column.is-offset-1-fullhd { + margin-left: 8.3333333333%; } + .column.is-2-fullhd { + flex: none; + width: 16.6666666667%; } + .column.is-offset-2-fullhd { + margin-left: 16.6666666667%; } + .column.is-3-fullhd { + flex: none; + width: 25%; } + .column.is-offset-3-fullhd { + margin-left: 25%; } + .column.is-4-fullhd { + flex: none; + width: 33.3333333333%; } + .column.is-offset-4-fullhd { + margin-left: 33.3333333333%; } + .column.is-5-fullhd { + flex: none; + width: 41.6666666667%; } + .column.is-offset-5-fullhd { + margin-left: 41.6666666667%; } + .column.is-6-fullhd { + flex: none; + width: 50%; } + .column.is-offset-6-fullhd { + margin-left: 50%; } + .column.is-7-fullhd { + flex: none; + width: 58.3333333333%; } + .column.is-offset-7-fullhd { + margin-left: 58.3333333333%; } + .column.is-8-fullhd { + flex: none; + width: 66.6666666667%; } + .column.is-offset-8-fullhd { + margin-left: 66.6666666667%; } + .column.is-9-fullhd { + flex: none; + width: 75%; } + .column.is-offset-9-fullhd { + margin-left: 75%; } + .column.is-10-fullhd { + flex: none; + width: 83.3333333333%; } + .column.is-offset-10-fullhd { + margin-left: 83.3333333333%; } + .column.is-11-fullhd { + flex: none; + width: 91.6666666667%; } + .column.is-offset-11-fullhd { + margin-left: 91.6666666667%; } + .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.3333333333%; } + .tile.is-2 { + flex: none; + width: 16.6666666667%; } + .tile.is-3 { + flex: none; + width: 25%; } + .tile.is-4 { + flex: none; + width: 33.3333333333%; } + .tile.is-5 { + flex: none; + width: 41.6666666667%; } + .tile.is-6 { + flex: none; + width: 50%; } + .tile.is-7 { + flex: none; + width: 58.3333333333%; } + .tile.is-8 { + flex: none; + width: 66.6666666667%; } + .tile.is-9 { + flex: none; + width: 75%; } + .tile.is-10 { + flex: none; + width: 83.3333333333%; } + .tile.is-11 { + flex: none; + width: 91.6666666667%; } + .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, #e8e3e4 0%, white 71%, white 100%); } + @media screen and (max-width: 768px) { + .hero.is-white.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #e8e3e4 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, .hero.is-dark .tabs.is-toggle li.is-active a, .content kbd.hero .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover { + background-color: 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, .hero.is-primary .tabs.is-toggle li.is-active a, .docstring > section > a.hero.docs-sourcelink .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #4eb5de; } + .hero.is-primary.is-bold, .docstring > section > a.hero.is-bold.docs-sourcelink { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } + @media screen and (max-width: 768px) { + .hero.is-primary.is-bold .navbar-menu, .docstring > section > a.hero.is-bold.docs-sourcelink .navbar-menu { + background-image: linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%); } } + .hero.is-link { + background-color: #2e63b8; + color: #fff; } + .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-link strong { + color: inherit; } + .hero.is-link .title { + color: #fff; } + .hero.is-link .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-link .subtitle a:not(.button), + .hero.is-link .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-link .navbar-menu { + background-color: #2e63b8; } } + .hero.is-link .navbar-item, + .hero.is-link .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active, + .hero.is-link .navbar-link:hover, + .hero.is-link .navbar-link.is-active { + background-color: #2958a4; + color: #fff; } + .hero.is-link .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-link .tabs a:hover { + opacity: 1; } + .hero.is-link .tabs li.is-active a { + opacity: 1; } + .hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a { + color: #fff; } + .hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #2e63b8; } + .hero.is-link.is-bold { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } + @media screen and (max-width: 768px) { + .hero.is-link.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%); } } + .hero.is-info { + background-color: #209cee; + color: #fff; } + .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-info strong { + color: inherit; } + .hero.is-info .title { + color: #fff; } + .hero.is-info .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-info .subtitle a:not(.button), + .hero.is-info .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-info .navbar-menu { + background-color: #209cee; } } + .hero.is-info .navbar-item, + .hero.is-info .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active, + .hero.is-info .navbar-link:hover, + .hero.is-info .navbar-link.is-active { + background-color: #1190e3; + color: #fff; } + .hero.is-info .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-info .tabs a:hover { + opacity: 1; } + .hero.is-info .tabs li.is-active a { + opacity: 1; } + .hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a { + color: #fff; } + .hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #209cee; } + .hero.is-info.is-bold { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } + @media screen and (max-width: 768px) { + .hero.is-info.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%); } } + .hero.is-success { + background-color: #22c35b; + color: #fff; } + .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-success strong { + color: inherit; } + .hero.is-success .title { + color: #fff; } + .hero.is-success .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-success .subtitle a:not(.button), + .hero.is-success .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-success .navbar-menu { + background-color: #22c35b; } } + .hero.is-success .navbar-item, + .hero.is-success .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active, + .hero.is-success .navbar-link:hover, + .hero.is-success .navbar-link.is-active { + background-color: #1ead51; + color: #fff; } + .hero.is-success .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-success .tabs a:hover { + opacity: 1; } + .hero.is-success .tabs li.is-active a { + opacity: 1; } + .hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a { + color: #fff; } + .hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover { + background-color: #fff; + border-color: #fff; + color: #22c35b; } + .hero.is-success.is-bold { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } + @media screen and (max-width: 768px) { + .hero.is-success.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%); } } + .hero.is-warning { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-warning strong { + color: inherit; } + .hero.is-warning .title { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .subtitle { + color: rgba(0, 0, 0, 0.9); } + .hero.is-warning .subtitle a:not(.button), + .hero.is-warning .subtitle strong { + color: rgba(0, 0, 0, 0.7); } + @media screen and (max-width: 1055px) { + .hero.is-warning .navbar-menu { + background-color: #ffdd57; } } + .hero.is-warning .navbar-item, + .hero.is-warning .navbar-link { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active, + .hero.is-warning .navbar-link:hover, + .hero.is-warning .navbar-link.is-active { + background-color: #ffd83e; + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs a { + color: rgba(0, 0, 0, 0.7); + opacity: 0.9; } + .hero.is-warning .tabs a:hover { + opacity: 1; } + .hero.is-warning .tabs li.is-active a { + opacity: 1; } + .hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a { + color: rgba(0, 0, 0, 0.7); } + .hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover { + background-color: rgba(10, 10, 10, 0.1); } + .hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover { + background-color: rgba(0, 0, 0, 0.7); + border-color: rgba(0, 0, 0, 0.7); + color: #ffdd57; } + .hero.is-warning.is-bold { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } + @media screen and (max-width: 768px) { + .hero.is-warning.is-bold .navbar-menu { + background-image: linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%); } } + .hero.is-danger { + background-color: #da0b00; + color: #fff; } + .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current), + .hero.is-danger strong { + color: inherit; } + .hero.is-danger .title { + color: #fff; } + .hero.is-danger .subtitle { + color: rgba(255, 255, 255, 0.9); } + .hero.is-danger .subtitle a:not(.button), + .hero.is-danger .subtitle strong { + color: #fff; } + @media screen and (max-width: 1055px) { + .hero.is-danger .navbar-menu { + background-color: #da0b00; } } + .hero.is-danger .navbar-item, + .hero.is-danger .navbar-link { + color: rgba(255, 255, 255, 0.7); } + .hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active, + .hero.is-danger .navbar-link:hover, + .hero.is-danger .navbar-link.is-active { + background-color: #c10a00; + color: #fff; } + .hero.is-danger .tabs a { + color: #fff; + opacity: 0.9; } + .hero.is-danger .tabs a:hover { + opacity: 1; } + .hero.is-danger .tabs li.is-active a { + 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; } + +pre { + position: relative; + overflow: hidden; } + pre code, pre code.hljs { + padding: 0 0.75rem !important; + overflow: auto; + display: block; } + pre code:first-of-type, pre code.hljs:first-of-type { + padding-top: 0.5rem !important; } + pre code:last-of-type, pre code.hljs:last-of-type { + padding-bottom: 0.5rem !important; } + pre .copy-button { + opacity: 0.2; + transition: opacity 0.2s; + position: absolute; + right: 0em; + top: 0em; + padding: 0.5em; + width: 2.5em; + height: 2.5em; + background: transparent; + border: none; + font-family: "Font Awesome 5 Free"; + color: #222222; + cursor: pointer; + text-align: center; } + pre .copy-button:focus, pre .copy-button:hover { + opacity: 1; + background: rgba(34, 34, 34, 0.1); + color: #2e63b8; } + pre .copy-button.success { + color: #259a12; + opacity: 1; } + pre .copy-button.error { + color: #cb3c33; + opacity: 1; } + pre:hover .copy-button { + opacity: 1; } + +.admonition { + background-color: #b5b5b5; + border-style: solid; + border-width: 1px; + border-color: #363636; + border-radius: 4px; + font-size: 1rem; } + .admonition strong { + color: currentColor; } + .admonition.is-small, #documenter .docs-sidebar form.docs-search > input.admonition { + font-size: 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: #def0fc; + border-color: #209cee; } + .admonition.is-info > .admonition-header { + background-color: #209cee; + color: #fff; } + .admonition.is-info > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-success { + background-color: #bdf4d1; + border-color: #22c35b; } + .admonition.is-success > .admonition-header { + background-color: #22c35b; + color: #fff; } + .admonition.is-success > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning { + background-color: #fff3c5; + border-color: #ffdd57; } + .admonition.is-warning > .admonition-header { + background-color: #ffdd57; + color: rgba(0, 0, 0, 0.7); } + .admonition.is-warning > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-danger { + background-color: #ffaba7; + border-color: #da0b00; } + .admonition.is-danger > .admonition-header { + background-color: #da0b00; + color: #fff; } + .admonition.is-danger > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + .admonition.is-compat { + background-color: #bdeff5; + border-color: #1db5c9; } + .admonition.is-compat > .admonition-header { + background-color: #1db5c9; + color: #fff; } + .admonition.is-compat > .admonition-body { + color: rgba(0, 0, 0, 0.7); } + +.admonition-header { + color: #fff; + background-color: #363636; + align-items: center; + font-weight: 700; + justify-content: space-between; + line-height: 1.25; + padding: 0.5rem 0.75rem; + position: relative; } + .admonition-header:before { + font-family: "Font Awesome 5 Free"; + font-weight: 900; + margin-right: 0.75rem; + content: "\f06a"; } + +.admonition-body { + color: #222222; + padding: 0.5rem 0.75rem; } + .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.5rem 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: 0.75rem 0.75rem; + border-bottom: 1px solid #dbdbdb; } + .docstring > section:last-child { + border-bottom: none; } + .docstring > section > a.docs-sourcelink { + transition: opacity 0.3s; + opacity: 0; + position: absolute; + right: 0.375rem; + bottom: 0.375rem; } + .docstring > section > a.docs-sourcelink:focus { + opacity: 1 !important; } + .docstring:hover > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring:focus-within > section > a.docs-sourcelink { + opacity: 0.2; } + .docstring > section:hover a.docs-sourcelink { + opacity: 1; } + +.documenter-example-output { + background-color: white; } + +.outdated-warning-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); + z-index: 999; + background-color: #ffaba7; + color: rgba(0, 0, 0, 0.7); + border-bottom: 3px solid #da0b00; + padding: 10px 35px; + text-align: center; + font-size: 15px; } + .outdated-warning-overlay .outdated-warning-closer { + position: absolute; + top: calc(50% - 10px); + right: 18px; + cursor: pointer; + width: 12px; } + .outdated-warning-overlay a { + color: #2e63b8; } + .outdated-warning-overlay a:hover { + color: #363636; } + +.content pre { + border: 1px solid #dbdbdb; } + +.content code { + font-weight: inherit; } + +.content a code { + color: #2e63b8; } + +.content h1 code, .content h2 code, .content h3 code, .content h4 code, .content h5 code, .content h6 code { + color: #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; } + +pre, code { + font-variant-ligatures: no-contextual; } + +.breadcrumb a.is-disabled { + cursor: default; + pointer-events: none; } + .breadcrumb a.is-disabled, .breadcrumb a.is-disabled:hover { + color: #222222; } + +.hljs { + background: initial !important; } + +.katex .katex-mathml { + top: 0; + right: 0; } + +.katex-display, mjx-container, .MathJax_Display { + margin: 0.5em 0 !important; } + +html { + -moz-osx-font-smoothing: auto; + -webkit-font-smoothing: auto; } + +li.no-marker { + list-style: none; } + +/* 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; + overflow-y: hidden; } + +@media screen and (min-width: 1056px) { + #documenter .docs-main { + max-width: 52rem; + margin-left: 20rem; + padding-right: 1rem; } } + +@media screen and (max-width: 1055px) { + #documenter .docs-main { + width: 100%; } + #documenter .docs-main > article { + max-width: 52rem; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + padding: 0 1rem; } + #documenter .docs-main > header, #documenter .docs-main > nav { + max-width: 100%; + width: 100%; + margin: 0; } } + +#documenter .docs-main header.docs-navbar { + background-color: 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-package-name a, #documenter .docs-sidebar .docs-package-name a:hover { + color: #0a0a0a; } + #documenter .docs-sidebar .docs-version-selector { + border-top: 1px solid #dbdbdb; + display: none; + padding: 0.5rem; } + #documenter .docs-sidebar .docs-version-selector.visible { + display: flex; } + #documenter .docs-sidebar ul.docs-menu { + flex-grow: 1; + user-select: none; + border-top: 1px solid #dbdbdb; + padding-bottom: 1.5rem; + /* 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; } + +.ansi span.sgr1 { + font-weight: bolder; } + +.ansi span.sgr2 { + font-weight: lighter; } + +.ansi span.sgr3 { + font-style: italic; } + +.ansi span.sgr4 { + text-decoration: underline; } + +.ansi span.sgr7 { + color: white; + background-color: #222222; } + +.ansi span.sgr8 { + color: transparent; } + .ansi span.sgr8 span { + color: transparent; } + +.ansi span.sgr9 { + text-decoration: line-through; } + +.ansi span.sgr30 { + color: #242424; } + +.ansi span.sgr31 { + color: #a7201f; } + +.ansi span.sgr32 { + color: #066f00; } + +.ansi span.sgr33 { + color: #856b00; } + +.ansi span.sgr34 { + color: #2149b0; } + +.ansi span.sgr35 { + color: #7d4498; } + +.ansi span.sgr36 { + color: #007989; } + +.ansi span.sgr37 { + color: gray; } + +.ansi span.sgr40 { + background-color: #242424; } + +.ansi span.sgr41 { + background-color: #a7201f; } + +.ansi span.sgr42 { + background-color: #066f00; } + +.ansi span.sgr43 { + background-color: #856b00; } + +.ansi span.sgr44 { + background-color: #2149b0; } + +.ansi span.sgr45 { + background-color: #7d4498; } + +.ansi span.sgr46 { + background-color: #007989; } + +.ansi span.sgr47 { + background-color: gray; } + +.ansi span.sgr90 { + color: #616161; } + +.ansi span.sgr91 { + color: #cb3c33; } + +.ansi span.sgr92 { + color: #0e8300; } + +.ansi span.sgr93 { + color: #a98800; } + +.ansi span.sgr94 { + color: #3c5dcd; } + +.ansi span.sgr95 { + color: #9256af; } + +.ansi span.sgr96 { + color: #008fa3; } + +.ansi span.sgr97 { + color: whitesmoke; } + +.ansi span.sgr100 { + background-color: #616161; } + +.ansi span.sgr101 { + background-color: #cb3c33; } + +.ansi span.sgr102 { + background-color: #0e8300; } + +.ansi span.sgr103 { + background-color: #a98800; } + +.ansi span.sgr104 { + background-color: #3c5dcd; } + +.ansi span.sgr105 { + background-color: #9256af; } + +.ansi span.sgr106 { + background-color: #008fa3; } + +.ansi span.sgr107 { + background-color: whitesmoke; } + +code.language-julia-repl > span.hljs-meta { + color: #066f00; + font-weight: bolder; } + +/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/ +/* +This is left on purpose making default.css the single file that can be lifted +as-is from the repository directly without the need for a build step + +Typically this "required" baseline CSS is added by `makestuff.js` during build. +*/ +pre code.hljs { + display: block; + overflow-x: auto; } + +code.hljs { + padding: 3px 5px; } + +/* end baseline CSS */ +.hljs { + background: #F0F0F0; + color: #444; } + +/* Base color: saturation 0; */ +.hljs-subst { + /* default */ } + +/* purposely ignored */ +.hljs-comment { + color: #888888; } + +.hljs-tag, +.hljs-punctuation { + color: #444a; } + +.hljs-tag .hljs-name, +.hljs-tag .hljs-attr { + color: #444; } + +.hljs-keyword, +.hljs-attribute, +.hljs-selector-tag, +.hljs-meta .hljs-keyword, +.hljs-doctag, +.hljs-name { + font-weight: bold; } + +/* 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-operator, +.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 .hljs-string { + color: #4d99bf; } + +/* Misc effects */ +.hljs-emphasis { + font-style: italic; } + +.hljs-strong { + font-weight: bold; } diff --git a/v0.1.2/assets/themeswap.js b/v0.1.2/assets/themeswap.js new file mode 100644 index 0000000..c58e993 --- /dev/null +++ b/v0.1.2/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/v0.1.2/assets/warner.js b/v0.1.2/assets/warner.js new file mode 100644 index 0000000..5531c88 --- /dev/null +++ b/v0.1.2/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
                  Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/v0.1.2/contributing/index.html b/v0.1.2/contributing/index.html new file mode 100644 index 0000000..1306511 --- /dev/null +++ b/v0.1.2/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

                  Contributing to Manopt.jl

                  First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

                  The following is a set of guidelines to ManoptExamples.jl.

                  Table of Contents

                  I just have a question

                  The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

                  How can I file an issue?

                  If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

                  How can I contribute?

                  Add an objective

                  The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

                  If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

                  If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

                  • cost functions are always of the form cost_ and a fitting name
                  • gradient functions are always of the the gradient_ and a fitting name, followed by an !

                  for in-place gradients and by !! if it is a struct that can provide both.

                  It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

                  Add an example

                  If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

                  Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

                  Code style

                  We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

                  We also follow a few internal conventions:

                  • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
                  • within a file the structs should come first and functions second. The only exception are constructors for the structs
                  • within both blocks an alphabetical order is preferable.
                  • The above implies that the mutating variant of a function follows the non-mutating variant.
                  • There should be no dangling = signs.
                  • Always add a newline between things of different types (struct/method/const).
                  • Always add a newline between methods for different functions (including in-place/non-mutating variants).
                  • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
                  • All import/using/include should be in the main module file.
                  • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
                  • the Quarto Markdown files are excluded from this formatting.
                  diff --git a/v0.1.2/examples/Difference-of-Convex-Benchmark/index.html b/v0.1.2/examples/Difference-of-Convex-Benchmark/index.html new file mode 100644 index 0000000..2f65a04 --- /dev/null +++ b/v0.1.2/examples/Difference-of-Convex-Benchmark/index.html @@ -0,0 +1,171 @@ + +A Benchmark · ManoptExamples.jl

                  Benchmark of the Difference of Convex Algorithms

                  Ronny Bergmann 2023-06-06

                  Introduction

                  In this Benchmark we compare the Difference of Convex Algprithm (DCA) (Bergmann et al., 2023) and the Difference of Convex Proximal Point Algorithm (DCPPA) (Souza and Oliveira, 2015) which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from (Bergmann et al., 2023), Section 7.1.

                  \[\operatorname*{arg\,min}_{p\in\mathcal M}\ \ g(p) - h(p)\]

                  where $g,h\colon \mathcal M \to \mathbb R$ are geodesically convex function on the Riemannian manifold $\mathcal M$.

                  using LinearAlgebra, Random, Statistics, BenchmarkTools
                  +using Manifolds, Manopt, ManoptExamples
                  +using NamedColors, Plots
                  +Random.seed!(42)

                  and we load a few nice colors

                  paul_tol = load_paul_tol()
                  +indigo = paul_tol["mutedindigo"]
                  +teal = paul_tol["mutedteal"]

                  The DC Problem

                  We start with defining the two convex functions $g,h$ and their gradients as well as the DC problem $f$ and its gradient for the problem

                  \[ \operatorname*{arg\,min}_{p\in\mathcal M}\ \ \bigl( \log\bigr(\det(p)\bigr)\bigr)^4 - \bigl(\log \det(p) \bigr)^2.\]

                  where the critical points obtain a functional value of $-\frac{1}{4}$.

                  where $\mathcal M$ is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.

                  We first define the corresponding functions

                  g(M, p) = log(det(p))^4
                  +h(M, p) = log(det(p))^2
                  +f(M, p) = g(M, p) - h(M, p)

                  and their gradients

                  grad_g(M, p) = 4 * (log(det(p)))^3 * p
                  +grad_h(M, p) = 2 * log(det(p)) * p
                  +grad_f(M, p) = grad_g(M, p) - grad_h(M, p)

                  which we can use to verify that the gradients of $g$ and $h$ are correct. We use for that

                  n = 6
                  +M = SymmetricPositiveDefinite(n)
                  +p0 = log(n) * Matrix{Float64}(I, n, n);
                  +X0 = 1 / n * Matrix{Float64}(I, n, n);

                  to tall both checks

                  check_gradient(M, g, grad_g, p0, X0; plot=true)

                  and

                  check_gradient(M, h, grad_h, p0, X0; plot=true)

                  which both pass the test. We continue to define their inplace variants

                  function grad_g!(M, X, p)
                  +    copyto!(M, X, p)
                  +    X .*= 4 * (log(det(p)))^3
                  +    return X
                  +end
                  +function grad_h!(M, X, p)
                  +    copyto!(M, X, p)
                  +    X .*= 2 * (log(det(p)))
                  +    return X
                  +end
                  +function grad_f!(M, X, p)
                  +    grad_g!(M, X, p)
                  +    Y = copy(M, p, X)
                  +    grad_h!(M, Y, p)
                  +    X .-= Y
                  +    return X
                  +end

                  And compare times for both algorithms, with a bit of debug output.

                  @time p_min_dca = difference_of_convex_algorithm(
                  +    M,
                  +    f,
                  +    g,
                  +    grad_h!,
                  +    p0;
                  +    grad_g=grad_g!,
                  +    gradient=grad_f!,
                  +    evaluation=InplaceEvaluation(),
                  +    debug=[
                  +        :Iteration,
                  +        (:Cost, "f(p): %1.9f"),
                  +        (:GradientNorm, " |grad_f(p)|: %1.9f"),
                  +        (:Change, " |δp|: %1.9f"),
                  +        :Stop,
                  +        5,
                  +        "\n",
                  +    ],
                  +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                  +    sub_state=TrustRegionsState(M, copy(M, p0)),
                  +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                  +);
                  Initial f(p): 137.679053470
                  +# 5     f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127
                  +# 10    f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103
                  +# 15    f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574
                  +# 20    f(p): -0.250000000 |grad_f(p)|: 0.000000003 |δp|: 0.000000011
                  +The algorithm reached approximately critical point after 24 iterations; the gradient norm (3.9079528504063575e-11) is less than 1.0e-10.
                  +  7.392207 seconds (7.90 M allocations: 531.878 MiB, 4.32% gc time, 99.24% compilation time)

                  The cost is

                  f(M, p_min_dca)
                  -0.25

                  Similarly the DCPPA performs

                  @time p_min_dcppa = difference_of_convex_proximal_point(
                  +    M,
                  +    grad_h!,
                  +    p0;
                  +    g=g,
                  +    grad_g=grad_g!,
                  +    λ=i -> 1 / (2 * n),
                  +    cost=f,
                  +    gradient=grad_f!,
                  +    debug=[
                  +        :Iteration,
                  +        (:Cost, "f(p): %1.9f"),
                  +        " ",
                  +        (:GradientNorm, "|grad_f(p)|: %1.10f"),
                  +        (:Change, "|δp|: %1.10f"),
                  +        :Stop,
                  +        5,
                  +        "\n",
                  +    ],
                  +    evaluation=InplaceEvaluation(),
                  +    stepsize=ConstantStepsize(1.0),
                  +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                  +    sub_state=TrustRegionsState(M, copy(M, p0)),
                  +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                  +);
                  Initial f(p): 137.679053470 
                  +# 5     f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692
                  +# 10    f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316
                  +# 15    f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676
                  +# 20    f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968
                  +# 25    f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530
                  +# 30    f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048
                  +# 35    f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001
                  +The algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.
                  +  1.791221 seconds (1.62 M allocations: 114.000 MiB, 2.17% gc time, 95.35% compilation time)

                  It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost

                  f(M, p_min_dcppa)
                  -0.25

                  Benchmark I: Time comparison

                  We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test

                  dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()
                  +dcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()
                  +N_max=14
                  +N = 2:N_max

                  and run a benchmark for both algorithms

                  for n in N
                  +    Mn = SymmetricPositiveDefinite(n)
                  +    pn = log(n) * Matrix{Float64}(I, n, n)
                  +    bdca = @benchmark difference_of_convex_algorithm(
                  +        $Mn,
                  +        $f,
                  +        $g,
                  +        $grad_h!,
                  +        $pn;
                  +        grad_g=$grad_g!,
                  +        gradient=$grad_f!,
                  +        evaluation=InplaceEvaluation(),
                  +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                  +        sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),
                  +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                  +    )
                  +    dca_benchmarks[n] = bdca
                  +    bdcppa = @benchmark difference_of_convex_proximal_point(
                  +        $Mn,
                  +        $grad_h!,
                  +        $pn;
                  +        g=$g,
                  +        grad_g=$grad_g!,
                  +        λ=i -> 1 / (2 * n),
                  +        cost=f,
                  +        gradient=grad_f!,
                  +        evaluation=InplaceEvaluation(),
                  +        stepsize=ConstantStepsize(1.0),
                  +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                  +        sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),
                  +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                  +    )
                  +    dcppa_benchmarks[n] = bdcppa
                  +end

                  Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds

                  dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]
                  +dca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]
                  +dcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]
                  plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Time (sec.)")
                  +plot!(dims, dca_times; label="DCA", color=indigo, linewidth=2)
                  +plot!(dims, dcppa_times; label="DCPPA", color=teal, linewidth=2)

                  Benchmark II: Iterations and cost.

                  As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.

                  N2 = [5,10,20,40,80]
                  +dims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]
                  +dca_iterations = Dict{Int,Int}()
                  +dca_costs = Dict{Int,Vector{Float64}}()
                  +dcppa_iterations = Dict{Int,Int}()
                  +dcppa_costs = Dict{Int,Vector{Float64}}()
                  @time for n in N2
                  +    println(n)
                  +    Mn = SymmetricPositiveDefinite(n)
                  +    pn = log(n) * Matrix{Float64}(I,n,n);
                  +    @time dca_st = difference_of_convex_algorithm(
                  +        Mn, f, g, grad_h!, pn;
                  +        grad_g=grad_g!,
                  +        gradient=grad_f!,
                  +        evaluation = InplaceEvaluation(),
                  +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                  +        sub_state = TrustRegionsState(Mn, copy(Mn, pn)),
                  +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                  +        record = [:Iteration, :Cost],
                  +        return_state = true,
                  +    );
                  +    dca_costs[n] = get_record(dca_st, :Iteration, :Cost)
                  +    dca_iterations[n] = length(dca_costs[n])
                  +    @time dcppa_st = difference_of_convex_proximal_point(
                  +        Mn, grad_h!, pn;
                  +        g=g,
                  +        grad_g=grad_g!,
                  +        λ = i -> 1/(2*n),
                  +        cost = f,
                  +        gradient= grad_f!,
                  +        evaluation = InplaceEvaluation(),
                  +        stepsize = ConstantStepsize(1.0),
                  +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                  +        sub_state = TrustRegionsState(Mn, copy(Mn, pn)),
                  +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                  +        record = [:Iteration, :Cost],
                  +        return_state = true,
                  +    );
                  +    dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)
                  +    dcppa_iterations[n] = length(dcppa_costs[n])
                  +end

                  The iterations are like

                  plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Iterations")
                  +plot!(dims2, [values(dca_iterations)...]; label="DCA", color=indigo, linewidth=2)
                  +plot!(dims2, [values(dcppa_iterations)...]; label="DCPPA", color=teal, linewidth=2)

                  And for the developtment of the cost

                  where we can see that the DCA needs less iterations than the DCPPA.

                  Literature

                  Bergmann, R., Ferreira, O. P., Santos, E. M., et al. (2023) The difference of convex algorithm on Hadamard manifolds. arXiv:2112.05250. arXiv. Available at: http://arxiv.org/abs/2112.05250.

                  Souza, J. C. de O. and Oliveira, P. R. (2015) A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization, 63, 797–810. Springer Science and Business Media LLC. DOI: 10.1007/s10898-015-0282-7.

                  diff --git a/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg b/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg new file mode 100644 index 0000000..dfa0e7f --- /dev/null +++ b/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg b/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg new file mode 100644 index 0000000..8346870 --- /dev/null +++ b/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg b/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..20dd46a --- /dev/null +++ b/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg b/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg new file mode 100644 index 0000000..4943506 --- /dev/null +++ b/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg b/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..bea5fe2 --- /dev/null +++ b/v0.1.2/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.2/examples/Difference-of-Convex-Frank-Wolfe/index.html b/v0.1.2/examples/Difference-of-Convex-Frank-Wolfe/index.html new file mode 100644 index 0000000..3134895 --- /dev/null +++ b/v0.1.2/examples/Difference-of-Convex-Frank-Wolfe/index.html @@ -0,0 +1,217 @@ + +Frank Wolfe comparison · ManoptExamples.jl

                  A comparison of the Difference of Convex and Frank Wolfe Algorithm

                  Ronny Bergmann 2023-11-06

                  Introduction

                  In this example we compare the Difference of Convex Algprithm (DCA) (Bergmann et al., 2023) with the Frank-Wolfe Algorithm, which was introduced in (Weber and Sra, 2022). This example reproduces the results from (Bergmann et al., 2023), Section 7.3.

                  using LinearAlgebra, Random, Statistics, BenchmarkTools
                  +using ManifoldsBase, Manifolds, Manopt, ManoptExamples
                  +using NamedColors, Plots

                  and we load a few nice colors

                  paul_tol = load_paul_tol()
                  +indigo = paul_tol["mutedindigo"]
                  +teal = paul_tol["mutedteal"]

                  We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices $\mathcal P(n)$ with the affine invariant metric. Let $q_1,\ldots,q_m \in \mathcal P(n)$ be a set of points and $\mu_1,\ldots,\mu_m$ be a set of weights, such that they sum to one. We consider then

                  \[\operatorname*{arg\,max}_{p\in\mathcal C}\ \ h(p)\]

                  with

                  \[h(p) = +\sum_{j=1}^m \mu_j d^2(p,q_i), +\quad \text{ where } +d^2(p,q_i) = \operatorname{tr}\bigl( + \log^2(p^{-\frac{1}{2}}q_jp^{-\frac{1}{2}}) +\big) +\qquad\text{and}\qquad +\mathcal C = \{ p\in {\mathcal M}\ |\ \bar L\preceq p \preceq \bar U \},\]

                  for a lower bound $L$ and an upper bound $U$ for the matrices in the positive definite sense $A \preceq B \Leftrightarrow (B-A)$ is positive semi-definite

                  When every one of the weights ${\mu}_1, \ldots {\mu}_m$ are equal, this function $h$ is known as the of the set $\{q_1, \dots, q_m\}$.

                  And for our example we set

                  Random.seed!(42)
                  +n = 20
                  +m = 100
                  +M = SymmetricPositiveDefinite(n)
                  +q = [rand(M) for _ in 1:m];
                  +w = rand(m)
                  +w ./=sum(w)

                  We use as lower and upper bound the arithmetic and geometric mean $L$ and $U$, respectively.

                  L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )
                  +U = sum( wi * qi for (wi, qi) in zip(w,q) )

                  As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use

                  p0 = (L+U)/2

                  And we can check that it is feasible

                  Common Functions

                  Given $p \in \mathcal M$, $X \in T_p\mathcal M$ on the symmetric positive definite matrices M, this method computes the closed form solution to

                  \[\operatorname*{arg\,min}_{q\in {\mathcal C}}\ \langle X, \log_p q\rangle + = \operatorname*{arg\,min}_{q\in {\mathcal C}}\ \operatorname{tr}(S\log(YqY))\]

                  where $\mathcal C = \{ q | L \preceq q \preceq U \}$, $S = p^{-1/2}Xp^{-1/2}$, and $Y=p^{-1/2}$.

                  The solution is given by $Z=X^{-1}Q\bigl( P^{\mathrm{T}}[-\operatorname{sgn}(D)]_{+}P+\hat{L}\bigr)Q^{\mathrm{T}}X^{-1}$,@ where $S=QDQ^{\mathrm{T}}$ is a diagonalization of $S$, $\hat{U}-\hat{L}=P^{\mathrm{T}}P$ with $\hat{L}=Q^{\mathrm{T}}XLXQ$ and $\hat{U}=Q^{\mathrm{T}}XUXQ$, where $[-\mbox{sgn}(D)]_{+}$ is the diagonal matrix

                  \[\operatorname{diag}\bigl( + [-\operatorname{sgn}(d_{11})]_{+}, \ldots, [-\operatorname{sgn}(d_{nn})]_{+} +\bigr)\]

                  and $D=(d_{ij})$.

                  @doc raw"""
                  +    closed_form_solution!(M, q, L, U, p X)
                  +
                  +Compute the closeed form solution of the constraint sub problem in place of ``q``.
                  +"""
                  +function closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)
                  +    # extract p^1/2 and p^{-1/2}
                  +    (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)
                  +    # Compute D & Q
                  +    e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk  = QDQ'
                  +    D = Diagonal(1.0 .* (e2.values .< 0))
                  +    Q = e2.vectors
                  +    #println(p)
                  +    Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q
                  +    Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q
                  +    P = cholesky(Hermitian(Uprime - Lprime))
                  +    z = P.U' * D * P.U + Lprime
                  +    copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)
                  +    return q
                  +end

                  The Difference of Convex Formulation

                  We use $g(p) = \iota_{\mathcal C}(p)$ as the indicator funtion of the set $\mathcal C$. We use

                  function is_pos_def(p; atol=5e-13)
                  +    e = eigen(Symmetric(p))
                  +    return all((e.values .+ atol) .> 0)
                  +end
                  +function g(p, L, U)
                  +    return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf
                  +end
                  +h(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )

                  So we can first check that p0 is feasible

                  g(p0,L,U) == 0.0
                  true

                  Now setting

                  \[\operatorname*{arg\,min}_{p\in\mathcal M}\ g(p) - h(p)\]

                  We look for a maximum of $h$, where $g$ is minimal, i.e. $g(p)$ is zero or in other words $p \in \mathcal C$.

                  The gradient of $h$ can also be implemented in closed form as

                  grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))
                  +function grad_h!(M, X, p, w, q)
                  +    Y = copy(M, p, X)
                  +    zero_vector!(M, X, p)
                  +    for (wi, qi) in zip(w,q)
                  +        log!(M, Y, p, qi)
                  +        Y .*= - 2.0*wi
                  +        X .+= Y
                  +    end
                  +    return X
                  +end

                  And we can further define the cost, which will just be $+\infty$ outside of $\mathcal C$. We define

                  f_dc(M, p) = g(p, L, U) - h(M, p, w, q)
                  +grad_h!(M, X, p) = grad_h!(M, X, p, w, q)
                  +function grad_f_dc!(M,X, p)
                  +    grad_h!(M, X, p, w, q)
                  +    X .*= -1.0
                  +    return X
                  +end

                  Here we can omit the gradient of $g$ in the definition of $\operatorname{grad} f$, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of $\mathcal C$.

                  As the last step, we can provide the closed form solver for the DC sub problem given at iteration $k$ by

                  \[\operatorname*{arg\,min}_{p\in \mathcal C}\ + \big\langle -\operatorname{grad} h(p^{(k)}), \exp^{-1}_{p^{(k)}}p\big\rangle.\]

                  Which we con compute

                  function dc_sub_solution!(M, q, p, X)
                  +    closed_form_solution!(M, q, L, U, p, -X)
                  +    return q
                  +end

                  For safety, we might want to avoid ending up at the boundary of $\mathcal C$. That is we reduce the distance we walk towards the solution $q$ a bit.

                  function dc_sub_solution_safe!(M, q, p, X)
                  +    p_last = copy(M,p) # since p=q might be in place
                  +    closed_form_solution!(M, q, L, U, p, -X)
                  +    q_orig = copy(M,q) # since we do the following in place of q
                  +    a = minimum(real.(eigen(q-L).values))
                  +    b = minimum(real.(eigen(U-q).values))
                  +    s = 1.0
                  +    d = distance(M, p_last, q_orig);
                  +    # if we are close to zero, we reduce faster.
                  +    α = d < 1/(n^2) ? 0.66 : 0.9995;
                  +    i=0
                  +    while (a < 0) || (b < 0)
                  +        s *= α
                  +        shortest_geodesic!(M, q, p_last, q_orig, s)
                  +        a = minimum(real.(eigen(q-L).values))
                  +        b = minimum(real.(eigen(U-q).values))
                  +        #println("$i a: $a, b = $b with s=$s")
                  +        i=i+1
                  +        if (i>100) # safety fallback
                  +            #@warn " $i steps where not enough $s ($α)\n$a $b\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs"
                  +            qe = eigen(q)
                  +            if a < 0
                  +                qe.values .+= min(1e-8, n*abs(min(a,b)))
                  +            else
                  +                qe.values .-= min(1e-8, n*abs(min(a,b)))
                  +            end
                  +            q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'
                  +            a = minimum(real.(eigen(q-L).values))
                  +            b = minimum(real.(eigen(U-q).values))
                  +            return q
                  +        end
                  +    end
                  +    return q
                  +end

                  The DoC solver run

                  Let’s compare both methods when they have the same stopping criteria

                  @time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;
                  +    gradient=grad_f_dc!,
                  +    sub_problem=dc_sub_solution_safe!,
                  +    evaluation=InplaceEvaluation(),
                  +    stopping_criterion = StopAfterIteration(300) |
                  +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                  +    debug = [
                  +        (:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "),
                  +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                  +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                  +        30, :Stop, "\n"],
                  +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                  +    return_state=true,
                  +)
                  Initial F(p): -0.77661458292831
                  +# 30       F(p): -0.78442445025558 |Δp|: 0.05499863340233  |grad f(p)|: 0.17698758  |Δgrad f(p)|: 0.17568455
                  +At iteration 39 the change of the gradient (1.5841755142063383e-13) was less than 1.0e-9.
                  + 18.917838 seconds (15.81 M allocations: 1.717 GiB, 4.59% gc time, 83.49% compilation time)
                  +
                  +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                  +After 39 iterations
                  +
                  +## Parameters
                  +* sub solver state:
                  +    | InplaceEvaluation()
                  +
                  +## Stopping Criterion
                  +Stop When _one_ of the following are fulfilled:
                  +    Max Iteration 300:  not reached
                  +    |Δp| < 1.0e-14: not reached
                  +    |Δgrad f| < 1.0e-9: reached
                  +Overall: reached
                  +This indicates convergence: No
                  +
                  +## Debug
                  +    :Stop = :Stop
                  +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "
                  +", 30]
                  +
                  +## Record
                  +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                  Let’s extract the final point and look at its cost

                  p1_dc = get_solver_result(state1_dc);
                  +f_dc(M, p1_dc)
                  -0.7844245126697607

                  As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.

                  [ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]
                  2-element Vector{Tuple{Float64, Float64}}:
                  + (4.794825832759285e-13, 0.06692017412921099)
                  + (7.230668033332052e-6, 0.06701531165157007)

                  For the statistics we extract the recordings from the state

                  Define the Frank-Wolfe functions

                  For Frank wolfe, the cost is just defined as $-h(p)$ but the minimisation is constraint to $\mathcal C$, which is enfored by the oracle.

                  f_fw(M, p) = -h(M, p, w, q)
                  +function grad_f_fw!(M,X, p)
                  +    grad_h!(M, X, p, w, q)
                  +    X .*= -1.0
                  +    return X
                  +end
                  +oracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)

                  The FW Solver Run

                  Similarly we can run the Frank-Wolfe algorithm with

                  @time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;
                  +    sub_problem=oracle_fw!,
                  +    evaluation=InplaceEvaluation(),
                  +    stopping_criterion = StopAfterIteration(10^4) |
                  +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                  +    debug = [
                  +        (:Iteration, "# %-8d "), :Cost, (:Change, " |Δp|: %0.14f "),
                  +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                  +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                  +        2*10^3, :Stop, "\n"],
                  +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                  +    return_state=true,
                  +)
                  Initial F(x): -0.776615
                  +# 2000     F(x): -0.784420 |Δp|: 0.04611942377531  |grad f(p)|: 0.17693408  |Δgrad f(p)|: 0.17555618
                  +# 4000     F(x): -0.784421 |Δp|: 0.00372201631969  |grad f(p)|: 0.17694619  |Δgrad f(p)|: 0.00749427
                  +# 6000     F(x): -0.784422 |Δp|: 0.00205683506768  |grad f(p)|: 0.17695204  |Δgrad f(p)|: 0.00414088
                  +# 8000     F(x): -0.784422 |Δp|: 0.00140675676249  |grad f(p)|: 0.17695565  |Δgrad f(p)|: 0.00283200
                  +# 10000    F(x): -0.784422 |Δp|: 0.00106177438594  |grad f(p)|: 0.17695815  |Δgrad f(p)|: 0.00213746
                  +The algorithm reached its maximal number of iterations (10000).
                  +306.349726 seconds (55.92 M allocations: 93.626 GiB, 3.79% gc time, 0.36% compilation time)
                  +
                  +# Solver state for `Manopt.jl`s Frank Wolfe Method
                  +After 10000 iterations
                  +
                  +## Parameters
                  +* inverse retraction method: LogarithmicInverseRetraction()
                  +* retraction method: ExponentialRetraction()
                  +* sub solver state:
                  +    | InplaceEvaluation()
                  +
                  +## Stepsize
                  +DecreasingStepsize(; length=2.0,  factor=1.0,  subtrahend=0.0,  shift=2)
                  +
                  +## Stopping Criterion
                  +Stop When _one_ of the following are fulfilled:
                  +    Max Iteration 10000:    reached
                  +    |Δp| < 1.0e-14: not reached
                  +    |Δgrad f| < 1.0e-9: not reached
                  +Overall: reached
                  +This indicates convergence: No
                  +
                  +## Debug
                  +    :Stop = :Stop
                  +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "
                  +", 2000]
                  +
                  +## Record
                  +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                  And we take a look at this result as well

                  p1_fw = get_solver_result(state1_fw);
                  +f_dc(M, p1_fw)
                  -0.7844220281765067

                  And its feasibility

                  [extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]
                  2-element Vector{Tuple{Float64, Float64}}:
                  + (4.914485568254976e-10, 0.06659173821656042)
                  + (3.245654983246501e-5, 0.06713970236151023)

                  Statistics

                  We extract the recorded values

                  # DoC
                  +iter1_dc = get_record(state1_dc, :Iteration, :Iteration)
                  +pk_dc = get_record(state1_dc,:Iteration,:Iterate)
                  +costs1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))
                  +dc_min = minimum(costs1_dc)
                  +# FW
                  +iter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]
                  +pk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]
                  +costs1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))

                  And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.

                  fig = plot(;
                  +    legend=:topright,
                  +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x_k)-f^*$ (log. scale)",
                  +    yaxis=:log,
                  +    ylims=(1e-8, 10^-2),
                  +    xaxis=:log,
                  +    xlims=(1,10^4),
                  +)
                  +plot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label="Difference of Convex")
                  +plot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label="Frank-Wolfe")

                  This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.

                  On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.

                  Literature

                  Bergmann, R., Ferreira, O. P., Santos, E. M., et al. (2023) The difference of convex algorithm on Hadamard manifolds. arXiv:2112.05250. arXiv. Available at: http://arxiv.org/abs/2112.05250.

                  Weber, M. and Sra, S. (2022) Riemannian optimization via frank-wolfe methods. Mathematical Programming. Springer Science and Business Media LLC. DOI: 10.1007/s10107-022-01840-5.

                  diff --git a/v0.1.2/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg b/v0.1.2/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg new file mode 100644 index 0000000..77c173e --- /dev/null +++ b/v0.1.2/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.2/examples/Difference-of-Convex-Rosenbrock/index.html b/v0.1.2/examples/Difference-of-Convex-Rosenbrock/index.html new file mode 100644 index 0000000..0e97b88 --- /dev/null +++ b/v0.1.2/examples/Difference-of-Convex-Rosenbrock/index.html @@ -0,0 +1,337 @@ + +Rosenbrock Metric · ManoptExamples.jl

                  Solving Rosenbrock with the Difference of Convex Algorithm

                  Ronny Bergmann 2023-06-06

                  Introduction

                  This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in (Bergmann et al., 2023), Section 7.2.

                  Both the Rosenbrock problem

                  \[ \operatorname*{argmin}_{x\in\mathbb R^2} a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2,\]

                  where $a,b>0$ and usually $b=1$ and $a \gg b$, we know the minimizer $x^* = (b,b^2)^\mathrm{T}$, and also the (Euclidean) gradient

                  \[\nabla f(x) = + \begin{pmatrix} + 4a(x_1^2-x_2)\\ -2a(x_1^2-x_2) + \end{pmatrix} + + + \begin{pmatrix} + 2(x_1-b)\\ 0 + \end{pmatrix}.\]

                  They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.

                  Furthermore, the RosenbrockMetric can be used on $\mathbb R^2$, that is

                  \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix},\]

                  In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.

                  1. The Euclidean Gradient
                  2. The Riemannian gradient descent with respect to the RosenbrockMetric
                  3. The Euclidean Difference of Convex Algorithm
                  4. The Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric

                  Where we obtain a difference of convex problem by writing

                  \[f(x) = a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2 + = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 - \bigl(x_1-b\bigr)^2\]

                  that is

                  \[g(x) = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 \quad\text{ and }\quad h(x) = \bigl(x_1-b\bigr)^2\]

                  using LinearAlgebra, Random, Statistics
                  +using Manifolds, Manopt, ManoptExamples
                  +using NamedColors, Plots
                  +import Manopt: set_manopt_parameter!
                  +Random.seed!(42)
                  paul_tol = load_paul_tol()
                  +indigo = paul_tol["mutedindigo"]
                  +green = paul_tol["mutedgreen"]
                  +sand = paul_tol["mutedsand"]
                  +teal = paul_tol["mutedteal"]
                  +grey = paul_tol["mutedgrey"]

                  To emphasize the effect, we choose a quite large value of a.

                  a = 2*10^5
                  +b = 1

                  and use the starting point and a direction to check gradients

                  p0 = [0.1, 0.2]

                  The Euclidean Gradient Descent.

                  For the Euclidean gradient we can just use the same approach as in the Rosenbrock example

                  M = ℝ^2
                  +f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                  +∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)

                  define a common debug vector

                  debug_vec = [
                  +        (:Iteration, "# %-8d "),
                  +        (:Cost, "F(x): %1.4e"),
                  +        " ",
                  +        (:Change, "|δp|: %1.4e | "),
                  +        (:GradientNorm, "|grad f|: %1.6e"),
                  +        :Stop,
                  +        "\n",
                  +    ]

                  and call the gradient descent algorithm

                  Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;
                  +    evaluation=InplaceEvaluation(),
                  +    debug=[debug_vec...,10^7],
                  +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                  +    record=[:Iteration, :Cost],
                  +    return_state=true,
                  +)
                  Initial F(x): 7.2208e+03 
                  +# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03
                  +# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04
                  +# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06
                  +# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08
                  +# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10
                  +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                  +
                  +# Solver state for `Manopt.jl`s Gradient Descent
                  +After 53073227 iterations
                  +
                  +## Parameters
                  +* retraction method: ExponentialRetraction()
                  +
                  +## Stepsize
                  +ArmijoLineseach() with keyword parameters
                  +  * initial_stepsize    = 1.0
                  +  * retraction_method   = ExponentialRetraction()
                  +  * contraction_factor  = 0.95
                  +  * sufficient_decrease = 0.1
                  +
                  +## Stopping Criterion
                  +Stop When _one_ of the following are fulfilled:
                  +    Max Iteration 100000000:    not reached
                  +    |Δp| < 1.0e-16: reached
                  +Overall: reached
                  +This indicates convergence: Yes
                  +
                  +## Debug
                  +    :Stop = :Stop
                  +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "
                  +", 10000000]
                  +
                  +## Record
                  +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                  The Riemannian Gradient Descent.

                  For the Riemannian case, we define

                  M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())
                  MetricManifold(Euclidean(2; field = ℝ), ManoptExamples.RosenbrockMetric())

                  and the gradient is now adopted to the new metric

                  function grad_f!(M, X, p)
                  +    ∇f!!(M, X, p)
                  +    riemannian_gradient!(M, X, p, X)
                  +    return X
                  +end
                  +function grad_f(M, p)
                  +    X = zero_vector(M, p)
                  +    return grad_f!(M, X, p)
                  +end
                  R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;
                  +    evaluation=InplaceEvaluation(),
                  +    debug=[debug_vec...,10^6],
                  +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                  +    record=[:Iteration, :Cost],
                  +    return_state=true,
                  +)
                  Initial F(x): 7.2208e+03 
                  +# 1000000  F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04
                  +# 2000000  F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09
                  +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                  +
                  +# Solver state for `Manopt.jl`s Gradient Descent
                  +After 2443750 iterations
                  +
                  +## Parameters
                  +* retraction method: ExponentialRetraction()
                  +
                  +## Stepsize
                  +ArmijoLineseach() with keyword parameters
                  +  * initial_stepsize    = 1.0
                  +  * retraction_method   = ExponentialRetraction()
                  +  * contraction_factor  = 0.95
                  +  * sufficient_decrease = 0.1
                  +
                  +## Stopping Criterion
                  +Stop When _one_ of the following are fulfilled:
                  +    Max Iteration 100000000:    not reached
                  +    |Δp| < 1.0e-16: reached
                  +Overall: reached
                  +This indicates convergence: Yes
                  +
                  +## Debug
                  +    :Stop = :Stop
                  +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "
                  +", 1000000]
                  +
                  +## Record
                  +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                  The Euclidean Difference of Convex

                  For the convex case, we have to first introduce the two parts of the cost.

                  f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;
                  +f2(M, p; a=100, b=1) = (p[1] - b[1])^2;
                  +g(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)
                  +h(M, p; a=100, b=1) = f2(M, p; a=a, b=b)

                  and their (Euclidan) gradients

                  function ∇h!(M, X, p; a=100, b=1)
                  +    X[1] = 2*(p[1]-b)
                  +    X[2] = 0
                  +    return X
                  +end
                  +function ∇h(M, p; a=100, b=1)
                  +    X = zero(p)
                  +    ∇h!(M, X, p; a=a, b=b)
                  +    return X
                  +end
                  +function ∇g!(M, X, p; a=100, b=1)
                  +    X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)
                  +    X[2] = -2*a*(p[1]^2-p[2])
                  +    return X
                  +end
                  +function ∇g(M, p; a=100, b=1)
                  +    X = zero(p)
                  +    ∇g!(M, X, p; a=a, b=b)
                  +    return X
                  +end

                  and we define for convenience

                  docE_g(M, p) = g(M, p; a=a, b=b)
                  +docE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)
                  +docE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)
                  +docE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)
                  +function docE_∇f!(M, X, p)
                  +  Y = zero_vector(M, p)
                  +  docE_∇g!(M, X, p)
                  +  docE_∇h!(M, Y, p)
                  +  X .-= Y
                  +  return X
                  +end

                  Then we call the difference of convex algorithm on Eucldiean space $\mathbb R^2$.

                  E_doc_state = difference_of_convex_algorithm(
                  +    M, docE_f, docE_g, docE_∇h!, p0;
                  +    gradient=docE_∇f!,
                  +    grad_g = docE_∇g!,
                  +    debug=[debug_vec..., 10^4],
                  +    evaluation=InplaceEvaluation(),
                  +    record=[:Iteration, :Cost],
                  +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                  +    sub_hess=nothing, # Use gradient descent
                  +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                  +    return_state=true,
                  +)
                  Initial F(x): 7.2208e+03 
                  +# 10000    F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04
                  +# 20000    F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08
                  +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                  +
                  +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                  +After 26549 iterations
                  +
                  +## Parameters
                  +* sub solver state:
                  +    | # Solver state for `Manopt.jl`s Gradient Descent
                  +    | After 2000 iterations
                  +    | 
                  +    | ## Parameters
                  +    | * retraction method: ExponentialRetraction()
                  +    | 
                  +    | ## Stepsize
                  +    | ArmijoLineseach() with keyword parameters
                  +    |   * initial_stepsize    = 1.0
                  +    |   * retraction_method   = ExponentialRetraction()
                  +    |   * contraction_factor  = 0.95
                  +    |   * sufficient_decrease = 0.1
                  +    | 
                  +    | ## Stopping Criterion
                  +    | Stop When _one_ of the following are fulfilled:
                  +    |     Max Iteration 2000:   reached
                  +    |     |grad f| < 1.0e-16: not reached
                  +    | Overall: reached
                  +    | This indicates convergence: No
                  +
                  +## Stopping Criterion
                  +Stop When _one_ of the following are fulfilled:
                  +    Max Iteration 100000000:    not reached
                  +    |Δp| < 1.0e-16: reached
                  +Overall: reached
                  +This indicates convergence: Yes
                  +
                  +## Debug
                  +    :Stop = :Stop
                  +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "
                  +", 10000]
                  +
                  +## Record
                  +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                  The Riemannian Difference of Convex

                  We first have to again defined the gradients with respect to the new metric

                  function grad_h!(M, X, p; a=100, b=1)
                  +    ∇h!(M, X, p; a=a, b=b)
                  +    riemannian_gradient!(M, X, p, X)
                  +    return X
                  +end
                  +function grad_h(M, p; a=100, b=1)
                  +    X = zero(p)
                  +    grad_h!(M, X, p; a=a, b=b)
                  +    return X
                  +end
                  +function grad_g!(M, X, p; a=100, b=1)
                  +    ∇g!(M, X, p; a=a,b=b)
                  +    riemannian_gradient!(M, X, p, X)
                  +    return X
                  +end
                  +function grad_g(M, p; a=100, b=1)
                  +    X = zero(p)
                  +    grad_g!(M, X, p; a=a, b=b)
                  +    return X
                  +end

                  While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For $X \in \partial h(p^{(k)})$ the sunproblem top determine $p^{(k+1)}$ reads

                  \[\operatorname*{argmin}_{p\in\mathcal M} g(p) - \langle X, \log_{p^{(k)}}p\rangle\]

                  for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with $X = \operatorname{grad} h(p^{(k)})$ that

                  \[\phi(p) = g(p) - \langle X, \log_{p^{(k)}}p\rangle += a\bigl( p_{1}^2-p_{2}\bigr)^2 + + 2\bigl(p_{1}-b\bigr)^2 - 2(p^{(k)}_1-b)p_1 + 2(p^{(k)}_1-b)p^{(k)}_1,\]

                  its Euclidean gradient reads

                  \[\operatorname{grad}\phi(p) = + \nabla \varphi(p) + = \begin{pmatrix} + 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^{(k)}_1-b)\\ + -2a(p_1^2-p_2) + \end{pmatrix}\]

                  where we can again employ the gradient conversion from before to obtain the Riemannian gradient.

                  mutable struct SubGrad{P,T,V}
                  +    pk::P
                  +    Xk::T
                  +    a::V
                  +    b::V
                  +end
                  +function (ϕ::SubGrad)(M, p)
                  +    X = zero_vector(M, p)
                  +    ϕ(M, X, p)
                  +    return X
                  +end
                  +function (ϕ::SubGrad)(M, X, p)
                  +    X .= [
                  +        4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),
                  +        -2 * ϕ.a * (p[1]^2 - p[2]),
                  +    ]
                  +    riemannian_gradient!(M, X, p, X) # convert
                  +    return X
                  +end

                  And in orer to update the subsolvers gradient correctly, we have to overwrite

                  set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)
                  +set_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)

                  And we again introduce for ease of use

                  docR_g(M, p) = g(M, p; a=a, b=b)
                  +docR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)
                  +docR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)
                  +docR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)
                  +function docR_grad_f!(M, X, p)
                  +    Y = zero_vector(M, p)
                  +    docR_grad_g!(M, X, p)
                  +    docR_grad_h!(M, Y, p)
                  +    X .-= Y
                  +    return X
                  +end
                  +docR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)

                  Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.

                  R_doc_state = difference_of_convex_algorithm(
                  +    M_rb, docR_f, docR_g, docR_grad_h!, p0;
                  +    gradient=docR_grad_f!,
                  +    grad_g = docR_grad_g!,
                  +    debug=[debug_vec..., 10^6],
                  +    evaluation=InplaceEvaluation(),
                  +    record=[:Iteration, :Cost],
                  +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                  +    sub_grad=docR_sub_grad,
                  +    sub_hess = nothing, # Use gradient descent
                  +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                  +    return_state=true,
                  +)
                  Initial F(x): 7.2208e+03 
                  +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                  +
                  +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                  +After 1235 iterations
                  +
                  +## Parameters
                  +* sub solver state:
                  +    | # Solver state for `Manopt.jl`s Gradient Descent
                  +    | After 2000 iterations
                  +    | 
                  +    | ## Parameters
                  +    | * retraction method: ExponentialRetraction()
                  +    | 
                  +    | ## Stepsize
                  +    | ArmijoLineseach() with keyword parameters
                  +    |   * initial_stepsize    = 1.0
                  +    |   * retraction_method   = ExponentialRetraction()
                  +    |   * contraction_factor  = 0.95
                  +    |   * sufficient_decrease = 0.1
                  +    | 
                  +    | ## Stopping Criterion
                  +    | Stop When _one_ of the following are fulfilled:
                  +    |     Max Iteration 2000:   reached
                  +    |     |grad f| < 1.0e-16: not reached
                  +    | Overall: reached
                  +    | This indicates convergence: No
                  +
                  +## Stopping Criterion
                  +Stop When _one_ of the following are fulfilled:
                  +    Max Iteration 100000000:    not reached
                  +    |Δp| < 1.0e-16: reached
                  +Overall: reached
                  +This indicates convergence: Yes
                  +
                  +## Debug
                  +    :Stop = :Stop
                  +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "
                  +", 1000000]
                  +
                  +## Record
                  +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                  Comparison in Iterations

                  fig = plot(;
                  +    legend=:topright,
                  +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x)$ (log. scale)",
                  +    yaxis=:log,
                  +    ylims=(1e-16, 5*1e5),
                  +    xaxis=:log,
                  +    xlims=(1,10^8),
                  +)
                  +scatter!(fig, [1,], [f(M,p0),], label=raw"$f(p_0)$", markercolor=grey)
                  +egi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries
                  +egc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries
                  +plot!(fig, egi, egc, color=teal, label="Euclidean GD")
                  +#
                  +rgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries
                  +rgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries
                  +plot!(fig, rgi, rgc, color=indigo, label="Riemannian GD")
                  +#
                  +edi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries
                  +edc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries
                  +plot!(fig, edi, edc, color=sand, label="Euclidean DoC")
                  +#
                  +rdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries
                  +rdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries
                  +plot!(fig, rdi, rdc, color=green, label="Riemannian DoC")

                  And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.

                  Literature

                  Bergmann, R., Ferreira, O. P., Santos, E. M., et al. (2023) The difference of convex algorithm on Hadamard manifolds. arXiv:2112.05250. arXiv. Available at: http://arxiv.org/abs/2112.05250.

                  diff --git a/v0.1.2/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg b/v0.1.2/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..00187f1 --- /dev/null +++ b/v0.1.2/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.2/examples/Riemannian-mean/index.html b/v0.1.2/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..8f2c1f0 --- /dev/null +++ b/v0.1.2/examples/Riemannian-mean/index.html @@ -0,0 +1,33 @@ + +Riemannian Mean · ManoptExamples.jl

                  The Riemannian Center of Mass (mean)

                  Ronny Bergmann 2023-07-02

                  Preliminary Notes

                  Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

                  For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.

                  The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

                  There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

                  For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

                  using Pkg;
                  +cd(@__DIR__)
                  +Pkg.activate("."); # use the example environment,

                  Loading packages and defining data

                  Loading the necessary packages and defining a data set on a manifold

                  using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
                  +Random.seed!(42)
                  +M = Sphere(2)
                  +n = 100
                  +σ = π / 8
                  +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
                  +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

                  Variant 1: Using the functions

                  We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.

                  f = ManoptExamples.RiemannianMeanCost(data)
                  +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

                  Then we can for example directly call a gradient descent as

                  x1 = gradient_descent(M, f, grad_f, first(data))
                  3-element Vector{Float64}:
                  + 0.6868392794750908
                  + 0.00653160068349042
                  + 0.7267799820871861

                  Variant 2: Using the objective

                  A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

                  rmo = ManoptExamples.Riemannian_mean_objective(
                  +    M, data,
                  +    evaluation=InplaceEvaluation(),
                  +)

                  Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

                  rmp = DefaultManoptProblem(M, rmo)

                  This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

                  s1 = GradientDescentState(M, copy(M, first(data)))
                  +solve!(rmp, s1)
                  +x2 = get_solver_result(s1)
                  3-element Vector{Float64}:
                  + 0.6868392794750908
                  + 0.00653160068349042
                  + 0.7267799820871861

                  but we can easily use a conjugate gradient instead

                  s2 = ConjugateGradientDescentState(
                  +    M,
                  +    copy(M, first(data)),
                  +    StopAfterIteration(100),
                  +    ArmijoLinesearch(M),
                  +    FletcherReevesCoefficient(),
                  +)
                  +solve!(rmp, s2)
                  +x3 = get_solver_result(s2)
                  3-element Vector{Float64}:
                  + 0.6868393613136017
                  + 0.006531541407458413
                  + 0.7267799052788726
                  diff --git a/v0.1.2/examples/Robust-PCA/index.html b/v0.1.2/examples/Robust-PCA/index.html new file mode 100644 index 0000000..f538d4c --- /dev/null +++ b/v0.1.2/examples/Robust-PCA/index.html @@ -0,0 +1,64 @@ + +Robust PCA · ManoptExamples.jl

                  The Robust PCA computed on the Grassmann manifold

                  Ronny BergmannLaura Weigl 2023-07-02

                  For this example we first load the necessary packages.

                  using Pkg;
                  +cd(@__DIR__)
                  +Pkg.activate("."); # use the example environment,
                  using LinearAlgebra, Random, Statistics
                  +using Manifolds, Manopt, ManoptExamples
                  +using Plots
                  +Random.seed!(42)

                  Computing a Robust PCA

                  For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

                  We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

                  \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

                  The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

                  \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

                  where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

                  The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

                  First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

                  n = 40
                  +d = 2
                  +outliers = 15
                  +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
                  +# Outliers:
                  +permute = shuffle(1:size(data, 2))'
                  +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
                  +# We are looking for a line here so we set
                  +m = 1

                  We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

                  M = Grassmann(d,m);

                  For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

                  Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

                  Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

                  The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

                  We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

                  ε = 1.0
                  +iterations = 6
                  +reduction = 0.5
                  +U, S, V = svd(data);
                  +p0 = U[:, 1:m]
                  2×1 Matrix{Float64}:
                  + -0.7494248652139397
                  +  0.6620893983436593

                  Let’s generate the cost and gradient we aim to use here

                  f = ManoptExamples.RobustPCACost(M, data, ε)
                  +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
                  ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

                  and check the initial cost

                  f(M, p0)
                  9.430690947905521

                  Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

                  q = copy(M, p0)
                  +εi = ε
                  +for i in 1:iterations
                  +    f.ε = εi
                  +    grad_f.ε = εi
                  +    global q = trust_regions(
                  +        M,
                  +        f,
                  +        grad_f,
                  +        ApproxHessianFiniteDifference(
                  +            M, q, f;
                  +            vector_transport_method=ProjectionTransport(),
                  +            retraction_method=PolarRetraction(),
                  +        ),
                  +        q;
                  +        (project!)=project!,
                  +    )
                  +    global εi *= reduction
                  +end

                  When finally setting ε we can investigate the final cost

                  f.ε = 0.0
                  +f(M, q)
                  9.412973804873698

                  Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

                  fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
                  +plot!(
                  +    fig,
                  +    q[1] * [-1, 1] * 100,
                  +    q[2] * [-1, 1] * 100;
                  +    linecolor=:red,
                  +    linewidth=2,
                  +    label="Robust PCA",
                  +);
                  +plot!(
                  +    fig,
                  +    p0[1] * [-1, 1] * 100,
                  +    p0[2] * [-1, 1] * 100;
                  +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
                  +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
                  +    linewidth=2,
                  +    linecolor=:black,
                  +    label="Standard SVD",
                  +)

                  Figure 1: The result of the robust PCA vs. SVD

                  diff --git a/v0.1.2/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.2/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..489ab20 --- /dev/null +++ b/v0.1.2/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.2/examples/Rosenbrock/index.html b/v0.1.2/examples/Rosenbrock/index.html new file mode 100644 index 0000000..186625d --- /dev/null +++ b/v0.1.2/examples/Rosenbrock/index.html @@ -0,0 +1,57 @@ + +Rosenbrock · ManoptExamples.jl

                  The Rosenbrock Function

                  Ronny Bergmann 2023-01-03

                  After loading the necessary packages

                  using Pkg;
                  +cd(@__DIR__)
                  +Pkg.activate("."); # use the example environment,
                  using Manifolds, Manopt, ManoptExamples
                  +using Plots

                  We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).

                  a = 100.0
                  +b = 1.0
                  +p0 = [1/10, 2/10]

                  which is defined on $\mathbb R^2$, so we need

                  M = ℝ^2
                  Euclidean(2; field = ℝ)

                  and can then generate both the cost and the gradient

                  f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                  +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
                  ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

                  For comparison, we look at the initial cost

                  f(M, p0)
                  4.42

                  And to illustrate, we run two small solvers with their default settings as a comparison.

                  Gradient Descent

                  We start with the gradient descent solver.

                  Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

                  gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
                  # Solver state for `Manopt.jl`s Gradient Descent
                  +After 200 iterations
                  +
                  +## Parameters
                  +* retraction method: ExponentialRetraction()
                  +
                  +## Stepsize
                  +ArmijoLineseach() with keyword parameters
                  +  * initial_stepsize    = 1.0
                  +  * retraction_method   = ExponentialRetraction()
                  +  * contraction_factor  = 0.95
                  +  * sufficient_decrease = 0.1
                  +
                  +## Stopping Criterion
                  +Stop When _one_ of the following are fulfilled:
                  +    Max Iteration 200:  reached
                  +    |grad f| < 1.0e-9: not reached
                  +Overall: reached
                  +This indicates convergence: No
                  +
                  +## Record
                  +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                  From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

                  gd_x = get_record(gd_state, :Iteration, :Iteration)
                  +gd_y =  get_record(gd_state, :Iteration, :Cost)
                  +f(M, get_solver_result(gd_state))
                  0.10562873187751265

                  Quasi Newton

                  We can improve this using the quasi Newton algorithm

                  qn_state = quasi_Newton(M, f, grad_f, p0;
                  +    record = [:Iteration, :Cost], return_state=true
                  +)
                  # Solver state for `Manopt.jl`s Quasi Newton Method
                  +After 44 iterations
                  +
                  +## Parameters
                  +* direction update:        limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.
                  +* retraction method:       ExponentialRetraction()
                  +* vector trnasport method: ParallelTransport()
                  +
                  +## Stepsize
                  +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
                  +  * retraction_method = ExponentialRetraction()
                  +  * vector_transport_method = ParallelTransport()
                  +
                  +## Stopping Criterion
                  +Stop When _one_ of the following are fulfilled:
                  +    Max Iteration 1000: not reached
                  +    |grad f| < 1.0e-6: reached
                  +Overall: reached
                  +This indicates convergence: Yes
                  +
                  +## Record
                  +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                  And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

                  qn_x = get_record(qn_state, :Iteration, :Iteration)
                  +qn_y =  get_record(qn_state, :Iteration, :Cost)
                  +f(M, get_solver_result(qn_state))
                  2.359559352025148e-14

                  and see that the final value is close to the one of the minimizer

                  f(M, ManoptExamples.minimizer(f))
                  0.0

                  which we also see if we plot the recorded cost.

                  fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
                  +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

                  Figure 1: The result of the robust PCA vs. SVD

                  diff --git a/v0.1.2/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.2/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..3498e71 --- /dev/null +++ b/v0.1.2/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.2/examples/index.html b/v0.1.2/examples/index.html new file mode 100644 index 0000000..9e42add --- /dev/null +++ b/v0.1.2/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

                  List of Examples

                  NameprovidesDocumentation
                  A Benchmark for Difference of Convexcontains a few simple functions
                  Solving Rosenbrock with Difference of ConvexDoC split of Rosenbrockuses a Rosenbrock based metric 📚
                  Difference of Convex vs. Frank-Wolfeclosed-form sub solver
                  Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
                  Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
                  Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚

                  Symbols:

                  • A Allocating variant
                  • I In-place variant
                  • 📚 link to documented functions in the documentation
                  diff --git a/v0.1.2/index.html b/v0.1.2/index.html new file mode 100644 index 0000000..aea2b44 --- /dev/null +++ b/v0.1.2/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

                  Welcome to ManoptExample.jl

                  This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

                  Each example usually consists of

                  • a cost function and additional objects, like the gradient or proximal maps, see objectives
                  • an example explaining how to use these, see examples

                  Helping functions that are used in one or more examples can be found in the section of functions in the menu.

                  diff --git a/v0.1.2/objectives/index.html b/v0.1.2/objectives/index.html new file mode 100644 index 0000000..75f229b --- /dev/null +++ b/v0.1.2/objectives/index.html @@ -0,0 +1,38 @@ + +Objectives · ManoptExamples.jl

                  List of Objectives defined for the Examples

                  Riemannian Mean

                  See the Riemannian mean example to see these in use.

                  ManoptExamples.RiemannianMeanCostType
                  RiemannianMeanCost{P}

                  A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                  For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                  \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

                  where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

                  Constructor

                  RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

                  Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

                  See also

                  RiemannianMeanGradient!!, Riemannian_mean_objective

                  source
                  ManoptExamples.RiemannianMeanGradient!!Type
                  RiemannianMeanGradient!!{P} where P

                  A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                  For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                  \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

                  where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

                  This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

                  Constructors

                  RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

                  Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

                  RiemannianMeanGradient!!(
                  +    M::AbstractManifold,
                  +    data::AbstractVector{P};
                  +    initial_vector::T=zero_vector(M, first(data)),
                  +) where {P,T}

                  Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

                  See also

                  RiemannianMeanCost, Riemannian_mean_objective

                  source
                  ManoptExamples.Riemannian_mean_objectiveMethod
                  Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
                  +Riemannian_mean_objective(M, data;
                  +initial_vector=zero_vector(M, first(data)),
                  +evaluation=AllocatingEvaluton()
                  +)

                  Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

                  See also

                  RiemannianMeanCost, RiemannianMeanGradient!!

                  Note

                  The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

                  source

                  Robust PCA

                  See the Robust PCA example to see these in use.

                  ManoptExamples.RobustPCACostType
                  RobustPCACost{D,F}

                  A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

                  \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

                  This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

                  \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

                  Note that this is a mutable struct so you can adapt the $ε$ later on.

                  Constructor

                  RobustPCACost(data::AbstractMatrix, ε=1.0)
                  +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

                  Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

                  source
                  ManoptExamples.RobustPCAGrad!!Type
                  RobustPCAGrad!!{D,F}

                  A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

                  Note that this is a mutable struct so you can adapt the $ε$ later on.

                  Constructor

                  RobustPCAGrad!!(data, ε=1.0)
                  +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

                  Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

                  source
                  ManoptExamples.robust_PCA_objectiveFunction
                  robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
                  +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

                  Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

                  See also

                  RobustPCACost, RobustPCAGrad!!

                  Note

                  Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.

                  source

                  Rosenbrock Function

                  See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.

                  ManoptExamples.RosenbrockCostType
                  RosenbrockCost

                  Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                  \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

                  which means that for the 2D case, the manifold $\mathcal M$ is ignored.

                  See also 📖 Rosenbrock (with slightly different parameter naming).

                  Constructor

                  f = Rosenbrock(a,b)

                  generates the struct/function of the Rosenbrock cost.

                  source
                  ManoptExamples.RosenbrockGradient!!Type
                  RosenbrockGradient

                  Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                  \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

                  i.e. also here the manifold is ignored.

                  Constructor

                  RosenbrockGradient(a,b)

                  Functors

                  grad_f!!(M,p)
                  +grad_f!!(M, X, p)

                  evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

                  source
                  ManoptExamples.RosenbrockMetricType
                  RosenbrockMetric <: AbstractMetric

                  A metric related to the Rosenbrock problem, where the metric at a point $p∈\mathbb R^2$ is given by

                  \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_{1}^2 & -2p_{1} \\ + -2p_{1} & 1 +\end{pmatrix},\]

                  where the $\mathrm{Rb}$ stands for Rosenbrock

                  source
                  Base.expMethod
                  q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)
                  +exp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)

                  Compute the exponential map with respect to the RosenbrockMetric.

                  \[ q = \begin{pmatrix} p_1 + X_1 \\ p_2+X_2+X_1^2\end{pmatrix}\]

                  source
                  Base.logMethod
                  X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)
                  +log!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)

                  Compute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any $j ∈ \{1,…,m\}$

                  \[X = \begin{pmatrix} + q_1 - p_1 \\ + q_2 - p_2 + (q_1 - p_1)^2 +\end{pmatrix}\]

                  source
                  Manifolds.inverse_local_metricMethod
                  inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                  Return the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                  \[G^{-1}_p = +\begin{pmatrix} + 1 & 2p_1\\ + 2p_1 & 1+4p_1^2 \\ +\end{pmatrix}.\]

                  source
                  Manifolds.local_metricMethod
                  local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                  Return the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                  \[G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix}\]

                  source
                  ManifoldsBase.change_representerMethod
                  Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)
                  +change_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)

                  Given the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.

                  this function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.

                  source
                  ManifoldsBase.innerMethod
                  inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)

                  Compute the inner product on $\mathbb R^2$ with respect to the RosenbrockMetric, i.e. for $X,Y \in T_p\mathcal M$ we have

                  \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1\\ + -2p_1 & 1 +\end{pmatrix},\]

                  source
                  diff --git a/v0.1.2/search/index.html b/v0.1.2/search/index.html new file mode 100644 index 0000000..591ec4e --- /dev/null +++ b/v0.1.2/search/index.html @@ -0,0 +1,2 @@ + +Search · ManoptExamples.jl

                  Loading search...

                    diff --git a/v0.1.2/search_index.js b/v0.1.2/search_index.js new file mode 100644 index 0000000..68ccdd7 --- /dev/null +++ b/v0.1.2/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Difference-of-Convex-Frank-Wolfe/#A-comparison-of-the-Difference-of-Convex-and-Frank-Wolfe-Algorithm","page":"Frank Wolfe comparison","title":"A comparison of the Difference of Convex and Frank Wolfe Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Ronny Bergmann 2023-11-06","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Introduction","page":"Frank Wolfe comparison","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"In this example we compare the Difference of Convex Algprithm (DCA) (Bergmann et al., 2023) with the Frank-Wolfe Algorithm, which was introduced in (Weber and Sra, 2022). This example reproduces the results from (Bergmann et al., 2023), Section 7.3.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing ManifoldsBase, Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices mathcal P(n) with the affine invariant metric. Let q_1ldotsq_m in mathcal P(n) be a set of points and mu_1ldotsmu_m be a set of weights, such that they sum to one. We consider then","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmax_pinmathcal C h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"h(p) =\nsum_j=1^m mu_j d^2(pq_i)\nquad text where \nd^2(pq_i) = operatornametrbigl(\n log^2(p^-frac12q_jp^-frac12)\nbig)\nqquadtextandqquad\nmathcal C = pin mathcal M bar Lpreceq p preceq bar U ","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"for a lower bound L and an upper bound U for the matrices in the positive definite sense A preceq B Leftrightarrow (B-A) is positive semi-definite","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"When every one of the weights mu_1 ldots mu_m are equal, this function h is known as the of the set q_1 dots q_m.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And for our example we set","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Random.seed!(42)\nn = 20\nm = 100\nM = SymmetricPositiveDefinite(n)\nq = [rand(M) for _ in 1:m];\nw = rand(m)\nw ./=sum(w)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use as lower and upper bound the arithmetic and geometric mean L and U, respectively.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )\nU = sum( wi * qi for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p0 = (L+U)/2","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can check that it is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Common-Functions","page":"Frank Wolfe comparison","title":"Common Functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Given p in mathcal M, X in T_pmathcal M on the symmetric positive definite matrices M, this method computes the closed form solution to","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_qin mathcal C langle X log_p qrangle\n = operatorname*argmin_qin mathcal C operatornametr(Slog(YqY))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"where mathcal C = q L preceq q preceq U , S = p^-12Xp^-12, and Y=p^-12.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The solution is given by Z=X^-1Qbigl( P^mathrmT-operatornamesgn(D)_+P+hatLbigr)Q^mathrmTX^-1,@ where S=QDQ^mathrmT is a diagonalization of S, hatU-hatL=P^mathrmTP with hatL=Q^mathrmTXLXQ and hatU=Q^mathrmTXUXQ, where -mboxsgn(D)_+ is the diagonal matrix","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatornamediagbigl(\n -operatornamesgn(d_11)_+ ldots -operatornamesgn(d_nn)_+\nbigr)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and D=(d_ij).","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@doc raw\"\"\"\n closed_form_solution!(M, q, L, U, p X)\n\nCompute the closeed form solution of the constraint sub problem in place of ``q``.\n\"\"\"\nfunction closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)\n # extract p^1/2 and p^{-1/2}\n (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)\n # Compute D & Q\n e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk = QDQ'\n D = Diagonal(1.0 .* (e2.values .< 0))\n Q = e2.vectors\n #println(p)\n Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q\n Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q\n P = cholesky(Hermitian(Uprime - Lprime))\n z = P.U' * D * P.U + Lprime\n copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-Difference-of-Convex-Formulation","page":"Frank Wolfe comparison","title":"The Difference of Convex Formulation","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use g(p) = iota_mathcal C(p) as the indicator funtion of the set mathcal C. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function is_pos_def(p; atol=5e-13)\n e = eigen(Symmetric(p))\n return all((e.values .+ atol) .> 0)\nend\nfunction g(p, L, U)\n return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf\nend\nh(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"So we can first check that p0 is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"g(p0,L,U) == 0.0","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"true","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Now setting","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We look for a maximum of h, where g is minimal, i.e. g(p) is zero or in other words p in mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The gradient of h can also be implemented in closed form as","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))\nfunction grad_h!(M, X, p, w, q)\n Y = copy(M, p, X)\n zero_vector!(M, X, p)\n for (wi, qi) in zip(w,q)\n log!(M, Y, p, qi)\n Y .*= - 2.0*wi\n X .+= Y\n end\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can further define the cost, which will just be +infty outside of mathcal C. We define","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_dc(M, p) = g(p, L, U) - h(M, p, w, q)\ngrad_h!(M, X, p) = grad_h!(M, X, p, w, q)\nfunction grad_f_dc!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Here we can omit the gradient of g in the definition of operatornamegrad f, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As the last step, we can provide the closed form solver for the DC sub problem given at iteration k by","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pin mathcal C\n biglangle -operatornamegrad h(p^(k)) exp^-1_p^(k)pbigrangle","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Which we con compute","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution!(M, q, p, X)\n closed_form_solution!(M, q, L, U, p, -X)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For safety, we might want to avoid ending up at the boundary of mathcal C. That is we reduce the distance we walk towards the solution q a bit.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution_safe!(M, q, p, X)\n p_last = copy(M,p) # since p=q might be in place\n closed_form_solution!(M, q, L, U, p, -X)\n q_orig = copy(M,q) # since we do the following in place of q\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n s = 1.0\n d = distance(M, p_last, q_orig);\n # if we are close to zero, we reduce faster.\n α = d < 1/(n^2) ? 0.66 : 0.9995;\n i=0\n while (a < 0) || (b < 0)\n s *= α\n shortest_geodesic!(M, q, p_last, q_orig, s)\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n #println(\"$i a: $a, b = $b with s=$s\")\n i=i+1\n if (i>100) # safety fallback\n #@warn \" $i steps where not enough $s ($α)\\n$a $b\\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs\"\n qe = eigen(q)\n if a < 0\n qe.values .+= min(1e-8, n*abs(min(a,b)))\n else\n qe.values .-= min(1e-8, n*abs(min(a,b)))\n end\n q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n return q\n end\n end\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-DoC-solver-run","page":"Frank Wolfe comparison","title":"The DoC solver run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s compare both methods when they have the same stopping criteria","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;\n gradient=grad_f_dc!,\n sub_problem=dc_sub_solution_safe!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(300) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 30, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(p): -0.77661458292831\n# 30 F(p): -0.78442445025558 |Δp|: 0.05499863340233 |grad f(p)|: 0.17698758 |Δgrad f(p)|: 0.17568455\nAt iteration 39 the change of the gradient (1.5841755142063383e-13) was less than 1.0e-9.\n 18.917838 seconds (15.81 M allocations: 1.717 GiB, 4.59% gc time, 83.49% compilation time)\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 39 iterations\n\n## Parameters\n* sub solver state:\n | InplaceEvaluation()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 300: not reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\n\", 30]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s extract the final point and look at its cost","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_dc = get_solver_result(state1_dc);\nf_dc(M, p1_dc)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844245126697607","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.794825832759285e-13, 0.06692017412921099)\n (7.230668033332052e-6, 0.06701531165157007)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For the statistics we extract the recordings from the state","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Define-the-Frank-Wolfe-functions","page":"Frank Wolfe comparison","title":"Define the Frank-Wolfe functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For Frank wolfe, the cost is just defined as -h(p) but the minimisation is constraint to mathcal C, which is enfored by the oracle.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_fw(M, p) = -h(M, p, w, q)\nfunction grad_f_fw!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend\noracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-FW-Solver-Run","page":"Frank Wolfe comparison","title":"The FW Solver Run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Similarly we can run the Frank-Wolfe algorithm with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;\n sub_problem=oracle_fw!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(10^4) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), :Cost, (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 2*10^3, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(x): -0.776615\n# 2000 F(x): -0.784420 |Δp|: 0.04611942377531 |grad f(p)|: 0.17693408 |Δgrad f(p)|: 0.17555618\n# 4000 F(x): -0.784421 |Δp|: 0.00372201631969 |grad f(p)|: 0.17694619 |Δgrad f(p)|: 0.00749427\n# 6000 F(x): -0.784422 |Δp|: 0.00205683506768 |grad f(p)|: 0.17695204 |Δgrad f(p)|: 0.00414088\n# 8000 F(x): -0.784422 |Δp|: 0.00140675676249 |grad f(p)|: 0.17695565 |Δgrad f(p)|: 0.00283200\n# 10000 F(x): -0.784422 |Δp|: 0.00106177438594 |grad f(p)|: 0.17695815 |Δgrad f(p)|: 0.00213746\nThe algorithm reached its maximal number of iterations (10000).\n306.349726 seconds (55.92 M allocations: 93.626 GiB, 3.79% gc time, 0.36% compilation time)\n\n# Solver state for `Manopt.jl`s Frank Wolfe Method\nAfter 10000 iterations\n\n## Parameters\n* inverse retraction method: LogarithmicInverseRetraction()\n* retraction method: ExponentialRetraction()\n* sub solver state:\n | InplaceEvaluation()\n\n## Stepsize\nDecreasingStepsize(; length=2.0, factor=1.0, subtrahend=0.0, shift=2)\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 10000: reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\n\", 2000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we take a look at this result as well","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_fw = get_solver_result(state1_fw);\nf_dc(M, p1_fw)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844220281765067","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And its feasibility","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.914485568254976e-10, 0.06659173821656042)\n (3.245654983246501e-5, 0.06713970236151023)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Statistics","page":"Frank Wolfe comparison","title":"Statistics","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We extract the recorded values","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"# DoC\niter1_dc = get_record(state1_dc, :Iteration, :Iteration)\npk_dc = get_record(state1_dc,:Iteration,:Iterate)\ncosts1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))\ndc_min = minimum(costs1_dc)\n# FW\niter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]\npk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]\ncosts1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x_k)-f^*$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-8, 10^-2),\n xaxis=:log,\n xlims=(1,10^4),\n)\nplot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label=\"Difference of Convex\")\nplot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label=\"Frank-Wolfe\")","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Literature","page":"Frank Wolfe comparison","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Bergmann, R., Ferreira, O. P., Santos, E. M., et al. (2023) The difference of convex algorithm on Hadamard manifolds. arXiv:2112.05250. arXiv. Available at: http://arxiv.org/abs/2112.05250.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Weber, M. and Sra, S. (2022) Riemannian optimization via frank-wolfe methods. Mathematical Programming. Springer Science and Business Media LLC. DOI: 10.1007/s10107-022-01840-5.","category":"page"},{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 2023-07-02","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794750908\n 0.00653160068349042\n 0.7267799820871861","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794750908\n 0.00653160068349042\n 0.7267799820871861","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393613136017\n 0.006531541407458413\n 0.7267799052788726","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/ManoptExamples.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-of-the-Difference-of-Convex-Algorithms","page":"A Benchmark","title":"Benchmark of the Difference of Convex Algorithms","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Introduction","page":"A Benchmark","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"In this Benchmark we compare the Difference of Convex Algprithm (DCA) (Bergmann et al., 2023) and the Difference of Convex Proximal Point Algorithm (DCPPA) (Souza and Oliveira, 2015) which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from (Bergmann et al., 2023), Section 7.1.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where ghcolon mathcal M to mathbb R are geodesically convex function on the Riemannian manifold mathcal M.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#The-DC-Problem","page":"A Benchmark","title":"The DC Problem","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We start with defining the two convex functions gh and their gradients as well as the DC problem f and its gradient for the problem","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":" operatorname*argmin_pinmathcal M bigl( logbigr(det(p)bigr)bigr)^4 - bigl(log det(p) bigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where the critical points obtain a functional value of -frac14.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where mathcal M is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We first define the corresponding functions","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"g(M, p) = log(det(p))^4\nh(M, p) = log(det(p))^2\nf(M, p) = g(M, p) - h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and their gradients","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"grad_g(M, p) = 4 * (log(det(p)))^3 * p\ngrad_h(M, p) = 2 * log(det(p)) * p\ngrad_f(M, p) = grad_g(M, p) - grad_h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which we can use to verify that the gradients of g and h are correct. We use for that","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"n = 6\nM = SymmetricPositiveDefinite(n)\np0 = log(n) * Matrix{Float64}(I, n, n);\nX0 = 1 / n * Matrix{Float64}(I, n, n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"to tall both checks","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, g, grad_g, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, h, grad_h, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which both pass the test. We continue to define their inplace variants","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"function grad_g!(M, X, p)\n copyto!(M, X, p)\n X .*= 4 * (log(det(p)))^3\n return X\nend\nfunction grad_h!(M, X, p)\n copyto!(M, X, p)\n X .*= 2 * (log(det(p)))\n return X\nend\nfunction grad_f!(M, X, p)\n grad_g!(M, X, p)\n Y = copy(M, p, X)\n grad_h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And compare times for both algorithms, with a bit of debug output.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dca = difference_of_convex_algorithm(\n M,\n f,\n g,\n grad_h!,\n p0;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n (:GradientNorm, \" |grad_f(p)|: %1.9f\"),\n (:Change, \" |δp|: %1.9f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState(M, copy(M, p0)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470\n# 5 f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127\n# 10 f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103\n# 15 f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.000000003 |δp|: 0.000000011\nThe algorithm reached approximately critical point after 24 iterations; the gradient norm (3.9079528504063575e-11) is less than 1.0e-10.\n 7.392207 seconds (7.90 M allocations: 531.878 MiB, 4.32% gc time, 99.24% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The cost is","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dca)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Similarly the DCPPA performs","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dcppa = difference_of_convex_proximal_point(\n M,\n grad_h!,\n p0;\n g=g,\n grad_g=grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n \" \",\n (:GradientNorm, \"|grad_f(p)|: %1.10f\"),\n (:Change, \"|δp|: %1.10f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState(M, copy(M, p0)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470 \n# 5 f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692\n# 10 f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316\n# 15 f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968\n# 25 f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530\n# 30 f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048\n# 35 f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001\nThe algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.\n 1.791221 seconds (1.62 M allocations: 114.000 MiB, 2.17% gc time, 95.35% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dcppa)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-I:-Time-comparison","page":"A Benchmark","title":"Benchmark I: Time comparison","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()\ndcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()\nN_max=14\nN = 2:N_max","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and run a benchmark for both algorithms","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"for n in N\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I, n, n)\n bdca = @benchmark difference_of_convex_algorithm(\n $Mn,\n $f,\n $g,\n $grad_h!,\n $pn;\n grad_g=$grad_g!,\n gradient=$grad_f!,\n evaluation=InplaceEvaluation(),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dca_benchmarks[n] = bdca\n bdcppa = @benchmark difference_of_convex_proximal_point(\n $Mn,\n $grad_h!,\n $pn;\n g=$g,\n grad_g=$grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dcppa_benchmarks[n] = bdcppa\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]\ndca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]\ndcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Time (sec.)\")\nplot!(dims, dca_times; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims, dcppa_times; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-II:-Iterations-and-cost.","page":"A Benchmark","title":"Benchmark II: Iterations and cost.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"N2 = [5,10,20,40,80]\ndims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]\ndca_iterations = Dict{Int,Int}()\ndca_costs = Dict{Int,Vector{Float64}}()\ndcppa_iterations = Dict{Int,Int}()\ndcppa_costs = Dict{Int,Vector{Float64}}()","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time for n in N2\n println(n)\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I,n,n);\n @time dca_st = difference_of_convex_algorithm(\n Mn, f, g, grad_h!, pn;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation = InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state = TrustRegionsState(Mn, copy(Mn, pn)),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dca_costs[n] = get_record(dca_st, :Iteration, :Cost)\n dca_iterations[n] = length(dca_costs[n])\n @time dcppa_st = difference_of_convex_proximal_point(\n Mn, grad_h!, pn;\n g=g,\n grad_g=grad_g!,\n λ = i -> 1/(2*n),\n cost = f,\n gradient= grad_f!,\n evaluation = InplaceEvaluation(),\n stepsize = ConstantStepsize(1.0),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state = TrustRegionsState(Mn, copy(Mn, pn)),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)\n dcppa_iterations[n] = length(dcppa_costs[n])\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The iterations are like","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Iterations\")\nplot!(dims2, [values(dca_iterations)...]; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims2, [values(dcppa_iterations)...]; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And for the developtment of the cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where we can see that the DCA needs less iterations than the DCPPA.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Literature","page":"A Benchmark","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Bergmann, R., Ferreira, O. P., Santos, E. M., et al. (2023) The difference of convex algorithm on Hadamard manifolds. arXiv:2112.05250. arXiv. Available at: http://arxiv.org/abs/2112.05250.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Souza, J. C. de O. and Oliveira, P. R. (2015) A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization, 63, 797–810. Springer Science and Business Media LLC. DOI: 10.1007/s10898-015-0282-7.","category":"page"},{"location":"objectives/#List-of-Objectives-defined-for-the-Examples","page":"Objectives","title":"List of Objectives defined for the Examples","text":"","category":"section"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective-Tuple{AbstractVector}","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also 📖 Rosenbrock (with slightly different parameter naming).\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\ngrad_f!!(M,p)\ngrad_f!!(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockMetric","page":"Objectives","title":"ManoptExamples.RosenbrockMetric","text":"RosenbrockMetric <: AbstractMetric\n\nA metric related to the Rosenbrock problem, where the metric at a point pmathbb R^2 is given by\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\nwhere the mathrmRb stands for Rosenbrock\n\n\n\n\n\n","category":"type"},{"location":"objectives/#Base.exp-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Number}","page":"Objectives","title":"Base.exp","text":"q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)\nexp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)\n\nCompute the exponential map with respect to the RosenbrockMetric.\n\n q = beginpmatrix p_1 + X_1 p_2+X_2+X_1^2endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Base.log-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any}","page":"Objectives","title":"Base.log","text":"X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)\nlog!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)\n\nCompute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any j 1m\n\nX = beginpmatrix\n q_1 - p_1 \n q_2 - p_2 + (q_1 - p_1)^2\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.inverse_local_metric-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.inverse_local_metric","text":"inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG^-1_p =\nbeginpmatrix\n 1 2p_1\n 2p_1 1+4p_1^2 \nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.local_metric-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.local_metric","text":"local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.change_representer-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, ManifoldsBase.EuclideanMetric, Any, Any}","page":"Objectives","title":"ManifoldsBase.change_representer","text":"Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)\nchange_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)\n\nGiven the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.\n\nthis function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.inner-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Any}","page":"Objectives","title":"ManifoldsBase.inner","text":"inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)\n\nCompute the inner product on mathbb R^2 with respect to the RosenbrockMetric, i.e. for XY in T_pmathcal M we have\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1\n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny BergmannLaura Weigl 2023-07-02","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139397\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.430690947905521","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412973804873698","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/#List-of-Examples","page":"Overview","title":"List of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation\nA Benchmark for Difference of Convex contains a few simple functions \nSolving Rosenbrock with Difference of Convex DoC split of Rosenbrock uses a Rosenbrock based metric 📚\nDifference of Convex vs. Frank-Wolfe closed-form sub solver \nRiemannian Mean f, operatornamegradf (A/I), objective 📚\nRobust PCA f, operatornamegradf (A/I), objective 📚\nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"#Welcome-to-ManoptExample.jl","page":"Home","title":"Welcome to ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = ManoptExamples","category":"page"},{"location":"","page":"Home","title":"Home","text":"ManoptExamples.ManoptExamples","category":"page"},{"location":"#ManoptExamples.ManoptExamples","page":"Home","title":"ManoptExamples.ManoptExamples","text":"🏔️⛷️ ManoptExamples.jl – A collection of research and tutorial example problems for Manopt.jl\n\n📚 Documentation: juliamanifolds.github.io/ManoptExamples.jl\n📦 Repository: github.com/JuliaManifolds/ManoptExamples.jl\n💬 Discussions: github.com/JuliaManifolds/ManoptExamples.jl/discussions\n🎯 Issues: github.com/JuliaManifolds/ManoptExamples.jl/issues\n\n\n\n\n\n","category":"module"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Solving-Rosenbrock-with-the-Difference-of-Convex-Algorithm","page":"Rosenbrock Metric","title":"Solving Rosenbrock with the Difference of Convex Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Introduction","page":"Rosenbrock Metric","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in (Bergmann et al., 2023), Section 7.2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Both the Rosenbrock problem","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":" operatorname*argmin_xinmathbb R^2 abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where ab0 and usually b=1 and a gg b, we know the minimizer x^* = (bb^2)^mathrmT, and also the (Euclidean) gradient","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"nabla f(x) =\n beginpmatrix\n 4a(x_1^2-x_2) -2a(x_1^2-x_2)\n endpmatrix\n +\n beginpmatrix\n 2(x_1-b) 0\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Furthermore, the RosenbrockMetric can be used on mathbb R^2, that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"XY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"The Euclidean Gradient\nThe Riemannian gradient descent with respect to the RosenbrockMetric\nThe Euclidean Difference of Convex Algorithm\nThe Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Where we obtain a difference of convex problem by writing","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f(x) = abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2\n = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 - bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"g(x) = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 quadtext and quad h(x) = bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nimport Manopt: set_manopt_parameter!\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\ngreen = paul_tol[\"mutedgreen\"]\nsand = paul_tol[\"mutedsand\"]\nteal = paul_tol[\"mutedteal\"]\ngrey = paul_tol[\"mutedgrey\"]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"To emphasize the effect, we choose a quite large value of a.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"a = 2*10^5\nb = 1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and use the starting point and a direction to check gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"p0 = [0.1, 0.2]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Euclidean Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Euclidean gradient we can just use the same approach as in the Rosenbrock example","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M = ℝ^2\nf = ManoptExamples.RosenbrockCost(M; a=a, b=b)\n∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"define a common debug vector","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"debug_vec = [\n (:Iteration, \"# %-8d \"),\n (:Cost, \"F(x): %1.4e\"),\n \" \",\n (:Change, \"|δp|: %1.4e | \"),\n (:GradientNorm, \"|grad f|: %1.6e\"),\n :Stop,\n \"\\n\",\n ]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and call the gradient descent algorithm","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^7],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03\n# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04\n# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06\n# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08\n# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 53073227 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLineseach() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\n\", 10000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Riemannian Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Riemannian case, we define","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"MetricManifold(Euclidean(2; field = ℝ), ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and the gradient is now adopted to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_f!(M, X, p)\n ∇f!!(M, X, p)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_f(M, p)\n X = zero_vector(M, p)\n return grad_f!(M, X, p)\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^6],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 1000000 F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04\n# 2000000 F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 2443750 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLineseach() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Euclidean Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the convex case, we have to first introduce the two parts of the cost.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;\nf2(M, p; a=100, b=1) = (p[1] - b[1])^2;\ng(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)\nh(M, p; a=100, b=1) = f2(M, p; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and their (Euclidan) gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function ∇h!(M, X, p; a=100, b=1)\n X[1] = 2*(p[1]-b)\n X[2] = 0\n return X\nend\nfunction ∇h(M, p; a=100, b=1)\n X = zero(p)\n ∇h!(M, X, p; a=a, b=b)\n return X\nend\nfunction ∇g!(M, X, p; a=100, b=1)\n X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)\n X[2] = -2*a*(p[1]^2-p[2])\n return X\nend\nfunction ∇g(M, p; a=100, b=1)\n X = zero(p)\n ∇g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and we define for convenience","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docE_g(M, p) = g(M, p; a=a, b=b)\ndocE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)\ndocE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)\ndocE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)\nfunction docE_∇f!(M, X, p)\n Y = zero_vector(M, p)\n docE_∇g!(M, X, p)\n docE_∇h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we call the difference of convex algorithm on Eucldiean space mathbb R^2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"E_doc_state = difference_of_convex_algorithm(\n M, docE_f, docE_g, docE_∇h!, p0;\n gradient=docE_∇f!,\n grad_g = docE_∇g!,\n debug=[debug_vec..., 10^4],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_hess=nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000 F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04\n# 20000 F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 26549 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLineseach() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\n\", 10000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Riemannian Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"We first have to again defined the gradients with respect to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_h!(M, X, p; a=100, b=1)\n ∇h!(M, X, p; a=a, b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_h(M, p; a=100, b=1)\n X = zero(p)\n grad_h!(M, X, p; a=a, b=b)\n return X\nend\nfunction grad_g!(M, X, p; a=100, b=1)\n ∇g!(M, X, p; a=a,b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_g(M, p; a=100, b=1)\n X = zero(p)\n grad_g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For X in partial h(p^(k)) the sunproblem top determine p^(k+1) reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatorname*argmin_pinmathcal M g(p) - langle X log_p^(k)prangle","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with X = operatornamegrad h(p^(k)) that","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"phi(p) = g(p) - langle X log_p^(k)prangle\n= abigl( p_1^2-p_2bigr)^2\n + 2bigl(p_1-bbigr)^2 - 2(p^(k)_1-b)p_1 + 2(p^(k)_1-b)p^(k)_1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"its Euclidean gradient reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatornamegradphi(p) =\n nabla varphi(p)\n = beginpmatrix\n 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^(k)_1-b)\n -2a(p_1^2-p_2)\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where we can again employ the gradient conversion from before to obtain the Riemannian gradient.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"mutable struct SubGrad{P,T,V}\n pk::P\n Xk::T\n a::V\n b::V\nend\nfunction (ϕ::SubGrad)(M, p)\n X = zero_vector(M, p)\n ϕ(M, X, p)\n return X\nend\nfunction (ϕ::SubGrad)(M, X, p)\n X .= [\n 4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),\n -2 * ϕ.a * (p[1]^2 - p[2]),\n ]\n riemannian_gradient!(M, X, p, X) # convert\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And in orer to update the subsolvers gradient correctly, we have to overwrite","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)\nset_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we again introduce for ease of use","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docR_g(M, p) = g(M, p; a=a, b=b)\ndocR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)\ndocR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)\ndocR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)\nfunction docR_grad_f!(M, X, p)\n Y = zero_vector(M, p)\n docR_grad_g!(M, X, p)\n docR_grad_h!(M, Y, p)\n X .-= Y\n return X\nend\ndocR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_doc_state = difference_of_convex_algorithm(\n M_rb, docR_f, docR_g, docR_grad_h!, p0;\n gradient=docR_grad_f!,\n grad_g = docR_grad_g!,\n debug=[debug_vec..., 10^6],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_grad=docR_sub_grad,\n sub_hess = nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 1235 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLineseach() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Comparison-in-Iterations","page":"Rosenbrock Metric","title":"Comparison in Iterations","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x)$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-16, 5*1e5),\n xaxis=:log,\n xlims=(1,10^8),\n)\nscatter!(fig, [1,], [f(M,p0),], label=raw\"$f(p_0)$\", markercolor=grey)\negi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries\negc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries\nplot!(fig, egi, egc, color=teal, label=\"Euclidean GD\")\n#\nrgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries\nrgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries\nplot!(fig, rgi, rgc, color=indigo, label=\"Riemannian GD\")\n#\nedi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries\nedc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries\nplot!(fig, edi, edc, color=sand, label=\"Euclidean DoC\")\n#\nrdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries\nrdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries\nplot!(fig, rdi, rdc, color=green, label=\"Riemannian DoC\")","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Literature","page":"Rosenbrock Metric","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Bergmann, R., Ferreira, O. P., Santos, E. M., et al. (2023) The difference of convex algorithm on Hadamard manifolds. arXiv:2112.05250. arXiv. Available at: http://arxiv.org/abs/2112.05250.","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 2023-01-03","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field = ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLineseach() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 44 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector trnasport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |grad f| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"2.359559352025148e-14","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"}] +} diff --git a/v0.1.2/siteinfo.js b/v0.1.2/siteinfo.js new file mode 100644 index 0000000..9cdef15 --- /dev/null +++ b/v0.1.2/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.2"; diff --git a/v0.1.3/assets/documenter.js b/v0.1.3/assets/documenter.js new file mode 100644 index 0000000..4248476 --- /dev/null +++ b/v0.1.3/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +window.MathJax = { + "tex": { + "packages": [ + "base", + "ams", + "autoload" + ], + "inlineMath": [ + [ + "$", + "$" + ], + [ + "\\(", + "\\)" + ] + ], + "tags": "ams" + }, + "options": { + "ignoreHtmlClass": "tex2jax_ignore", + "processHtmlClass": "tex2jax_process" + } +} +; + +(function () { + var script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.js'; + script.async = true; + document.head.appendChild(script); +})(); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// 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() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/v0.1.3/assets/search.js b/v0.1.3/assets/search.js new file mode 100644 index 0000000..c133f74 --- /dev/null +++ b/v0.1.3/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/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'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + 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) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + searchbox.val(search_query) + } + update_search_box(); + }) +}) + +}) diff --git a/v0.1.3/assets/themes/documenter-dark.css b/v0.1.3/assets/themes/documenter-dark.css new file mode 100644 index 0000000..c94a294 --- /dev/null +++ b/v0.1.3/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable,html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .list:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .highlight:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-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 .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size: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 .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}/*! 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:.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:.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:.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:.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:.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:.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:.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:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-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 Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.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{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align: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:.75em;padding-right:.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:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:#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:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color: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:.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:.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:.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.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align: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:.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:.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:#fff}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:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:#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:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #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:.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:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:#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:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right: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 .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:15px}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-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 .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.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 .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.85em}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:15px}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius: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:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title+.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:.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:.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 .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.85em}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius: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 .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox{color:#fff;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:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.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:#fff}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.is-loading:after{font-size:.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:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:#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:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.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:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#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:.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:.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:.85em;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right: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:.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-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.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.is-loading:after{font-size:.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 .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:.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:#fff;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:rgba(0,0,0,0);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:.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:.75rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #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:.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:.4em;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align: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:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .list{background-color:#fff;border-radius:.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:.4em;border-top-right-radius:.4em}html.theme--documenter-dark .list-item:last-child{border-bottom-left-radius:.4em;border-bottom-right-radius:.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:.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:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size: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:.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:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff;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:#fff}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:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left: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:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),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:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:#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:rgba(0,0,0,0);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:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item{display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:15px;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.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:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.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:.4em .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:.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:#fff;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:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-radius:.4em 0 0 .4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-radius:0 .4em .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:.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:.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.6666666667%}.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.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.6666666667%}.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.3333333333%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.6666666667%}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.3333333333%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.3333333333%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.6666666667%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.3333333333%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.6666666667%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.3333333333%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.6666666667%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.3333333333%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.6666666667%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:#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 .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#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 .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{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:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:#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 .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 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 pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size: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:.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;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .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:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-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;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:15px;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size: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 .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2} diff --git a/v0.1.3/assets/themes/documenter-light.css b/v0.1.3/assets/themes/documenter-light.css new file mode 100644 index 0000000..9b9a14b --- /dev/null +++ b/v0.1.3/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable,.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.message:not(:last-child),.list:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.highlight:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-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}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.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}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}/*! 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:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:left}table th{color:#222}.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:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-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:#1081cb !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:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.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:#fff;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:#222;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:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:.75em;padding-right:.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:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:#363636}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;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:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#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:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#f5f5f5}.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:#f5f5f5}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5;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:#f5f5f5;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !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:#f5f5f5}.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 #f5f5f5 #f5f5f5 !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:#f5f5f5;color:#f5f5f5}.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:#f5f5f5;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:#f5f5f5;box-shadow:none;color:#f5f5f5}.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:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color: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:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color: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:.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:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius: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:.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:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:left}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-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:#f5f5f5;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:#fff}.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:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:#363636}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#f5f5f5}.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:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #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:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #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, #222 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:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#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:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#f5f5f5}.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:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right: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 .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:#363636}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#f5f5f5}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius: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:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#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:.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:.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:#f5f5f5;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}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(54,54,54,0.3)}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(54,54,54,0.3)}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(54,54,54,0.3)}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius: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}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#363636}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox{color:#6b6b6b;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:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b}.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.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:#363636}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#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:#f5f5f5;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:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right: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:.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:#6b6b6b}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.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.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right: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:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#222;max-width:100%;position:relative}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:.75rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem}.card-image{display:block;position:relative}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #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:.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:#fff;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:.5rem;padding-top:.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:#f5f5f5;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:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.list{background-color:#fff;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:#222}.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:#f5f5f5;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:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff;color:#4d4d4d}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a;color:#090909}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:#363636}.message.is-light .message-body{border-color:#f5f5f5;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:#f5f5f5}.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:#12537d}.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:#3c3108}.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:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left: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:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),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:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:0.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:#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:#f5f5f5;color:#363636}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#f5f5f5}@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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#f5f5f5}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#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:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item{display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius: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:.25rem;padding-left:.5em;padding-right:.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:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;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:#f5f5f5;border-radius:4px 4px 0 0;color:#222;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:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right: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:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right: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:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right: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:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-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:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.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.3333333333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>.column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>.column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>.column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.6666666667%}.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.3333333333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>.column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-mobile{margin-left:8.3333333333%}.column.is-2-mobile{flex:none;width:16.6666666667%}.column.is-offset-2-mobile{margin-left:16.6666666667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.3333333333%}.column.is-offset-4-mobile{margin-left:33.3333333333%}.column.is-5-mobile{flex:none;width:41.6666666667%}.column.is-offset-5-mobile{margin-left:41.6666666667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.3333333333%}.column.is-offset-7-mobile{margin-left:58.3333333333%}.column.is-8-mobile{flex:none;width:66.6666666667%}.column.is-offset-8-mobile{margin-left:66.6666666667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.3333333333%}.column.is-offset-10-mobile{margin-left:83.3333333333%}.column.is-11-mobile{flex:none;width:91.6666666667%}.column.is-offset-11-mobile{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.3333333333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.6666666667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.6666666667%}.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.3333333333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.3333333333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.6666666667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.6666666667%}.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.3333333333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.3333333333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.6666666667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.6666666667%}.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.3333333333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.3333333333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.6666666667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-touch{margin-left:8.3333333333%}.column.is-2-touch{flex:none;width:16.6666666667%}.column.is-offset-2-touch{margin-left:16.6666666667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.3333333333%}.column.is-offset-4-touch{margin-left:33.3333333333%}.column.is-5-touch{flex:none;width:41.6666666667%}.column.is-offset-5-touch{margin-left:41.6666666667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.3333333333%}.column.is-offset-7-touch{margin-left:58.3333333333%}.column.is-8-touch{flex:none;width:66.6666666667%}.column.is-offset-8-touch{margin-left:66.6666666667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.3333333333%}.column.is-offset-10-touch{margin-left:83.3333333333%}.column.is-11-touch{flex:none;width:91.6666666667%}.column.is-offset-11-touch{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-desktop{margin-left:8.3333333333%}.column.is-2-desktop{flex:none;width:16.6666666667%}.column.is-offset-2-desktop{margin-left:16.6666666667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.3333333333%}.column.is-offset-4-desktop{margin-left:33.3333333333%}.column.is-5-desktop{flex:none;width:41.6666666667%}.column.is-offset-5-desktop{margin-left:41.6666666667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.3333333333%}.column.is-offset-7-desktop{margin-left:58.3333333333%}.column.is-8-desktop{flex:none;width:66.6666666667%}.column.is-offset-8-desktop{margin-left:66.6666666667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.3333333333%}.column.is-offset-10-desktop{margin-left:83.3333333333%}.column.is-11-desktop{flex:none;width:91.6666666667%}.column.is-offset-11-desktop{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-widescreen{margin-left:8.3333333333%}.column.is-2-widescreen{flex:none;width:16.6666666667%}.column.is-offset-2-widescreen{margin-left:16.6666666667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.3333333333%}.column.is-offset-4-widescreen{margin-left:33.3333333333%}.column.is-5-widescreen{flex:none;width:41.6666666667%}.column.is-offset-5-widescreen{margin-left:41.6666666667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.3333333333%}.column.is-offset-7-widescreen{margin-left:58.3333333333%}.column.is-8-widescreen{flex:none;width:66.6666666667%}.column.is-offset-8-widescreen{margin-left:66.6666666667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.3333333333%}.column.is-offset-10-widescreen{margin-left:83.3333333333%}.column.is-11-widescreen{flex:none;width:91.6666666667%}.column.is-offset-11-widescreen{margin-left:91.6666666667%}.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.3333333333%}.column.is-offset-1-fullhd{margin-left:8.3333333333%}.column.is-2-fullhd{flex:none;width:16.6666666667%}.column.is-offset-2-fullhd{margin-left:16.6666666667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.3333333333%}.column.is-offset-4-fullhd{margin-left:33.3333333333%}.column.is-5-fullhd{flex:none;width:41.6666666667%}.column.is-offset-5-fullhd{margin-left:41.6666666667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.3333333333%}.column.is-offset-7-fullhd{margin-left:58.3333333333%}.column.is-8-fullhd{flex:none;width:66.6666666667%}.column.is-offset-8-fullhd{margin-left:66.6666666667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.3333333333%}.column.is-offset-10-fullhd{margin-left:83.3333333333%}.column.is-11-fullhd{flex:none;width:91.6666666667%}.column.is-offset-11-fullhd{margin-left:91.6666666667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.3333333333%}.tile.is-2{flex:none;width:16.6666666667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.3333333333%}.tile.is-5{flex:none;width:41.6666666667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.3333333333%}.tile.is-8{flex:none;width:66.6666666667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.3333333333%}.tile.is-11{flex:none;width:91.6666666667%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:#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:#f5f5f5}}.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:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#f5f5f5}.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:#f5f5f5}.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:#f5f5f5}@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:#f5f5f5}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#f5f5f5;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:#f5f5f5}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#f5f5f5;border-color:#f5f5f5;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,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{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:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 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}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;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:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}#documenter .docs-main header.docs-navbar .docs-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;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 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:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}#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}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{background:#F0F0F0;color:#444}.hljs-comment{color:#888888}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold} diff --git a/v0.1.3/assets/themeswap.js b/v0.1.3/assets/themeswap.js new file mode 100644 index 0000000..c58e993 --- /dev/null +++ b/v0.1.3/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/v0.1.3/assets/warner.js b/v0.1.3/assets/warner.js new file mode 100644 index 0000000..5531c88 --- /dev/null +++ b/v0.1.3/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
                    Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/v0.1.3/contributing/index.html b/v0.1.3/contributing/index.html new file mode 100644 index 0000000..6449679 --- /dev/null +++ b/v0.1.3/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

                    Contributing to Manopt.jl

                    First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

                    The following is a set of guidelines to ManoptExamples.jl.

                    Table of Contents

                    I just have a question

                    The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

                    How can I file an issue?

                    If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

                    How can I contribute?

                    Add an objective

                    The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

                    If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

                    If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

                    • cost functions are always of the form cost_ and a fitting name
                    • gradient functions are always of the the gradient_ and a fitting name, followed by an !

                    for in-place gradients and by !! if it is a struct that can provide both.

                    It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

                    Add an example

                    If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

                    Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

                    Code style

                    We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

                    We also follow a few internal conventions:

                    • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
                    • within a file the structs should come first and functions second. The only exception are constructors for the structs
                    • within both blocks an alphabetical order is preferable.
                    • The above implies that the mutating variant of a function follows the non-mutating variant.
                    • There should be no dangling = signs.
                    • Always add a newline between things of different types (struct/method/const).
                    • Always add a newline between methods for different functions (including in-place/non-mutating variants).
                    • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
                    • All import/using/include should be in the main module file.
                    • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
                    • the Quarto Markdown files are excluded from this formatting.
                    diff --git a/v0.1.3/examples/Difference-of-Convex-Benchmark/index.html b/v0.1.3/examples/Difference-of-Convex-Benchmark/index.html new file mode 100644 index 0000000..00e3460 --- /dev/null +++ b/v0.1.3/examples/Difference-of-Convex-Benchmark/index.html @@ -0,0 +1,178 @@ + +A Benchmark · ManoptExamples.jl

                    Benchmark of the Difference of Convex Algorithms

                    Ronny Bergmann 2023-06-06

                    Introduction

                    In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.

                    \[\operatorname*{arg\,min}_{p\in\mathcal M}\ \ g(p) - h(p)\]

                    where $g,h\colon \mathcal M \to \mathbb R$ are geodesically convex function on the Riemannian manifold $\mathcal M$.

                    using LinearAlgebra, Random, Statistics, BenchmarkTools
                    +using Manifolds, Manopt, ManoptExamples
                    +using NamedColors, Plots
                    +Random.seed!(42)

                    and we load a few nice colors

                    paul_tol = load_paul_tol()
                    +indigo = paul_tol["mutedindigo"]
                    +teal = paul_tol["mutedteal"]

                    The DC Problem

                    We start with defining the two convex functions $g,h$ and their gradients as well as the DC problem $f$ and its gradient for the problem

                    \[ \operatorname*{arg\,min}_{p\in\mathcal M}\ \ \bigl( \log\bigr(\det(p)\bigr)\bigr)^4 - \bigl(\log \det(p) \bigr)^2.\]

                    where the critical points obtain a functional value of $-\frac{1}{4}$.

                    where $\mathcal M$ is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.

                    We first define the corresponding functions

                    g(M, p) = log(det(p))^4
                    +h(M, p) = log(det(p))^2
                    +f(M, p) = g(M, p) - h(M, p)

                    and their gradients

                    grad_g(M, p) = 4 * (log(det(p)))^3 * p
                    +grad_h(M, p) = 2 * log(det(p)) * p
                    +grad_f(M, p) = grad_g(M, p) - grad_h(M, p)

                    which we can use to verify that the gradients of $g$ and $h$ are correct. We use for that

                    n = 6
                    +M = SymmetricPositiveDefinite(n)
                    +p0 = log(n) * Matrix{Float64}(I, n, n);
                    +X0 = 1 / n * Matrix{Float64}(I, n, n);

                    to tall both checks

                    check_gradient(M, g, grad_g, p0, X0; plot=true)

                    and

                    check_gradient(M, h, grad_h, p0, X0; plot=true)

                    which both pass the test. We continue to define their inplace variants

                    function grad_g!(M, X, p)
                    +    copyto!(M, X, p)
                    +    X .*= 4 * (log(det(p)))^3
                    +    return X
                    +end
                    +function grad_h!(M, X, p)
                    +    copyto!(M, X, p)
                    +    X .*= 2 * (log(det(p)))
                    +    return X
                    +end
                    +function grad_f!(M, X, p)
                    +    grad_g!(M, X, p)
                    +    Y = copy(M, p, X)
                    +    grad_h!(M, Y, p)
                    +    X .-= Y
                    +    return X
                    +end

                    And compare times for both algorithms, with a bit of debug output.

                    @time p_min_dca = difference_of_convex_algorithm(
                    +    M,
                    +    f,
                    +    g,
                    +    grad_h!,
                    +    p0;
                    +    grad_g=grad_g!,
                    +    gradient=grad_f!,
                    +    evaluation=InplaceEvaluation(),
                    +    debug=[
                    +        :Iteration,
                    +        (:Cost, "f(p): %1.9f"),
                    +        (:GradientNorm, " |grad_f(p)|: %1.9f"),
                    +        (:Change, " |δp|: %1.9f"),
                    +        :Stop,
                    +        5,
                    +        "\n",
                    +    ],
                    +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                    +    sub_state=TrustRegionsState(M, copy(M, p0)),
                    +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                    +);
                    Initial f(p): 137.679053470
                    +# 5     f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127
                    +# 10    f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103
                    +# 15    f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574
                    +# 20    f(p): -0.250000000 |grad_f(p)|: 0.000000003 |δp|: 0.000000011
                    +The algorithm reached approximately critical point after 24 iterations; the gradient norm (3.9079528504063575e-11) is less than 1.0e-10.
                    +  7.078460 seconds (8.15 M allocations: 560.347 MiB, 4.11% gc time, 98.71% compilation time)

                    The cost is

                    f(M, p_min_dca)
                    -0.25

                    Similarly the DCPPA performs

                    @time p_min_dcppa = difference_of_convex_proximal_point(
                    +    M,
                    +    grad_h!,
                    +    p0;
                    +    g=g,
                    +    grad_g=grad_g!,
                    +    λ=i -> 1 / (2 * n),
                    +    cost=f,
                    +    gradient=grad_f!,
                    +    debug=[
                    +        :Iteration,
                    +        (:Cost, "f(p): %1.9f"),
                    +        " ",
                    +        (:GradientNorm, "|grad_f(p)|: %1.10f"),
                    +        (:Change, "|δp|: %1.10f"),
                    +        :Stop,
                    +        5,
                    +        "\n",
                    +    ],
                    +    evaluation=InplaceEvaluation(),
                    +    stepsize=ConstantStepsize(1.0),
                    +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                    +    sub_state=TrustRegionsState(M, copy(M, p0)),
                    +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                    +);
                    Initial f(p): 137.679053470 
                    +# 5     f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692
                    +# 10    f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316
                    +# 15    f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676
                    +# 20    f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968
                    +# 25    f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530
                    +# 30    f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048
                    +# 35    f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001
                    +The algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.
                    +  1.770714 seconds (1.78 M allocations: 124.191 MiB, 2.11% gc time, 95.56% compilation time)

                    It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost

                    f(M, p_min_dcppa)
                    -0.25

                    Benchmark I: Time comparison

                    We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test

                    dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()
                    +dcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()
                    +N_max=14
                    +N = 2:N_max

                    and run a benchmark for both algorithms

                    for n in N
                    +    Mn = SymmetricPositiveDefinite(n)
                    +    pn = log(n) * Matrix{Float64}(I, n, n)
                    +    bdca = @benchmark difference_of_convex_algorithm(
                    +        $Mn,
                    +        $f,
                    +        $g,
                    +        $grad_h!,
                    +        $pn;
                    +        grad_g=$grad_g!,
                    +        gradient=$grad_f!,
                    +        evaluation=InplaceEvaluation(),
                    +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                    +        sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),
                    +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                    +    )
                    +    dca_benchmarks[n] = bdca
                    +    bdcppa = @benchmark difference_of_convex_proximal_point(
                    +        $Mn,
                    +        $grad_h!,
                    +        $pn;
                    +        g=$g,
                    +        grad_g=$grad_g!,
                    +        λ=i -> 1 / (2 * n),
                    +        cost=f,
                    +        gradient=grad_f!,
                    +        evaluation=InplaceEvaluation(),
                    +        stepsize=ConstantStepsize(1.0),
                    +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                    +        sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),
                    +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                    +    )
                    +    dcppa_benchmarks[n] = bdcppa
                    +end

                    Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds

                    dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]
                    +dca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]
                    +dcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]
                    plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Time (sec.)")
                    +plot!(dims, dca_times; label="DCA", color=indigo, linewidth=2)
                    +plot!(dims, dcppa_times; label="DCPPA", color=teal, linewidth=2)

                    Benchmark II: Iterations and cost.

                    As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.

                    N2 = [5,10,20,40,80]
                    +dims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]
                    +dca_iterations = Dict{Int,Int}()
                    +dca_costs = Dict{Int,Vector{Float64}}()
                    +dcppa_iterations = Dict{Int,Int}()
                    +dcppa_costs = Dict{Int,Vector{Float64}}()
                    @time for n in N2
                    +    println(n)
                    +    Mn = SymmetricPositiveDefinite(n)
                    +    pn = log(n) * Matrix{Float64}(I,n,n);
                    +    @time dca_st = difference_of_convex_algorithm(
                    +        Mn, f, g, grad_h!, pn;
                    +        grad_g=grad_g!,
                    +        gradient=grad_f!,
                    +        evaluation = InplaceEvaluation(),
                    +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                    +        sub_state = TrustRegionsState(Mn, copy(Mn, pn)),
                    +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                    +        record = [:Iteration, :Cost],
                    +        return_state = true,
                    +    );
                    +    dca_costs[n] = get_record(dca_st, :Iteration, :Cost)
                    +    dca_iterations[n] = length(dca_costs[n])
                    +    @time dcppa_st = difference_of_convex_proximal_point(
                    +        Mn, grad_h!, pn;
                    +        g=g,
                    +        grad_g=grad_g!,
                    +        λ = i -> 1/(2*n),
                    +        cost = f,
                    +        gradient= grad_f!,
                    +        evaluation = InplaceEvaluation(),
                    +        stepsize = ConstantStepsize(1.0),
                    +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                    +        sub_state = TrustRegionsState(Mn, copy(Mn, pn)),
                    +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                    +        record = [:Iteration, :Cost],
                    +        return_state = true,
                    +    );
                    +    dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)
                    +    dcppa_iterations[n] = length(dcppa_costs[n])
                    +end

                    The iterations are like

                    plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Iterations")
                    +plot!(dims2, [values(dca_iterations)...]; label="DCA", color=indigo, linewidth=2)
                    +plot!(dims2, [values(dcppa_iterations)...]; label="DCPPA", color=teal, linewidth=2)

                    And for the developtment of the cost

                    where we can see that the DCA needs less iterations than the DCPPA.

                    Literature

                    [BFSS23]
                    +
                    +
                    R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
                    +
                    [SO15]
                    +
                    +
                    J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                    +
                    +
                    diff --git a/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg b/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg new file mode 100644 index 0000000..82341d4 --- /dev/null +++ b/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg b/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg new file mode 100644 index 0000000..af6b8b5 --- /dev/null +++ b/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg b/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..ca784b4 --- /dev/null +++ b/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg b/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg new file mode 100644 index 0000000..daeb6ad --- /dev/null +++ b/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg b/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..73fc9eb --- /dev/null +++ b/v0.1.3/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.3/examples/Difference-of-Convex-Frank-Wolfe/index.html b/v0.1.3/examples/Difference-of-Convex-Frank-Wolfe/index.html new file mode 100644 index 0000000..475bfae --- /dev/null +++ b/v0.1.3/examples/Difference-of-Convex-Frank-Wolfe/index.html @@ -0,0 +1,223 @@ + +Frank Wolfe comparison · ManoptExamples.jl

                    A comparison of the Difference of Convex and Frank Wolfe Algorithm

                    Ronny Bergmann 2023-11-06

                    Introduction

                    In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.

                    using LinearAlgebra, Random, Statistics, BenchmarkTools
                    +using ManifoldsBase, Manifolds, Manopt, ManoptExamples
                    +using NamedColors, Plots

                    and we load a few nice colors

                    paul_tol = load_paul_tol()
                    +indigo = paul_tol["mutedindigo"]
                    +teal = paul_tol["mutedteal"]

                    We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices $\mathcal P(n)$ with the affine invariant metric. Let $q_1,\ldots,q_m \in \mathcal P(n)$ be a set of points and $\mu_1,\ldots,\mu_m$ be a set of weights, such that they sum to one. We consider then

                    \[\operatorname*{arg\,max}_{p\in\mathcal C}\ \ h(p)\]

                    with

                    \[h(p) = +\sum_{j=1}^m \mu_j d^2(p,q_i), +\quad \text{ where } +d^2(p,q_i) = \operatorname{tr}\bigl( + \log^2(p^{-\frac{1}{2}}q_jp^{-\frac{1}{2}}) +\big) +\qquad\text{and}\qquad +\mathcal C = \{ p\in {\mathcal M}\ |\ \bar L\preceq p \preceq \bar U \},\]

                    for a lower bound $L$ and an upper bound $U$ for the matrices in the positive definite sense $A \preceq B \Leftrightarrow (B-A)$ is positive semi-definite

                    When every one of the weights ${\mu}_1, \ldots {\mu}_m$ are equal, this function $h$ is known as the of the set $\{q_1, \dots, q_m\}$.

                    And for our example we set

                    Random.seed!(42)
                    +n = 20
                    +m = 100
                    +M = SymmetricPositiveDefinite(n)
                    +q = [rand(M) for _ in 1:m];
                    +w = rand(m)
                    +w ./=sum(w)

                    We use as lower and upper bound the arithmetic and geometric mean $L$ and $U$, respectively.

                    L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )
                    +U = sum( wi * qi for (wi, qi) in zip(w,q) )

                    As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use

                    p0 = (L+U)/2

                    And we can check that it is feasible

                    Common Functions

                    Given $p \in \mathcal M$, $X \in T_p\mathcal M$ on the symmetric positive definite matrices M, this method computes the closed form solution to

                    \[\operatorname*{arg\,min}_{q\in {\mathcal C}}\ \langle X, \log_p q\rangle + = \operatorname*{arg\,min}_{q\in {\mathcal C}}\ \operatorname{tr}(S\log(YqY))\]

                    where $\mathcal C = \{ q | L \preceq q \preceq U \}$, $S = p^{-1/2}Xp^{-1/2}$, and $Y=p^{-1/2}$.

                    The solution is given by $Z=X^{-1}Q\bigl( P^{\mathrm{T}}[-\operatorname{sgn}(D)]_{+}P+\hat{L}\bigr)Q^{\mathrm{T}}X^{-1}$,@ where $S=QDQ^{\mathrm{T}}$ is a diagonalization of $S$, $\hat{U}-\hat{L}=P^{\mathrm{T}}P$ with $\hat{L}=Q^{\mathrm{T}}XLXQ$ and $\hat{U}=Q^{\mathrm{T}}XUXQ$, where $[-\mbox{sgn}(D)]_{+}$ is the diagonal matrix

                    \[\operatorname{diag}\bigl( + [-\operatorname{sgn}(d_{11})]_{+}, \ldots, [-\operatorname{sgn}(d_{nn})]_{+} +\bigr)\]

                    and $D=(d_{ij})$.

                    @doc raw"""
                    +    closed_form_solution!(M, q, L, U, p X)
                    +
                    +Compute the closeed form solution of the constraint sub problem in place of ``q``.
                    +"""
                    +function closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)
                    +    # extract p^1/2 and p^{-1/2}
                    +    (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)
                    +    # Compute D & Q
                    +    e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk  = QDQ'
                    +    D = Diagonal(1.0 .* (e2.values .< 0))
                    +    Q = e2.vectors
                    +    #println(p)
                    +    Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q
                    +    Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q
                    +    P = cholesky(Hermitian(Uprime - Lprime))
                    +    z = P.U' * D * P.U + Lprime
                    +    copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)
                    +    return q
                    +end

                    The Difference of Convex Formulation

                    We use $g(p) = \iota_{\mathcal C}(p)$ as the indicator funtion of the set $\mathcal C$. We use

                    function is_pos_def(p; atol=5e-13)
                    +    e = eigen(Symmetric(p))
                    +    return all((e.values .+ atol) .> 0)
                    +end
                    +function g(p, L, U)
                    +    return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf
                    +end
                    +h(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )

                    So we can first check that p0 is feasible

                    g(p0,L,U) == 0.0
                    true

                    Now setting

                    \[\operatorname*{arg\,min}_{p\in\mathcal M}\ g(p) - h(p)\]

                    We look for a maximum of $h$, where $g$ is minimal, i.e. $g(p)$ is zero or in other words $p \in \mathcal C$.

                    The gradient of $h$ can also be implemented in closed form as

                    grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))
                    +function grad_h!(M, X, p, w, q)
                    +    Y = copy(M, p, X)
                    +    zero_vector!(M, X, p)
                    +    for (wi, qi) in zip(w,q)
                    +        log!(M, Y, p, qi)
                    +        Y .*= - 2.0*wi
                    +        X .+= Y
                    +    end
                    +    return X
                    +end

                    And we can further define the cost, which will just be $+\infty$ outside of $\mathcal C$. We define

                    f_dc(M, p) = g(p, L, U) - h(M, p, w, q)
                    +grad_h!(M, X, p) = grad_h!(M, X, p, w, q)
                    +function grad_f_dc!(M,X, p)
                    +    grad_h!(M, X, p, w, q)
                    +    X .*= -1.0
                    +    return X
                    +end

                    Here we can omit the gradient of $g$ in the definition of $\operatorname{grad} f$, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of $\mathcal C$.

                    As the last step, we can provide the closed form solver for the DC sub problem given at iteration $k$ by

                    \[\operatorname*{arg\,min}_{p\in \mathcal C}\ + \big\langle -\operatorname{grad} h(p^{(k)}), \exp^{-1}_{p^{(k)}}p\big\rangle.\]

                    Which we con compute

                    function dc_sub_solution!(M, q, p, X)
                    +    closed_form_solution!(M, q, L, U, p, -X)
                    +    return q
                    +end

                    For safety, we might want to avoid ending up at the boundary of $\mathcal C$. That is we reduce the distance we walk towards the solution $q$ a bit.

                    function dc_sub_solution_safe!(M, q, p, X)
                    +    p_last = copy(M,p) # since p=q might be in place
                    +    closed_form_solution!(M, q, L, U, p, -X)
                    +    q_orig = copy(M,q) # since we do the following in place of q
                    +    a = minimum(real.(eigen(q-L).values))
                    +    b = minimum(real.(eigen(U-q).values))
                    +    s = 1.0
                    +    d = distance(M, p_last, q_orig);
                    +    # if we are close to zero, we reduce faster.
                    +    α = d < 1/(n^2) ? 0.66 : 0.9995;
                    +    i=0
                    +    while (a < 0) || (b < 0)
                    +        s *= α
                    +        shortest_geodesic!(M, q, p_last, q_orig, s)
                    +        a = minimum(real.(eigen(q-L).values))
                    +        b = minimum(real.(eigen(U-q).values))
                    +        #println("$i a: $a, b = $b with s=$s")
                    +        i=i+1
                    +        if (i>100) # safety fallback
                    +            #@warn " $i steps where not enough $s ($α)\n$a $b\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs"
                    +            qe = eigen(q)
                    +            if a < 0
                    +                qe.values .+= min(1e-8, n*abs(min(a,b)))
                    +            else
                    +                qe.values .-= min(1e-8, n*abs(min(a,b)))
                    +            end
                    +            q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'
                    +            a = minimum(real.(eigen(q-L).values))
                    +            b = minimum(real.(eigen(U-q).values))
                    +            return q
                    +        end
                    +    end
                    +    return q
                    +end

                    The DoC solver run

                    Let’s compare both methods when they have the same stopping criteria

                    @time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;
                    +    gradient=grad_f_dc!,
                    +    sub_problem=dc_sub_solution_safe!,
                    +    evaluation=InplaceEvaluation(),
                    +    stopping_criterion = StopAfterIteration(300) |
                    +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                    +    debug = [
                    +        (:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "),
                    +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                    +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                    +        30, :Stop, "\n"],
                    +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                    +    return_state=true,
                    +)
                    Initial F(p): -0.77661458292831
                    +At iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.
                    + 18.424563 seconds (17.10 M allocations: 1.618 GiB, 4.35% gc time, 87.39% compilation time)
                    +
                    +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                    +After 23 iterations
                    +
                    +## Parameters
                    +* sub solver state:
                    +    | InplaceEvaluation()
                    +
                    +## Stopping Criterion
                    +Stop When _one_ of the following are fulfilled:
                    +    Max Iteration 300:  not reached
                    +    |Δp| < 1.0e-14: not reached
                    +    |Δgrad f| < 1.0e-9: reached
                    +Overall: reached
                    +This indicates convergence: No
                    +
                    +## Debug
                    +    :Stop = :Stop
                    +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "
                    +", 30]
                    +
                    +## Record
                    +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                    Let’s extract the final point and look at its cost

                    p1_dc = get_solver_result(state1_dc);
                    +f_dc(M, p1_dc)
                    -0.784425242474807

                    As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.

                    [ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]
                    2-element Vector{Tuple{Float64, Float64}}:
                    + (1.1886583723800445e-12, 0.06669240322431051)
                    + (1.3411042178831775e-5, 0.0671353506908023)

                    For the statistics we extract the recordings from the state

                    Define the Frank-Wolfe functions

                    For Frank wolfe, the cost is just defined as $-h(p)$ but the minimisation is constraint to $\mathcal C$, which is enfored by the oracle.

                    f_fw(M, p) = -h(M, p, w, q)
                    +function grad_f_fw!(M,X, p)
                    +    grad_h!(M, X, p, w, q)
                    +    X .*= -1.0
                    +    return X
                    +end
                    +oracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)

                    The FW Solver Run

                    Similarly we can run the Frank-Wolfe algorithm with

                    @time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;
                    +    sub_problem=oracle_fw!,
                    +    evaluation=InplaceEvaluation(),
                    +    stopping_criterion = StopAfterIteration(10^4) |
                    +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                    +    debug = [
                    +        (:Iteration, "# %-8d "), :Cost, (:Change, " |Δp|: %0.14f "),
                    +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                    +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                    +        2*10^3, :Stop, "\n"],
                    +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                    +    return_state=true,
                    +)
                    Initial f(x): -0.776615
                    +# 2000     f(x): -0.784420 |Δp|: 0.04611942377596  |grad f(p)|: 0.17693408  |Δgrad f(p)|: 0.17555618
                    +# 4000     f(x): -0.784421 |Δp|: 0.00372201632005  |grad f(p)|: 0.17694619  |Δgrad f(p)|: 0.00749427
                    +# 6000     f(x): -0.784422 |Δp|: 0.00205683506784  |grad f(p)|: 0.17695204  |Δgrad f(p)|: 0.00414088
                    +# 8000     f(x): -0.784422 |Δp|: 0.00140675676260  |grad f(p)|: 0.17695565  |Δgrad f(p)|: 0.00283200
                    +# 10000    f(x): -0.784422 |Δp|: 0.00106177438611  |grad f(p)|: 0.17695815  |Δgrad f(p)|: 0.00213746
                    +The algorithm reached its maximal number of iterations (10000).
                    +298.173386 seconds (56.06 M allocations: 93.635 GiB, 3.50% gc time, 0.43% compilation time)
                    +
                    +# Solver state for `Manopt.jl`s Frank Wolfe Method
                    +After 10000 iterations
                    +
                    +## Parameters
                    +* inverse retraction method: LogarithmicInverseRetraction()
                    +* retraction method: ExponentialRetraction()
                    +* sub solver state:
                    +    | InplaceEvaluation()
                    +
                    +## Stepsize
                    +DecreasingStepsize(; length=2.0,  factor=1.0,  subtrahend=0.0,  shift=2)
                    +
                    +## Stopping Criterion
                    +Stop When _one_ of the following are fulfilled:
                    +    Max Iteration 10000:    reached
                    +    |Δp| < 1.0e-14: not reached
                    +    |Δgrad f| < 1.0e-9: not reached
                    +Overall: reached
                    +This indicates convergence: No
                    +
                    +## Debug
                    +    :Stop = :Stop
                    +    :All = [(:Iteration, "# %-8d "), (:Cost, "f(x): %f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "
                    +", 2000]
                    +
                    +## Record
                    +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                    And we take a look at this result as well

                    p1_fw = get_solver_result(state1_fw);
                    +f_dc(M, p1_fw)
                    -0.7844220281765162

                    And its feasibility

                    [extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]
                    2-element Vector{Tuple{Float64, Float64}}:
                    + (4.904818928410655e-10, 0.06659173821656107)
                    + (3.245654983213335e-5, 0.06713970236096602)

                    Statistics

                    We extract the recorded values

                    # DoC
                    +iter1_dc = get_record(state1_dc, :Iteration, :Iteration)
                    +pk_dc = get_record(state1_dc,:Iteration,:Iterate)
                    +costs1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))
                    +dc_min = minimum(costs1_dc)
                    +# FW
                    +iter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]
                    +pk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]
                    +costs1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))

                    And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.

                    fig = plot(;
                    +    legend=:topright,
                    +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x_k)-f^*$ (log. scale)",
                    +    yaxis=:log,
                    +    ylims=(1e-8, 10^-2),
                    +    xaxis=:log,
                    +    xlims=(1,10^4),
                    +)
                    +plot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label="Difference of Convex")
                    +plot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label="Frank-Wolfe")

                    This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.

                    On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.

                    Literature

                    [BFSS23]
                    +
                    +
                    R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
                    +
                    [WS22]
                    +
                    +
                    M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                    +
                    +
                    diff --git a/v0.1.3/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg b/v0.1.3/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg new file mode 100644 index 0000000..4a5769e --- /dev/null +++ b/v0.1.3/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.3/examples/Difference-of-Convex-Rosenbrock/index.html b/v0.1.3/examples/Difference-of-Convex-Rosenbrock/index.html new file mode 100644 index 0000000..d0528c8 --- /dev/null +++ b/v0.1.3/examples/Difference-of-Convex-Rosenbrock/index.html @@ -0,0 +1,341 @@ + +Rosenbrock Metric · ManoptExamples.jl

                    Solving Rosenbrock with the Difference of Convex Algorithm

                    Ronny Bergmann 2023-06-06

                    Introduction

                    This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.

                    Both the Rosenbrock problem

                    \[ \operatorname*{argmin}_{x\in\mathbb R^2} a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2,\]

                    where $a,b>0$ and usually $b=1$ and $a \gg b$, we know the minimizer $x^* = (b,b^2)^\mathrm{T}$, and also the (Euclidean) gradient

                    \[\nabla f(x) = + \begin{pmatrix} + 4a(x_1^2-x_2)\\ -2a(x_1^2-x_2) + \end{pmatrix} + + + \begin{pmatrix} + 2(x_1-b)\\ 0 + \end{pmatrix}.\]

                    They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.

                    Furthermore, the RosenbrockMetric can be used on $\mathbb R^2$, that is

                    \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix},\]

                    In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.

                    1. The Euclidean Gradient
                    2. The Riemannian gradient descent with respect to the RosenbrockMetric
                    3. The Euclidean Difference of Convex Algorithm
                    4. The Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric

                    Where we obtain a difference of convex problem by writing

                    \[f(x) = a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2 + = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 - \bigl(x_1-b\bigr)^2\]

                    that is

                    \[g(x) = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 \quad\text{ and }\quad h(x) = \bigl(x_1-b\bigr)^2\]

                    using LinearAlgebra, Random, Statistics
                    +using Manifolds, Manopt, ManoptExamples
                    +using NamedColors, Plots
                    +import Manopt: set_manopt_parameter!
                    +Random.seed!(42)
                    paul_tol = load_paul_tol()
                    +indigo = paul_tol["mutedindigo"]
                    +green = paul_tol["mutedgreen"]
                    +sand = paul_tol["mutedsand"]
                    +teal = paul_tol["mutedteal"]
                    +grey = paul_tol["mutedgrey"]

                    To emphasize the effect, we choose a quite large value of a.

                    a = 2*10^5
                    +b = 1

                    and use the starting point and a direction to check gradients

                    p0 = [0.1, 0.2]

                    The Euclidean Gradient Descent.

                    For the Euclidean gradient we can just use the same approach as in the Rosenbrock example

                    M = ℝ^2
                    +f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                    +∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)

                    define a common debug vector

                    debug_vec = [
                    +        (:Iteration, "# %-8d "),
                    +        (:Cost, "F(x): %1.4e"),
                    +        " ",
                    +        (:Change, "|δp|: %1.4e | "),
                    +        (:GradientNorm, "|grad f|: %1.6e"),
                    +        :Stop,
                    +        "\n",
                    +    ]

                    and call the gradient descent algorithm

                    Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;
                    +    evaluation=InplaceEvaluation(),
                    +    debug=[debug_vec...,10^7],
                    +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                    +    record=[:Iteration, :Cost],
                    +    return_state=true,
                    +)
                    Initial F(x): 7.2208e+03 
                    +# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03
                    +# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04
                    +# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06
                    +# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08
                    +# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10
                    +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                    +
                    +# Solver state for `Manopt.jl`s Gradient Descent
                    +After 53073227 iterations
                    +
                    +## Parameters
                    +* retraction method: ExponentialRetraction()
                    +
                    +## Stepsize
                    +ArmijoLineseach() with keyword parameters
                    +  * initial_stepsize    = 1.0
                    +  * retraction_method   = ExponentialRetraction()
                    +  * contraction_factor  = 0.95
                    +  * sufficient_decrease = 0.1
                    +
                    +## Stopping Criterion
                    +Stop When _one_ of the following are fulfilled:
                    +    Max Iteration 100000000:    not reached
                    +    |Δp| < 1.0e-16: reached
                    +Overall: reached
                    +This indicates convergence: Yes
                    +
                    +## Debug
                    +    :Stop = :Stop
                    +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "
                    +", 10000000]
                    +
                    +## Record
                    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                    The Riemannian Gradient Descent.

                    For the Riemannian case, we define

                    M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())
                    MetricManifold(Euclidean(2; field = ℝ), ManoptExamples.RosenbrockMetric())

                    and the gradient is now adopted to the new metric

                    function grad_f!(M, X, p)
                    +    ∇f!!(M, X, p)
                    +    riemannian_gradient!(M, X, p, X)
                    +    return X
                    +end
                    +function grad_f(M, p)
                    +    X = zero_vector(M, p)
                    +    return grad_f!(M, X, p)
                    +end
                    R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;
                    +    evaluation=InplaceEvaluation(),
                    +    debug=[debug_vec...,10^6],
                    +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                    +    record=[:Iteration, :Cost],
                    +    return_state=true,
                    +)
                    Initial F(x): 7.2208e+03 
                    +# 1000000  F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04
                    +# 2000000  F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09
                    +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                    +
                    +# Solver state for `Manopt.jl`s Gradient Descent
                    +After 2443750 iterations
                    +
                    +## Parameters
                    +* retraction method: ExponentialRetraction()
                    +
                    +## Stepsize
                    +ArmijoLineseach() with keyword parameters
                    +  * initial_stepsize    = 1.0
                    +  * retraction_method   = ExponentialRetraction()
                    +  * contraction_factor  = 0.95
                    +  * sufficient_decrease = 0.1
                    +
                    +## Stopping Criterion
                    +Stop When _one_ of the following are fulfilled:
                    +    Max Iteration 100000000:    not reached
                    +    |Δp| < 1.0e-16: reached
                    +Overall: reached
                    +This indicates convergence: Yes
                    +
                    +## Debug
                    +    :Stop = :Stop
                    +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "
                    +", 1000000]
                    +
                    +## Record
                    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                    The Euclidean Difference of Convex

                    For the convex case, we have to first introduce the two parts of the cost.

                    f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;
                    +f2(M, p; a=100, b=1) = (p[1] - b[1])^2;
                    +g(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)
                    +h(M, p; a=100, b=1) = f2(M, p; a=a, b=b)

                    and their (Euclidan) gradients

                    function ∇h!(M, X, p; a=100, b=1)
                    +    X[1] = 2*(p[1]-b)
                    +    X[2] = 0
                    +    return X
                    +end
                    +function ∇h(M, p; a=100, b=1)
                    +    X = zero(p)
                    +    ∇h!(M, X, p; a=a, b=b)
                    +    return X
                    +end
                    +function ∇g!(M, X, p; a=100, b=1)
                    +    X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)
                    +    X[2] = -2*a*(p[1]^2-p[2])
                    +    return X
                    +end
                    +function ∇g(M, p; a=100, b=1)
                    +    X = zero(p)
                    +    ∇g!(M, X, p; a=a, b=b)
                    +    return X
                    +end

                    and we define for convenience

                    docE_g(M, p) = g(M, p; a=a, b=b)
                    +docE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)
                    +docE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)
                    +docE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)
                    +function docE_∇f!(M, X, p)
                    +  Y = zero_vector(M, p)
                    +  docE_∇g!(M, X, p)
                    +  docE_∇h!(M, Y, p)
                    +  X .-= Y
                    +  return X
                    +end

                    Then we call the difference of convex algorithm on Eucldiean space $\mathbb R^2$.

                    E_doc_state = difference_of_convex_algorithm(
                    +    M, docE_f, docE_g, docE_∇h!, p0;
                    +    gradient=docE_∇f!,
                    +    grad_g = docE_∇g!,
                    +    debug=[debug_vec..., 10^4],
                    +    evaluation=InplaceEvaluation(),
                    +    record=[:Iteration, :Cost],
                    +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                    +    sub_hess=nothing, # Use gradient descent
                    +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                    +    return_state=true,
                    +)
                    Initial F(x): 7.2208e+03 
                    +# 10000    F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04
                    +# 20000    F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08
                    +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                    +
                    +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                    +After 26549 iterations
                    +
                    +## Parameters
                    +* sub solver state:
                    +    | # Solver state for `Manopt.jl`s Gradient Descent
                    +    | After 2000 iterations
                    +    | 
                    +    | ## Parameters
                    +    | * retraction method: ExponentialRetraction()
                    +    | 
                    +    | ## Stepsize
                    +    | ArmijoLineseach() with keyword parameters
                    +    |   * initial_stepsize    = 1.0
                    +    |   * retraction_method   = ExponentialRetraction()
                    +    |   * contraction_factor  = 0.95
                    +    |   * sufficient_decrease = 0.1
                    +    | 
                    +    | ## Stopping Criterion
                    +    | Stop When _one_ of the following are fulfilled:
                    +    |     Max Iteration 2000:   reached
                    +    |     |grad f| < 1.0e-16: not reached
                    +    | Overall: reached
                    +    | This indicates convergence: No
                    +
                    +## Stopping Criterion
                    +Stop When _one_ of the following are fulfilled:
                    +    Max Iteration 100000000:    not reached
                    +    |Δp| < 1.0e-16: reached
                    +Overall: reached
                    +This indicates convergence: Yes
                    +
                    +## Debug
                    +    :Stop = :Stop
                    +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "
                    +", 10000]
                    +
                    +## Record
                    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                    The Riemannian Difference of Convex

                    We first have to again defined the gradients with respect to the new metric

                    function grad_h!(M, X, p; a=100, b=1)
                    +    ∇h!(M, X, p; a=a, b=b)
                    +    riemannian_gradient!(M, X, p, X)
                    +    return X
                    +end
                    +function grad_h(M, p; a=100, b=1)
                    +    X = zero(p)
                    +    grad_h!(M, X, p; a=a, b=b)
                    +    return X
                    +end
                    +function grad_g!(M, X, p; a=100, b=1)
                    +    ∇g!(M, X, p; a=a,b=b)
                    +    riemannian_gradient!(M, X, p, X)
                    +    return X
                    +end
                    +function grad_g(M, p; a=100, b=1)
                    +    X = zero(p)
                    +    grad_g!(M, X, p; a=a, b=b)
                    +    return X
                    +end

                    While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For $X \in \partial h(p^{(k)})$ the sunproblem top determine $p^{(k+1)}$ reads

                    \[\operatorname*{argmin}_{p\in\mathcal M} g(p) - \langle X, \log_{p^{(k)}}p\rangle\]

                    for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with $X = \operatorname{grad} h(p^{(k)})$ that

                    \[\phi(p) = g(p) - \langle X, \log_{p^{(k)}}p\rangle += a\bigl( p_{1}^2-p_{2}\bigr)^2 + + 2\bigl(p_{1}-b\bigr)^2 - 2(p^{(k)}_1-b)p_1 + 2(p^{(k)}_1-b)p^{(k)}_1,\]

                    its Euclidean gradient reads

                    \[\operatorname{grad}\phi(p) = + \nabla \varphi(p) + = \begin{pmatrix} + 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^{(k)}_1-b)\\ + -2a(p_1^2-p_2) + \end{pmatrix}\]

                    where we can again employ the gradient conversion from before to obtain the Riemannian gradient.

                    mutable struct SubGrad{P,T,V}
                    +    pk::P
                    +    Xk::T
                    +    a::V
                    +    b::V
                    +end
                    +function (ϕ::SubGrad)(M, p)
                    +    X = zero_vector(M, p)
                    +    ϕ(M, X, p)
                    +    return X
                    +end
                    +function (ϕ::SubGrad)(M, X, p)
                    +    X .= [
                    +        4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),
                    +        -2 * ϕ.a * (p[1]^2 - p[2]),
                    +    ]
                    +    riemannian_gradient!(M, X, p, X) # convert
                    +    return X
                    +end

                    And in orer to update the subsolvers gradient correctly, we have to overwrite

                    set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)
                    +set_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)

                    And we again introduce for ease of use

                    docR_g(M, p) = g(M, p; a=a, b=b)
                    +docR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)
                    +docR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)
                    +docR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)
                    +function docR_grad_f!(M, X, p)
                    +    Y = zero_vector(M, p)
                    +    docR_grad_g!(M, X, p)
                    +    docR_grad_h!(M, Y, p)
                    +    X .-= Y
                    +    return X
                    +end
                    +docR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)

                    Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.

                    R_doc_state = difference_of_convex_algorithm(
                    +    M_rb, docR_f, docR_g, docR_grad_h!, p0;
                    +    gradient=docR_grad_f!,
                    +    grad_g = docR_grad_g!,
                    +    debug=[debug_vec..., 10^6],
                    +    evaluation=InplaceEvaluation(),
                    +    record=[:Iteration, :Cost],
                    +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                    +    sub_grad=docR_sub_grad,
                    +    sub_hess = nothing, # Use gradient descent
                    +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                    +    return_state=true,
                    +)
                    Initial F(x): 7.2208e+03 
                    +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                    +
                    +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                    +After 1235 iterations
                    +
                    +## Parameters
                    +* sub solver state:
                    +    | # Solver state for `Manopt.jl`s Gradient Descent
                    +    | After 2000 iterations
                    +    | 
                    +    | ## Parameters
                    +    | * retraction method: ExponentialRetraction()
                    +    | 
                    +    | ## Stepsize
                    +    | ArmijoLineseach() with keyword parameters
                    +    |   * initial_stepsize    = 1.0
                    +    |   * retraction_method   = ExponentialRetraction()
                    +    |   * contraction_factor  = 0.95
                    +    |   * sufficient_decrease = 0.1
                    +    | 
                    +    | ## Stopping Criterion
                    +    | Stop When _one_ of the following are fulfilled:
                    +    |     Max Iteration 2000:   reached
                    +    |     |grad f| < 1.0e-16: not reached
                    +    | Overall: reached
                    +    | This indicates convergence: No
                    +
                    +## Stopping Criterion
                    +Stop When _one_ of the following are fulfilled:
                    +    Max Iteration 100000000:    not reached
                    +    |Δp| < 1.0e-16: reached
                    +Overall: reached
                    +This indicates convergence: Yes
                    +
                    +## Debug
                    +    :Stop = :Stop
                    +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "
                    +", 1000000]
                    +
                    +## Record
                    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                    Comparison in Iterations

                    fig = plot(;
                    +    legend=:topright,
                    +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x)$ (log. scale)",
                    +    yaxis=:log,
                    +    ylims=(1e-16, 5*1e5),
                    +    xaxis=:log,
                    +    xlims=(1,10^8),
                    +)
                    +scatter!(fig, [1,], [f(M,p0),], label=raw"$f(p_0)$", markercolor=grey)
                    +egi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries
                    +egc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries
                    +plot!(fig, egi, egc, color=teal, label="Euclidean GD")
                    +#
                    +rgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries
                    +rgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries
                    +plot!(fig, rgi, rgc, color=indigo, label="Riemannian GD")
                    +#
                    +edi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries
                    +edc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries
                    +plot!(fig, edi, edc, color=sand, label="Euclidean DoC")
                    +#
                    +rdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries
                    +rdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries
                    +plot!(fig, rdi, rdc, color=green, label="Riemannian DoC")

                    And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.

                    Literature

                    [BFSS23]
                    +
                    +
                    R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
                    +
                    +
                    diff --git a/v0.1.3/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg b/v0.1.3/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..3dc6741 --- /dev/null +++ b/v0.1.3/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.3/examples/RayleighQuotient/index.html b/v0.1.3/examples/RayleighQuotient/index.html new file mode 100644 index 0000000..a9f561e --- /dev/null +++ b/v0.1.3/examples/RayleighQuotient/index.html @@ -0,0 +1,143 @@ + +The Rayleigh Quotient · ManoptExamples.jl

                    The Rayleigh Quotient

                    Ronny Bergmann 2024-03-09

                    Introduction

                    This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.

                    For a symmetric matrix $A \in \mathbb R^{n\times n}$ we consider the 📖 Rayleigh Quotient

                    \[\operatorname*{arg\,min}_{x \in \mathbb R^n \backslash \{0\}} +\frac{x^{\mathrm{T}}Ax}{\lVert x \rVert^2}.\]

                    On the sphere we can omit the denominator and obtain

                    \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                    which by itself we can again continue in the embedding as

                    \[\tilde f(x) = x^{\mathrm{T}}Ax,\qquad x \in \mathbb R^n.\]

                    This cost has the nice feature that at the minimizer $p^*\in\mathbb S^{n-1}$ the function falue $f(p^*)$ is the smalles eigenvalue of $A$.

                    For the embedded function $\tilde f$ the gradient and Hessian can be computed with classical methods as

                    \[\begin{align*} +∇\tilde f(x) &= 2Ax, \qquad x ∈ ℝ^n, +\\ +∇^2\tilde f(x)[V] &= 2AV, \qquad x, V ∈ ℝ^n. +\end{align*}\]

                    Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold $\mathcal M = \mathbb S^{n-1}$ are given by

                    \[\begin{align*} +\operatorname{grad} f(p) &= 2Ap - 2(p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1}, +\\ +\operatorname{Hess} f(p)[X] &= 2AX - 2(p^{\mathrm{T}}AX)p - 2(p^{\mathrm{T}}Ap)X,\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1} +\end{align*}\]

                    Let’s first generate an example martrx $A$.

                    using Pkg;
                    +cd(@__DIR__)
                    +Pkg.activate("."); # use the example environment,
                    using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random
                    +Random.seed!(42)
                    +n = 500
                    +A = Symmetric(randn(n,n))

                    And the manifolds

                    M = Sphere(n-1)
                    Sphere(499, ℝ)
                    E = get_embedding(M)
                    Euclidean(500; field = ℝ)

                    Setup the corresponding functions

                    Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute $f$ is called with M as their first argument and $\tilde f$ if called with E.

                    We instantiate

                    f = ManoptExamples.RayleighQuotientCost(A)
                    +grad_f = ManoptExamples.RayleighQuotientGrad!!(A)
                    +Hess_f = ManoptExamples.RayleighQuotientHess!!(A)

                    the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory

                    p0 = [1.0, zeros(n-1)...]
                    +X = zero_vector(M, p0)

                    we can both call

                    Y = grad_f(M,p0)  # Allocates memory
                    +grad_f(M,X,p0)    # Computes in place of X and returns the result in X.
                    +norm(M, p0, X-Y)
                    0.0

                    Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.

                    First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute

                    λ = min(eigvals(A)...)
                    -44.838605046940486

                    A Solver based on gradient information

                    Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient $\nabla \tilde f$. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].

                    But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent

                    s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,
                    +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                    +    return_state=true,
                    +)
                    +q1 = get_solver_result(s)
                    +s
                    Initial f(x): -0.363357
                    +# 50    f(x): -44.206244|grad f(p)|:2.387846624353276
                    +# 100   f(x): -44.546883|grad f(p)|:2.256125365459942
                    +# 150   f(x): -44.765220|grad f(p)|:1.3051578932969472
                    +# 200   f(x): -44.824730|grad f(p)|:0.5758153603739719
                    +
                    +# Solver state for `Manopt.jl`s Gradient Descent
                    +After 200 iterations
                    +
                    +## Parameters
                    +* retraction method: ExponentialRetraction()
                    +
                    +## Stepsize
                    +ArmijoLineseach() with keyword parameters
                    +  * initial_stepsize    = 1.0
                    +  * retraction_method   = ExponentialRetraction()
                    +  * contraction_factor  = 0.95
                    +  * sufficient_decrease = 0.1
                    +
                    +## Stopping Criterion
                    +Stop When _one_ of the following are fulfilled:
                    +    Max Iteration 200:  reached
                    +    |grad f| < 1.0e-9: not reached
                    +Overall: reached
                    +This indicates convergence: No
                    +
                    +## Debug
                    +    [(:Iteration, "# %-6d"), (:Cost, "f(x): %f"), (:GradientNorm, "|grad f(p)|:%s"), "
                    +", 50]

                    From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.

                    And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.

                    q2 = gradient_descent(M, f, grad_f, p0;
                    +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                    +)
                    +#Test that both are the same
                    +isapprox(M, q1,q2)
                    Initial f(x): -0.363357
                    +# 50    f(x): -44.206244|grad f(p)|:2.387846624353294
                    +# 100   f(x): -44.546883|grad f(p)|:2.2561253654599915
                    +# 150   f(x): -44.765220|grad f(p)|:1.305157893296954
                    +# 200   f(x): -44.824730|grad f(p)|:0.5758153603739878
                    +
                    +true

                    We can also benchmark both

                    @benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)
                    BenchmarkTools.Trial: 9 samples with 1 evaluation.
                    + Range (min … max):  570.377 ms … 600.167 ms  ┊ GC (min … max): 7.71% … 7.11%
                    + Time  (median):     580.657 ms               ┊ GC (median):    7.63%
                    + Time  (mean ± σ):   582.121 ms ±   8.723 ms  ┊ GC (mean ± σ):  7.64% ± 0.26%
                    +
                    +  █       █      █ █   █  █         ██                        █  
                    +  █▁▁▁▁▁▁▁█▁▁▁▁▁▁█▁█▁▁▁█▁▁█▁▁▁▁▁▁▁▁▁██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
                    +  570 ms           Histogram: frequency by time          600 ms <
                    +
                    + Memory estimate: 1.13 GiB, allocs estimate: 3852.
                    @benchmark gradient_descent($M, $f, $grad_f, $p0)
                    BenchmarkTools.Trial: 51 samples with 1 evaluation.
                    + Range (min … max):  93.870 ms … 108.205 ms  ┊ GC (min … max): 0.00% … 0.00%
                    + Time  (median):     97.246 ms               ┊ GC (median):    0.00%
                    + Time  (mean ± σ):   98.757 ms ±   3.496 ms  ┊ GC (mean ± σ):  1.21% ± 1.94%
                    +
                    +       ▁   █▄ ▄▄█▁   ▄            ▁   ▄  ▁                      
                    +  ▆▁▁▆▆█▆▆▆██▆████▆▁▁█▆▁▁▁▆▆▁▁▁▁▆▆█▁▁▆█▁▁█▁▁▆▁▁▆▁▁▁▁▁▆▆▁▁▁▁▁▁▆ ▁
                    +  93.9 ms         Histogram: frequency by time          107 ms <
                    +
                    + Memory estimate: 12.02 MiB, allocs estimate: 3246.

                    We see, that the conversion costs a bit of performance, but if the Euclidean gradient is easier to compute, this might still be ok.

                    A Solver based (also) on (approximate) Hessian information

                    To also involve the Hessian, we consider the trust regions solver with three cases:

                    1. Euclidean, approximating the Hessian
                    2. Euclidean, providing the Hessian
                    3. Riemannian, providing the Hessian but also using in-place evaluations.
                    q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,
                    +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                    +);
                    Initial f(x): -0.363357
                    +# 10    f(x): -43.522431|grad f(p)|:9.779418323323288
                    +# 20    f(x): -44.838605|grad f(p)|:8.451144677175197e-12

                    To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.

                    q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,
                    +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                    +);
                    Initial f(x): -0.363357
                    +# 10    f(x): -43.522431|grad f(p)|:9.779418323423874
                    +# 20    f(x): -44.838605|grad f(p)|:1.1638484603322704e-11
                    q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;
                    +    evaluation=InplaceEvaluation(),
                    +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                    +);
                    Initial f(x): -0.363357
                    +# 10    f(x): -43.522431|grad f(p)|:9.779418323423881
                    +# 20    f(x): -44.838605|grad f(p)|:1.1445271377332597e-11

                    Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.

                    @benchmark trust_regions($M, $f, $grad_f, $p0;
                    +  objective_type=:Euclidean,
                    +  evaluation=InplaceEvaluation(),
                    +)
                    BenchmarkTools.Trial: 3 samples with 1 evaluation.
                    + Range (min … max):  1.929 s …   1.971 s  ┊ GC (min … max): 9.24% … 9.07%
                    + Time  (median):     1.939 s              ┊ GC (median):    9.22%
                    + Time  (mean ± σ):   1.947 s ± 22.028 ms  ┊ GC (mean ± σ):  9.29% ± 0.25%
                    +
                    +  █            █                                          █  
                    +  █▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
                    +  1.93 s         Histogram: frequency by time        1.97 s <
                    +
                    + Memory estimate: 3.81 GiB, allocs estimate: 21954.
                    @benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;
                    +  evaluation=InplaceEvaluation(),
                    +  objective_type=:Euclidean
                    +)
                    BenchmarkTools.Trial: 4 samples with 1 evaluation.
                    + Range (min … max):  1.331 s …   1.443 s  ┊ GC (min … max): 9.48% … 9.17%
                    + Time  (median):     1.342 s              ┊ GC (median):    9.33%
                    + Time  (mean ± σ):   1.365 s ± 52.784 ms  ┊ GC (mean ± σ):  9.25% ± 0.19%
                    +
                    +  ██       █                                              █  
                    +  ██▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
                    +  1.33 s         Histogram: frequency by time        1.44 s <
                    +
                    + Memory estimate: 2.56 GiB, allocs estimate: 19283.
                    @benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;
                    +    evaluation=InplaceEvaluation(),
                    +)
                    BenchmarkTools.Trial: 112 samples with 1 evaluation.
                    + Range (min … max):  40.403 ms … 68.382 ms  ┊ GC (min … max): 0.00% … 0.00%
                    + Time  (median):     43.043 ms              ┊ GC (median):    0.00%
                    + Time  (mean ± σ):   44.695 ms ±  3.705 ms  ┊ GC (mean ± σ):  3.51% ± 4.37%
                    +
                    +         ▄▆█                                                   
                    +  ▅▃▁▅▁▄█████▆▇▃▃▃▄▁▃▁▄▄▁▃▄▅█▅▃█▄▄▃▄▁▅▁▃▁▁▁▁▁▃▃▁▁▁▁▁▁▁▁▁▁▁▃▃▃ ▃
                    +  40.4 ms         Histogram: frequency by time        54.3 ms <
                    +
                    + Memory estimate: 16.23 MiB, allocs estimate: 6802.

                    We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.

                    Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.

                    [distance(M, q1, q) for q ∈ [q2,q3] ]
                    2-element Vector{Float64}:
                    + 1.5505190490543112e-15
                    + 0.1301942153125503
                    [distance(M, q3, q) for q ∈ [q4,q5] ]
                    2-element Vector{Float64}:
                    + 5.325642276241738e-14
                    + 5.1713218623657045e-14

                    Which we can also see in the final cost, comparing it to the Eigenvalue

                    [f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]
                    5-element Vector{Float64}:
                    +  0.013874911807278067
                    +  0.01387491180739886
                    +  6.679101716144942e-13
                    + -4.106937012693379e-12
                    + -3.964828465541359e-12

                    Summary

                    We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.

                    Literature

                    diff --git a/v0.1.3/examples/Riemannian-mean/index.html b/v0.1.3/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..5deb9b4 --- /dev/null +++ b/v0.1.3/examples/Riemannian-mean/index.html @@ -0,0 +1,33 @@ + +Riemannian Mean · ManoptExamples.jl

                    The Riemannian Center of Mass (mean)

                    Ronny Bergmann 2023-07-02

                    Preliminary Notes

                    Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

                    For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.

                    The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

                    There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

                    For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

                    using Pkg;
                    +cd(@__DIR__)
                    +Pkg.activate("."); # use the example environment,

                    Loading packages and defining data

                    Loading the necessary packages and defining a data set on a manifold

                    using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
                    +Random.seed!(42)
                    +M = Sphere(2)
                    +n = 100
                    +σ = π / 8
                    +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
                    +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

                    Variant 1: Using the functions

                    We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.

                    f = ManoptExamples.RiemannianMeanCost(data)
                    +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

                    Then we can for example directly call a gradient descent as

                    x1 = gradient_descent(M, f, grad_f, first(data))
                    3-element Vector{Float64}:
                    + 0.6868392794750908
                    + 0.00653160068349042
                    + 0.7267799820871861

                    Variant 2: Using the objective

                    A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

                    rmo = ManoptExamples.Riemannian_mean_objective(
                    +    M, data,
                    +    evaluation=InplaceEvaluation(),
                    +)

                    Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

                    rmp = DefaultManoptProblem(M, rmo)

                    This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

                    s1 = GradientDescentState(M, copy(M, first(data)))
                    +solve!(rmp, s1)
                    +x2 = get_solver_result(s1)
                    3-element Vector{Float64}:
                    + 0.6868392794750908
                    + 0.00653160068349042
                    + 0.7267799820871861

                    but we can easily use a conjugate gradient instead

                    s2 = ConjugateGradientDescentState(
                    +    M,
                    +    copy(M, first(data)),
                    +    StopAfterIteration(100),
                    +    ArmijoLinesearch(M),
                    +    FletcherReevesCoefficient(),
                    +)
                    +solve!(rmp, s2)
                    +x3 = get_solver_result(s2)
                    3-element Vector{Float64}:
                    + 0.6868393613136017
                    + 0.006531541407458413
                    + 0.7267799052788726
                    diff --git a/v0.1.3/examples/Robust-PCA/index.html b/v0.1.3/examples/Robust-PCA/index.html new file mode 100644 index 0000000..6af402f --- /dev/null +++ b/v0.1.3/examples/Robust-PCA/index.html @@ -0,0 +1,64 @@ + +Robust PCA · ManoptExamples.jl

                    The Robust PCA computed on the Grassmann manifold

                    Ronny BergmannLaura Weigl 2023-07-02

                    For this example we first load the necessary packages.

                    using Pkg;
                    +cd(@__DIR__)
                    +Pkg.activate("."); # use the example environment,
                    using LinearAlgebra, Random, Statistics
                    +using Manifolds, Manopt, ManoptExamples
                    +using Plots
                    +Random.seed!(42)

                    Computing a Robust PCA

                    For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

                    We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

                    \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

                    The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

                    \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

                    where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

                    The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

                    First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

                    n = 40
                    +d = 2
                    +outliers = 15
                    +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
                    +# Outliers:
                    +permute = shuffle(1:size(data, 2))'
                    +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
                    +# We are looking for a line here so we set
                    +m = 1

                    We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

                    M = Grassmann(d,m);

                    For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

                    Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

                    Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

                    The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

                    We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

                    ε = 1.0
                    +iterations = 6
                    +reduction = 0.5
                    +U, S, V = svd(data);
                    +p0 = U[:, 1:m]
                    2×1 Matrix{Float64}:
                    + -0.7494248652139397
                    +  0.6620893983436593

                    Let’s generate the cost and gradient we aim to use here

                    f = ManoptExamples.RobustPCACost(M, data, ε)
                    +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
                    ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

                    and check the initial cost

                    f(M, p0)
                    9.430690947905521

                    Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

                    q = copy(M, p0)
                    +εi = ε
                    +for i in 1:iterations
                    +    f.ε = εi
                    +    grad_f.ε = εi
                    +    global q = trust_regions(
                    +        M,
                    +        f,
                    +        grad_f,
                    +        ApproxHessianFiniteDifference(
                    +            M, q, f;
                    +            vector_transport_method=ProjectionTransport(),
                    +            retraction_method=PolarRetraction(),
                    +        ),
                    +        q;
                    +        (project!)=project!,
                    +    )
                    +    global εi *= reduction
                    +end

                    When finally setting ε we can investigate the final cost

                    f.ε = 0.0
                    +f(M, q)
                    9.412973804873698

                    Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

                    fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
                    +plot!(
                    +    fig,
                    +    q[1] * [-1, 1] * 100,
                    +    q[2] * [-1, 1] * 100;
                    +    linecolor=:red,
                    +    linewidth=2,
                    +    label="Robust PCA",
                    +);
                    +plot!(
                    +    fig,
                    +    p0[1] * [-1, 1] * 100,
                    +    p0[2] * [-1, 1] * 100;
                    +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
                    +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
                    +    linewidth=2,
                    +    linecolor=:black,
                    +    label="Standard SVD",
                    +)

                    Figure 1: The result of the robust PCA vs. SVD

                    diff --git a/v0.1.3/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.3/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..b1e6bec --- /dev/null +++ b/v0.1.3/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.3/examples/Rosenbrock/index.html b/v0.1.3/examples/Rosenbrock/index.html new file mode 100644 index 0000000..a2dc17a --- /dev/null +++ b/v0.1.3/examples/Rosenbrock/index.html @@ -0,0 +1,57 @@ + +Rosenbrock · ManoptExamples.jl

                    The Rosenbrock Function

                    Ronny Bergmann 2023-01-03

                    After loading the necessary packages

                    using Pkg;
                    +cd(@__DIR__)
                    +Pkg.activate("."); # use the example environment,
                    using Manifolds, Manopt, ManoptExamples
                    +using Plots

                    We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).

                    a = 100.0
                    +b = 1.0
                    +p0 = [1/10, 2/10]

                    which is defined on $\mathbb R^2$, so we need

                    M = ℝ^2
                    Euclidean(2; field = ℝ)

                    and can then generate both the cost and the gradient

                    f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                    +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
                    ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

                    For comparison, we look at the initial cost

                    f(M, p0)
                    4.42

                    And to illustrate, we run two small solvers with their default settings as a comparison.

                    Gradient Descent

                    We start with the gradient descent solver.

                    Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

                    gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
                    # Solver state for `Manopt.jl`s Gradient Descent
                    +After 200 iterations
                    +
                    +## Parameters
                    +* retraction method: ExponentialRetraction()
                    +
                    +## Stepsize
                    +ArmijoLineseach() with keyword parameters
                    +  * initial_stepsize    = 1.0
                    +  * retraction_method   = ExponentialRetraction()
                    +  * contraction_factor  = 0.95
                    +  * sufficient_decrease = 0.1
                    +
                    +## Stopping Criterion
                    +Stop When _one_ of the following are fulfilled:
                    +    Max Iteration 200:  reached
                    +    |grad f| < 1.0e-9: not reached
                    +Overall: reached
                    +This indicates convergence: No
                    +
                    +## Record
                    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                    From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

                    gd_x = get_record(gd_state, :Iteration, :Iteration)
                    +gd_y =  get_record(gd_state, :Iteration, :Cost)
                    +f(M, get_solver_result(gd_state))
                    0.10562873187751265

                    Quasi Newton

                    We can improve this using the quasi Newton algorithm

                    qn_state = quasi_Newton(M, f, grad_f, p0;
                    +    record = [:Iteration, :Cost], return_state=true
                    +)
                    # Solver state for `Manopt.jl`s Quasi Newton Method
                    +After 44 iterations
                    +
                    +## Parameters
                    +* direction update:        limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.
                    +* retraction method:       ExponentialRetraction()
                    +* vector trnasport method: ParallelTransport()
                    +
                    +## Stepsize
                    +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
                    +  * retraction_method = ExponentialRetraction()
                    +  * vector_transport_method = ParallelTransport()
                    +
                    +## Stopping Criterion
                    +Stop When _one_ of the following are fulfilled:
                    +    Max Iteration 1000: not reached
                    +    |grad f| < 1.0e-6: reached
                    +Overall: reached
                    +This indicates convergence: Yes
                    +
                    +## Record
                    +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                    And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

                    qn_x = get_record(qn_state, :Iteration, :Iteration)
                    +qn_y =  get_record(qn_state, :Iteration, :Cost)
                    +f(M, get_solver_result(qn_state))
                    2.359559352025148e-14

                    and see that the final value is close to the one of the minimizer

                    f(M, ManoptExamples.minimizer(f))
                    0.0

                    which we also see if we plot the recorded cost.

                    fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
                    +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

                    Figure 1: The result of the robust PCA vs. SVD

                    diff --git a/v0.1.3/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.3/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..fd8f372 --- /dev/null +++ b/v0.1.3/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.3/examples/index.html b/v0.1.3/examples/index.html new file mode 100644 index 0000000..321189b --- /dev/null +++ b/v0.1.3/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

                    List of Examples

                    NameprovidesDocumentationComment
                    A Benchmark for Difference of Convexcontains a few simple functions
                    Solving Rosenbrock with Difference of ConvexDoC split of Rosenbrock📚uses a Rosenbrock based metric
                    Difference of Convex vs. Frank-Wolfeclosed-form sub solver
                    Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
                    Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
                    Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚
                    The Rayleigh Quotient$f$, $\operatorname{grad}f$ (A/I), $\operatorname{Hess}f$ (A/I), objective📚

                    Symbols:

                    • A Allocating variant
                    • I In-place variant
                    • 📚 link to documented functions in the documentation
                    diff --git a/v0.1.3/index.html b/v0.1.3/index.html new file mode 100644 index 0000000..56e843f --- /dev/null +++ b/v0.1.3/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

                    Welcome to ManoptExample.jl

                    This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

                    Each example usually consists of

                    • a cost function and additional objects, like the gradient or proximal maps, see objectives
                    • an example explaining how to use these, see examples

                    Helping functions that are used in one or more examples can be found in the section of functions in the menu.

                    diff --git a/v0.1.3/objectives/index.html b/v0.1.3/objectives/index.html new file mode 100644 index 0000000..352e55f --- /dev/null +++ b/v0.1.3/objectives/index.html @@ -0,0 +1,42 @@ + +Objectives · ManoptExamples.jl

                    List of Objectives defined for the Examples

                    Rayleigh Quotient on the Sphere

                    See the Rayleigh example (TODO) to see these in use.

                    ManoptExamples.RayleighQuotientCostType
                    RayleighQuotientCost

                    A functor representing the Rayleigh Quotient cost function.

                    Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either

                    \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                    or extended into the embedding as

                    \[f(x) = x^{\mathrm{T}}Ax, \qquad x ∈ ℝ^n,\]

                    which is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of $𝕊^{n-1}$.

                    Fields

                    • A – storing the matrix internally

                    Constructor

                    RayleighQuotientCost(A)

                    Create the Rayleigh cost function.

                    See also

                    RayleighQuotientGrad!!, RayleighQuotientHess!!

                    source
                    ManoptExamples.RayleighQuotientGrad!!Type
                    RayleighQuotientGrad!!

                    A functor representing the Rayleigh Quotient gradient function.

                    Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either

                    \[\operatorname{grad} f(p) = 2 Ap - 2 (p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1},\]

                    or taking the Euclidean gradient of the Rayleigh quotient on the sphere as

                    \[∇f(x) = 2Ax, \qquad x ∈ ℝ^n.\]

                    For details, see Example 3.62 of [Bou23].

                    Fields

                    • A – storing the matrix internally

                    Constructor

                    RayleighQuotientGrad!!(A)

                    Create the Rayleigh quotient gradient function.

                    See also

                    RayleighQuotientCost, RayleighQuotientHess!!

                    source
                    ManoptExamples.RayleighQuotientHess!!Type
                    RayleighQuotientHess!!

                    A functor representing the Rayleigh Quotient Hessian.

                    Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either

                    \[\operatorname{Hess} f(p)[X] = 2 \bigl(AX - (p^{mathrm{T}}AX)p - (p^{\mathrm{T}}Ap)X\bigr),\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1}\]

                    or taking the Euclidean Hessian of the Rayleigh quotient on the sphere as

                    \[∇^2f(x)[V] = 2AV, \qquad x, V ∈ ℝ^n.\]

                    For details, see Example 5.27 of [Bou23].

                    Fields

                    • A – storing the matrix internally

                    Constructor

                    RayleighQuotientHess!!(A)

                    Create the Rayleigh quotient Hessian function.

                    See also

                    RayleighQuotientCost, RayleighQuotientGrad!!

                    source

                    Riemannian Mean

                    See the Riemannian mean example to see these in use.

                    ManoptExamples.RiemannianMeanCostType
                    RiemannianMeanCost{P}

                    A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                    For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                    \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

                    where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

                    Constructor

                    RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

                    Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

                    See also

                    RiemannianMeanGradient!!, Riemannian_mean_objective

                    source
                    ManoptExamples.RiemannianMeanGradient!!Type
                    RiemannianMeanGradient!!{P} where P

                    A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                    For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                    \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

                    where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

                    This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

                    Constructors

                    RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

                    Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

                    RiemannianMeanGradient!!(
                    +    M::AbstractManifold,
                    +    data::AbstractVector{P};
                    +    initial_vector::T=zero_vector(M, first(data)),
                    +) where {P,T}

                    Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

                    See also

                    RiemannianMeanCost, Riemannian_mean_objective

                    source
                    ManoptExamples.Riemannian_mean_objectiveMethod
                    Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
                    +Riemannian_mean_objective(M, data;
                    +initial_vector=zero_vector(M, first(data)),
                    +evaluation=AllocatingEvaluton()
                    +)

                    Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

                    See also

                    RiemannianMeanCost, RiemannianMeanGradient!!

                    Note

                    The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

                    source

                    Robust PCA

                    See the Robust PCA example to see these in use.

                    ManoptExamples.RobustPCACostType
                    RobustPCACost{D,F}

                    A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

                    \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

                    This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

                    \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

                    Note that this is a mutable struct so you can adapt the $ε$ later on.

                    Constructor

                    RobustPCACost(data::AbstractMatrix, ε=1.0)
                    +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

                    Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

                    source
                    ManoptExamples.RobustPCAGrad!!Type
                    RobustPCAGrad!!{D,F}

                    A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

                    Note that this is a mutable struct so you can adapt the $ε$ later on.

                    Constructor

                    RobustPCAGrad!!(data, ε=1.0)
                    +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

                    Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

                    source
                    ManoptExamples.robust_PCA_objectiveFunction
                    robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
                    +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

                    Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

                    See also

                    RobustPCACost, RobustPCAGrad!!

                    Note

                    Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.

                    source

                    Rosenbrock Function

                    See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.

                    ManoptExamples.RosenbrockCostType
                    RosenbrockCost

                    Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                    \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

                    which means that for the 2D case, the manifold $\mathcal M$ is ignored.

                    See also 📖 Rosenbrock (with slightly different parameter naming).

                    Constructor

                    f = Rosenbrock(a,b)

                    generates the struct/function of the Rosenbrock cost.

                    source
                    ManoptExamples.RosenbrockGradient!!Type
                    RosenbrockGradient

                    Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                    \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

                    i.e. also here the manifold is ignored.

                    Constructor

                    RosenbrockGradient(a,b)

                    Functors

                    grad_f!!(M,p)
                    +grad_f!!(M, X, p)

                    evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

                    source
                    ManoptExamples.RosenbrockMetricType
                    RosenbrockMetric <: AbstractMetric

                    A metric related to the Rosenbrock problem, where the metric at a point $p∈\mathbb R^2$ is given by

                    \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_{1}^2 & -2p_{1} \\ + -2p_{1} & 1 +\end{pmatrix},\]

                    where the $\mathrm{Rb}$ stands for Rosenbrock

                    source
                    Base.expMethod
                    q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)
                    +exp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)

                    Compute the exponential map with respect to the RosenbrockMetric.

                    \[ q = \begin{pmatrix} p_1 + X_1 \\ p_2+X_2+X_1^2\end{pmatrix}\]

                    source
                    Base.logMethod
                    X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)
                    +log!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)

                    Compute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any $j ∈ \{1,…,m\}$

                    \[X = \begin{pmatrix} + q_1 - p_1 \\ + q_2 - p_2 + (q_1 - p_1)^2 +\end{pmatrix}\]

                    source
                    Manifolds.inverse_local_metricMethod
                    inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                    Return the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                    \[G^{-1}_p = +\begin{pmatrix} + 1 & 2p_1\\ + 2p_1 & 1+4p_1^2 \\ +\end{pmatrix}.\]

                    source
                    Manifolds.local_metricMethod
                    local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                    Return the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                    \[G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix}\]

                    source
                    ManifoldsBase.change_representerMethod
                    Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)
                    +change_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)

                    Given the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.

                    this function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.

                    source
                    ManifoldsBase.innerMethod
                    inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)

                    Compute the inner product on $\mathbb R^2$ with respect to the RosenbrockMetric, i.e. for $X,Y \in T_p\mathcal M$ we have

                    \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1\\ + -2p_1 & 1 +\end{pmatrix},\]

                    source

                    Literature

                    diff --git a/v0.1.3/references.bib b/v0.1.3/references.bib new file mode 100644 index 0000000..e65e411 --- /dev/null +++ b/v0.1.3/references.bib @@ -0,0 +1,46 @@ +@article{BergmannFerreiraSantosSouza:2023, + AUTHOR = {Bergmann, R. and Ferreira, O. P. and Santos, E. M. and Souza, J. C. O.}, + JOURNAL = {arXiv preprint}, + TITLE = {The difference of convex algorithm on Hadamard manifolds}, + URL = {https://arxiv.org/abs/2112.05250}, + YEAR = {2023} +} + +@book{Boumal:2023, + TITLE = {An Introduction to Optimization on Smooth Manifolds}, + AUTHOR = {Boumal, Nicolas}, + YEAR = {2023}, + MONTH = mar, + EDITION = {First}, + PUBLISHER = {Cambridge University Press}, + DOI = {10.1017/9781009166164}, + ABSTRACT = {Optimization on Riemannian manifolds-the result of smooth geometry and optimization merging into one elegant modern framework-spans many areas of science and engineering, including machine learning, computer vision, signal processing, dynamical systems and scientific computing. This text introduces the differential geometry and Riemannian geometry concepts that will help students and researchers in applied mathematics, computer science and engineering gain a firm mathematical grounding to use these tools confidently in their research. Its charts-last approach will prove more intuitive from an optimizer's viewpoint, and all definitions and theorems are motivated to build time-tested optimization algorithms. Starting from first principles, the text goes on to cover current research on topics including worst-case complexity and geodesic convexity. Readers will appreciate the tricks of the trade for conducting research and for numerical implementations sprinkled throughout the book.}, + ISBN = {978-1-00-916616-4}, + URL = {https://www.nicolasboumal.net/#book} +} + +@article{SouzaOliveira:2015, + AUTHOR = {J. C. O. Souza and P. R. Oliveira}, + DOI = {10.1007/s10898-015-0282-7}, + JOURNAL = {Journal of Global Optimization}, + MONTH = feb, + NUMBER = {4}, + PAGES = {797--810}, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {63}, + TITLE = {A proximal point algorithm for DC fuctions on Hadamard manifolds}, + YEAR = {2015} +} + +@article{WeberSra:2022, + DOI = {10.1007/s10107-022-01840-5}, + YEAR = {2022}, + MONTH = jul, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {199}, + NUMBER = {1-2}, + PAGES = {525--556}, + AUTHOR = {Melanie Weber and Suvrit Sra}, + TITLE = {Riemannian Optimization via Frank-Wolfe Methods}, + JOURNAL = {Mathematical Programming} +} \ No newline at end of file diff --git a/v0.1.3/references/index.html b/v0.1.3/references/index.html new file mode 100644 index 0000000..e1bce4d --- /dev/null +++ b/v0.1.3/references/index.html @@ -0,0 +1,15 @@ + +References · ManoptExamples.jl

                    Literature

                    [BFSS23]
                    +
                    +
                    R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds, arXiv preprint (2023).
                    +
                    [Bou23]
                    +
                    + +
                    [SO15]
                    +
                    +
                    J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                    +
                    [WS22]
                    +
                    +
                    M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                    +
                    +
                    diff --git a/v0.1.3/search/index.html b/v0.1.3/search/index.html new file mode 100644 index 0000000..568c1d6 --- /dev/null +++ b/v0.1.3/search/index.html @@ -0,0 +1,2 @@ + +Search · ManoptExamples.jl

                    Loading search...

                      diff --git a/v0.1.3/search_index.js b/v0.1.3/search_index.js new file mode 100644 index 0000000..6c211e1 --- /dev/null +++ b/v0.1.3/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Difference-of-Convex-Frank-Wolfe/#A-comparison-of-the-Difference-of-Convex-and-Frank-Wolfe-Algorithm","page":"Frank Wolfe comparison","title":"A comparison of the Difference of Convex and Frank Wolfe Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Ronny Bergmann 2023-11-06","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Introduction","page":"Frank Wolfe comparison","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing ManifoldsBase, Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices mathcal P(n) with the affine invariant metric. Let q_1ldotsq_m in mathcal P(n) be a set of points and mu_1ldotsmu_m be a set of weights, such that they sum to one. We consider then","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmax_pinmathcal C h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"h(p) =\nsum_j=1^m mu_j d^2(pq_i)\nquad text where \nd^2(pq_i) = operatornametrbigl(\n log^2(p^-frac12q_jp^-frac12)\nbig)\nqquadtextandqquad\nmathcal C = pin mathcal M bar Lpreceq p preceq bar U ","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"for a lower bound L and an upper bound U for the matrices in the positive definite sense A preceq B Leftrightarrow (B-A) is positive semi-definite","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"When every one of the weights mu_1 ldots mu_m are equal, this function h is known as the of the set q_1 dots q_m.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And for our example we set","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Random.seed!(42)\nn = 20\nm = 100\nM = SymmetricPositiveDefinite(n)\nq = [rand(M) for _ in 1:m];\nw = rand(m)\nw ./=sum(w)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use as lower and upper bound the arithmetic and geometric mean L and U, respectively.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )\nU = sum( wi * qi for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p0 = (L+U)/2","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can check that it is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Common-Functions","page":"Frank Wolfe comparison","title":"Common Functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Given p in mathcal M, X in T_pmathcal M on the symmetric positive definite matrices M, this method computes the closed form solution to","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_qin mathcal C langle X log_p qrangle\n = operatorname*argmin_qin mathcal C operatornametr(Slog(YqY))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"where mathcal C = q L preceq q preceq U , S = p^-12Xp^-12, and Y=p^-12.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The solution is given by Z=X^-1Qbigl( P^mathrmT-operatornamesgn(D)_+P+hatLbigr)Q^mathrmTX^-1,@ where S=QDQ^mathrmT is a diagonalization of S, hatU-hatL=P^mathrmTP with hatL=Q^mathrmTXLXQ and hatU=Q^mathrmTXUXQ, where -mboxsgn(D)_+ is the diagonal matrix","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatornamediagbigl(\n -operatornamesgn(d_11)_+ ldots -operatornamesgn(d_nn)_+\nbigr)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and D=(d_ij).","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@doc raw\"\"\"\n closed_form_solution!(M, q, L, U, p X)\n\nCompute the closeed form solution of the constraint sub problem in place of ``q``.\n\"\"\"\nfunction closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)\n # extract p^1/2 and p^{-1/2}\n (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)\n # Compute D & Q\n e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk = QDQ'\n D = Diagonal(1.0 .* (e2.values .< 0))\n Q = e2.vectors\n #println(p)\n Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q\n Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q\n P = cholesky(Hermitian(Uprime - Lprime))\n z = P.U' * D * P.U + Lprime\n copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-Difference-of-Convex-Formulation","page":"Frank Wolfe comparison","title":"The Difference of Convex Formulation","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use g(p) = iota_mathcal C(p) as the indicator funtion of the set mathcal C. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function is_pos_def(p; atol=5e-13)\n e = eigen(Symmetric(p))\n return all((e.values .+ atol) .> 0)\nend\nfunction g(p, L, U)\n return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf\nend\nh(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"So we can first check that p0 is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"g(p0,L,U) == 0.0","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"true","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Now setting","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We look for a maximum of h, where g is minimal, i.e. g(p) is zero or in other words p in mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The gradient of h can also be implemented in closed form as","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))\nfunction grad_h!(M, X, p, w, q)\n Y = copy(M, p, X)\n zero_vector!(M, X, p)\n for (wi, qi) in zip(w,q)\n log!(M, Y, p, qi)\n Y .*= - 2.0*wi\n X .+= Y\n end\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can further define the cost, which will just be +infty outside of mathcal C. We define","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_dc(M, p) = g(p, L, U) - h(M, p, w, q)\ngrad_h!(M, X, p) = grad_h!(M, X, p, w, q)\nfunction grad_f_dc!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Here we can omit the gradient of g in the definition of operatornamegrad f, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As the last step, we can provide the closed form solver for the DC sub problem given at iteration k by","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pin mathcal C\n biglangle -operatornamegrad h(p^(k)) exp^-1_p^(k)pbigrangle","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Which we con compute","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution!(M, q, p, X)\n closed_form_solution!(M, q, L, U, p, -X)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For safety, we might want to avoid ending up at the boundary of mathcal C. That is we reduce the distance we walk towards the solution q a bit.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution_safe!(M, q, p, X)\n p_last = copy(M,p) # since p=q might be in place\n closed_form_solution!(M, q, L, U, p, -X)\n q_orig = copy(M,q) # since we do the following in place of q\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n s = 1.0\n d = distance(M, p_last, q_orig);\n # if we are close to zero, we reduce faster.\n α = d < 1/(n^2) ? 0.66 : 0.9995;\n i=0\n while (a < 0) || (b < 0)\n s *= α\n shortest_geodesic!(M, q, p_last, q_orig, s)\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n #println(\"$i a: $a, b = $b with s=$s\")\n i=i+1\n if (i>100) # safety fallback\n #@warn \" $i steps where not enough $s ($α)\\n$a $b\\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs\"\n qe = eigen(q)\n if a < 0\n qe.values .+= min(1e-8, n*abs(min(a,b)))\n else\n qe.values .-= min(1e-8, n*abs(min(a,b)))\n end\n q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n return q\n end\n end\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-DoC-solver-run","page":"Frank Wolfe comparison","title":"The DoC solver run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s compare both methods when they have the same stopping criteria","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;\n gradient=grad_f_dc!,\n sub_problem=dc_sub_solution_safe!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(300) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 30, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(p): -0.77661458292831\nAt iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.\n 18.424563 seconds (17.10 M allocations: 1.618 GiB, 4.35% gc time, 87.39% compilation time)\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 23 iterations\n\n## Parameters\n* sub solver state:\n | InplaceEvaluation()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 300: not reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\n\", 30]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s extract the final point and look at its cost","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_dc = get_solver_result(state1_dc);\nf_dc(M, p1_dc)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.784425242474807","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (1.1886583723800445e-12, 0.06669240322431051)\n (1.3411042178831775e-5, 0.0671353506908023)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For the statistics we extract the recordings from the state","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Define-the-Frank-Wolfe-functions","page":"Frank Wolfe comparison","title":"Define the Frank-Wolfe functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For Frank wolfe, the cost is just defined as -h(p) but the minimisation is constraint to mathcal C, which is enfored by the oracle.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_fw(M, p) = -h(M, p, w, q)\nfunction grad_f_fw!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend\noracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-FW-Solver-Run","page":"Frank Wolfe comparison","title":"The FW Solver Run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Similarly we can run the Frank-Wolfe algorithm with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;\n sub_problem=oracle_fw!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(10^4) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), :Cost, (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 2*10^3, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial f(x): -0.776615\n# 2000 f(x): -0.784420 |Δp|: 0.04611942377596 |grad f(p)|: 0.17693408 |Δgrad f(p)|: 0.17555618\n# 4000 f(x): -0.784421 |Δp|: 0.00372201632005 |grad f(p)|: 0.17694619 |Δgrad f(p)|: 0.00749427\n# 6000 f(x): -0.784422 |Δp|: 0.00205683506784 |grad f(p)|: 0.17695204 |Δgrad f(p)|: 0.00414088\n# 8000 f(x): -0.784422 |Δp|: 0.00140675676260 |grad f(p)|: 0.17695565 |Δgrad f(p)|: 0.00283200\n# 10000 f(x): -0.784422 |Δp|: 0.00106177438611 |grad f(p)|: 0.17695815 |Δgrad f(p)|: 0.00213746\nThe algorithm reached its maximal number of iterations (10000).\n298.173386 seconds (56.06 M allocations: 93.635 GiB, 3.50% gc time, 0.43% compilation time)\n\n# Solver state for `Manopt.jl`s Frank Wolfe Method\nAfter 10000 iterations\n\n## Parameters\n* inverse retraction method: LogarithmicInverseRetraction()\n* retraction method: ExponentialRetraction()\n* sub solver state:\n | InplaceEvaluation()\n\n## Stepsize\nDecreasingStepsize(; length=2.0, factor=1.0, subtrahend=0.0, shift=2)\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 10000: reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"f(x): %f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\n\", 2000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we take a look at this result as well","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_fw = get_solver_result(state1_fw);\nf_dc(M, p1_fw)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844220281765162","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And its feasibility","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.904818928410655e-10, 0.06659173821656107)\n (3.245654983213335e-5, 0.06713970236096602)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Statistics","page":"Frank Wolfe comparison","title":"Statistics","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We extract the recorded values","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"# DoC\niter1_dc = get_record(state1_dc, :Iteration, :Iteration)\npk_dc = get_record(state1_dc,:Iteration,:Iterate)\ncosts1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))\ndc_min = minimum(costs1_dc)\n# FW\niter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]\npk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]\ncosts1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x_k)-f^*$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-8, 10^-2),\n xaxis=:log,\n xlims=(1,10^4),\n)\nplot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label=\"Difference of Convex\")\nplot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label=\"Frank-Wolfe\")","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Literature","page":"Frank Wolfe comparison","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Pages = [\"examples/Difference-of-Convex-Frank-Wolfe.md\"]\nCanonical=false","category":"page"},{"location":"references/#Literature","page":"References","title":"Literature","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/ManoptExamples.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-of-the-Difference-of-Convex-Algorithms","page":"A Benchmark","title":"Benchmark of the Difference of Convex Algorithms","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Introduction","page":"A Benchmark","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where ghcolon mathcal M to mathbb R are geodesically convex function on the Riemannian manifold mathcal M.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#The-DC-Problem","page":"A Benchmark","title":"The DC Problem","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We start with defining the two convex functions gh and their gradients as well as the DC problem f and its gradient for the problem","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":" operatorname*argmin_pinmathcal M bigl( logbigr(det(p)bigr)bigr)^4 - bigl(log det(p) bigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where the critical points obtain a functional value of -frac14.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where mathcal M is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We first define the corresponding functions","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"g(M, p) = log(det(p))^4\nh(M, p) = log(det(p))^2\nf(M, p) = g(M, p) - h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and their gradients","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"grad_g(M, p) = 4 * (log(det(p)))^3 * p\ngrad_h(M, p) = 2 * log(det(p)) * p\ngrad_f(M, p) = grad_g(M, p) - grad_h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which we can use to verify that the gradients of g and h are correct. We use for that","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"n = 6\nM = SymmetricPositiveDefinite(n)\np0 = log(n) * Matrix{Float64}(I, n, n);\nX0 = 1 / n * Matrix{Float64}(I, n, n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"to tall both checks","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, g, grad_g, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, h, grad_h, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which both pass the test. We continue to define their inplace variants","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"function grad_g!(M, X, p)\n copyto!(M, X, p)\n X .*= 4 * (log(det(p)))^3\n return X\nend\nfunction grad_h!(M, X, p)\n copyto!(M, X, p)\n X .*= 2 * (log(det(p)))\n return X\nend\nfunction grad_f!(M, X, p)\n grad_g!(M, X, p)\n Y = copy(M, p, X)\n grad_h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And compare times for both algorithms, with a bit of debug output.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dca = difference_of_convex_algorithm(\n M,\n f,\n g,\n grad_h!,\n p0;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n (:GradientNorm, \" |grad_f(p)|: %1.9f\"),\n (:Change, \" |δp|: %1.9f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState(M, copy(M, p0)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470\n# 5 f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127\n# 10 f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103\n# 15 f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.000000003 |δp|: 0.000000011\nThe algorithm reached approximately critical point after 24 iterations; the gradient norm (3.9079528504063575e-11) is less than 1.0e-10.\n 7.078460 seconds (8.15 M allocations: 560.347 MiB, 4.11% gc time, 98.71% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The cost is","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dca)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Similarly the DCPPA performs","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dcppa = difference_of_convex_proximal_point(\n M,\n grad_h!,\n p0;\n g=g,\n grad_g=grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n \" \",\n (:GradientNorm, \"|grad_f(p)|: %1.10f\"),\n (:Change, \"|δp|: %1.10f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState(M, copy(M, p0)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470 \n# 5 f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692\n# 10 f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316\n# 15 f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968\n# 25 f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530\n# 30 f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048\n# 35 f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001\nThe algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.\n 1.770714 seconds (1.78 M allocations: 124.191 MiB, 2.11% gc time, 95.56% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dcppa)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-I:-Time-comparison","page":"A Benchmark","title":"Benchmark I: Time comparison","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()\ndcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()\nN_max=14\nN = 2:N_max","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and run a benchmark for both algorithms","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"for n in N\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I, n, n)\n bdca = @benchmark difference_of_convex_algorithm(\n $Mn,\n $f,\n $g,\n $grad_h!,\n $pn;\n grad_g=$grad_g!,\n gradient=$grad_f!,\n evaluation=InplaceEvaluation(),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dca_benchmarks[n] = bdca\n bdcppa = @benchmark difference_of_convex_proximal_point(\n $Mn,\n $grad_h!,\n $pn;\n g=$g,\n grad_g=$grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state=TrustRegionsState($Mn, copy($Mn, $pn)),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dcppa_benchmarks[n] = bdcppa\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]\ndca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]\ndcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Time (sec.)\")\nplot!(dims, dca_times; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims, dcppa_times; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-II:-Iterations-and-cost.","page":"A Benchmark","title":"Benchmark II: Iterations and cost.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"N2 = [5,10,20,40,80]\ndims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]\ndca_iterations = Dict{Int,Int}()\ndca_costs = Dict{Int,Vector{Float64}}()\ndcppa_iterations = Dict{Int,Int}()\ndcppa_costs = Dict{Int,Vector{Float64}}()","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time for n in N2\n println(n)\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I,n,n);\n @time dca_st = difference_of_convex_algorithm(\n Mn, f, g, grad_h!, pn;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation = InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state = TrustRegionsState(Mn, copy(Mn, pn)),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dca_costs[n] = get_record(dca_st, :Iteration, :Cost)\n dca_iterations[n] = length(dca_costs[n])\n @time dcppa_st = difference_of_convex_proximal_point(\n Mn, grad_h!, pn;\n g=g,\n grad_g=grad_g!,\n λ = i -> 1/(2*n),\n cost = f,\n gradient= grad_f!,\n evaluation = InplaceEvaluation(),\n stepsize = ConstantStepsize(1.0),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_state = TrustRegionsState(Mn, copy(Mn, pn)),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)\n dcppa_iterations[n] = length(dcppa_costs[n])\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The iterations are like","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Iterations\")\nplot!(dims2, [values(dca_iterations)...]; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims2, [values(dcppa_iterations)...]; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And for the developtment of the cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where we can see that the DCA needs less iterations than the DCPPA.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Literature","page":"A Benchmark","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Pages = [\"examples/Difference-of-Convex-Benchmark.md\"]\nCanonical=false","category":"page"},{"location":"objectives/#List-of-Objectives-defined-for-the-Examples","page":"Objectives","title":"List of Objectives defined for the Examples","text":"","category":"section"},{"location":"objectives/#Rayleigh","page":"Objectives","title":"Rayleigh Quotient on the Sphere","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rayleigh example (TODO) to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RayleighQuotient.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RayleighQuotientCost","page":"Objectives","title":"ManoptExamples.RayleighQuotientCost","text":"RayleighQuotientCost\n\nA functor representing the Rayleigh Quotient cost function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either\n\nf(p) = p^mathrmTApqquad p 𝕊^n-1\n\nor extended into the embedding as\n\nf(x) = x^mathrmTAx qquad x ℝ^n\n\nwhich is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of 𝕊^n-1.\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientCost(A)\n\nCreate the Rayleigh cost function.\n\nSee also\n\nRayleighQuotientGrad!!, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientGrad!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientGrad!!","text":"RayleighQuotientGrad!!\n\nA functor representing the Rayleigh Quotient gradient function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either\n\noperatornamegrad f(p) = 2 Ap - 2 (p^mathrmTAp)*pqquad p 𝕊^n-1\n\nor taking the Euclidean gradient of the Rayleigh quotient on the sphere as\n\nf(x) = 2Ax qquad x ℝ^n\n\nFor details, see Example 3.62 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientGrad!!(A)\n\nCreate the Rayleigh quotient gradient function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientHess!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientHess!!","text":"RayleighQuotientHess!!\n\nA functor representing the Rayleigh Quotient Hessian.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either\n\noperatornameHess f(p)X = 2 bigl(AX - (p^mathrmTAX)p - (p^mathrmTAp)Xbigr)qquad p 𝕊^n-1 X in T_p𝕊^n-1\n\nor taking the Euclidean Hessian of the Rayleigh quotient on the sphere as\n\n^2f(x)V = 2AV qquad x V ℝ^n\n\nFor details, see Example 5.27 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientHess!!(A)\n\nCreate the Rayleigh quotient Hessian function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientGrad!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective-Tuple{AbstractVector}","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also 📖 Rosenbrock (with slightly different parameter naming).\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\ngrad_f!!(M,p)\ngrad_f!!(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockMetric","page":"Objectives","title":"ManoptExamples.RosenbrockMetric","text":"RosenbrockMetric <: AbstractMetric\n\nA metric related to the Rosenbrock problem, where the metric at a point pmathbb R^2 is given by\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\nwhere the mathrmRb stands for Rosenbrock\n\n\n\n\n\n","category":"type"},{"location":"objectives/#Base.exp-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Number}","page":"Objectives","title":"Base.exp","text":"q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)\nexp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)\n\nCompute the exponential map with respect to the RosenbrockMetric.\n\n q = beginpmatrix p_1 + X_1 p_2+X_2+X_1^2endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Base.log-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any}","page":"Objectives","title":"Base.log","text":"X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)\nlog!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)\n\nCompute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any j 1m\n\nX = beginpmatrix\n q_1 - p_1 \n q_2 - p_2 + (q_1 - p_1)^2\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.inverse_local_metric-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.inverse_local_metric","text":"inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG^-1_p =\nbeginpmatrix\n 1 2p_1\n 2p_1 1+4p_1^2 \nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.local_metric-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.local_metric","text":"local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.change_representer-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, ManifoldsBase.EuclideanMetric, Any, Any}","page":"Objectives","title":"ManifoldsBase.change_representer","text":"Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)\nchange_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)\n\nGiven the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.\n\nthis function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.inner-Tuple{Manifolds.MetricManifold{ℝ, Manifolds.Euclidean{Tuple{2}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Any}","page":"Objectives","title":"ManifoldsBase.inner","text":"inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)\n\nCompute the inner product on mathbb R^2 with respect to the RosenbrockMetric, i.e. for XY in T_pmathcal M we have\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1\n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Literature","page":"Objectives","title":"Literature","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Pages = [\"objectives/index.md\"]\nCanonical=false","category":"page"},{"location":"examples/#List-of-Examples","page":"Overview","title":"List of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation Comment\nA Benchmark for Difference of Convex contains a few simple functions \nSolving Rosenbrock with Difference of Convex DoC split of Rosenbrock 📚 uses a Rosenbrock based metric\nDifference of Convex vs. Frank-Wolfe closed-form sub solver\nRiemannian Mean f, operatornamegradf (A/I), objective 📚 \nRobust PCA f, operatornamegradf (A/I), objective 📚 \nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚 \nThe Rayleigh Quotient f, operatornamegradf (A/I), operatornameHessf (A/I), objective 📚 ","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Solving-Rosenbrock-with-the-Difference-of-Convex-Algorithm","page":"Rosenbrock Metric","title":"Solving Rosenbrock with the Difference of Convex Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Introduction","page":"Rosenbrock Metric","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Both the Rosenbrock problem","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":" operatorname*argmin_xinmathbb R^2 abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where ab0 and usually b=1 and a gg b, we know the minimizer x^* = (bb^2)^mathrmT, and also the (Euclidean) gradient","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"nabla f(x) =\n beginpmatrix\n 4a(x_1^2-x_2) -2a(x_1^2-x_2)\n endpmatrix\n +\n beginpmatrix\n 2(x_1-b) 0\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Furthermore, the RosenbrockMetric can be used on mathbb R^2, that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"XY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"The Euclidean Gradient\nThe Riemannian gradient descent with respect to the RosenbrockMetric\nThe Euclidean Difference of Convex Algorithm\nThe Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Where we obtain a difference of convex problem by writing","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f(x) = abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2\n = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 - bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"g(x) = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 quadtext and quad h(x) = bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nimport Manopt: set_manopt_parameter!\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\ngreen = paul_tol[\"mutedgreen\"]\nsand = paul_tol[\"mutedsand\"]\nteal = paul_tol[\"mutedteal\"]\ngrey = paul_tol[\"mutedgrey\"]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"To emphasize the effect, we choose a quite large value of a.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"a = 2*10^5\nb = 1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and use the starting point and a direction to check gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"p0 = [0.1, 0.2]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Euclidean Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Euclidean gradient we can just use the same approach as in the Rosenbrock example","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M = ℝ^2\nf = ManoptExamples.RosenbrockCost(M; a=a, b=b)\n∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"define a common debug vector","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"debug_vec = [\n (:Iteration, \"# %-8d \"),\n (:Cost, \"F(x): %1.4e\"),\n \" \",\n (:Change, \"|δp|: %1.4e | \"),\n (:GradientNorm, \"|grad f|: %1.6e\"),\n :Stop,\n \"\\n\",\n ]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and call the gradient descent algorithm","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^7],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03\n# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04\n# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06\n# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08\n# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 53073227 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLineseach() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\n\", 10000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Riemannian Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Riemannian case, we define","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"MetricManifold(Euclidean(2; field = ℝ), ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and the gradient is now adopted to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_f!(M, X, p)\n ∇f!!(M, X, p)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_f(M, p)\n X = zero_vector(M, p)\n return grad_f!(M, X, p)\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^6],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 1000000 F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04\n# 2000000 F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 2443750 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLineseach() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Euclidean Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the convex case, we have to first introduce the two parts of the cost.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;\nf2(M, p; a=100, b=1) = (p[1] - b[1])^2;\ng(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)\nh(M, p; a=100, b=1) = f2(M, p; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and their (Euclidan) gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function ∇h!(M, X, p; a=100, b=1)\n X[1] = 2*(p[1]-b)\n X[2] = 0\n return X\nend\nfunction ∇h(M, p; a=100, b=1)\n X = zero(p)\n ∇h!(M, X, p; a=a, b=b)\n return X\nend\nfunction ∇g!(M, X, p; a=100, b=1)\n X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)\n X[2] = -2*a*(p[1]^2-p[2])\n return X\nend\nfunction ∇g(M, p; a=100, b=1)\n X = zero(p)\n ∇g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and we define for convenience","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docE_g(M, p) = g(M, p; a=a, b=b)\ndocE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)\ndocE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)\ndocE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)\nfunction docE_∇f!(M, X, p)\n Y = zero_vector(M, p)\n docE_∇g!(M, X, p)\n docE_∇h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we call the difference of convex algorithm on Eucldiean space mathbb R^2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"E_doc_state = difference_of_convex_algorithm(\n M, docE_f, docE_g, docE_∇h!, p0;\n gradient=docE_∇f!,\n grad_g = docE_∇g!,\n debug=[debug_vec..., 10^4],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_hess=nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000 F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04\n# 20000 F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 26549 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLineseach() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\n\", 10000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Riemannian Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"We first have to again defined the gradients with respect to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_h!(M, X, p; a=100, b=1)\n ∇h!(M, X, p; a=a, b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_h(M, p; a=100, b=1)\n X = zero(p)\n grad_h!(M, X, p; a=a, b=b)\n return X\nend\nfunction grad_g!(M, X, p; a=100, b=1)\n ∇g!(M, X, p; a=a,b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_g(M, p; a=100, b=1)\n X = zero(p)\n grad_g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For X in partial h(p^(k)) the sunproblem top determine p^(k+1) reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatorname*argmin_pinmathcal M g(p) - langle X log_p^(k)prangle","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with X = operatornamegrad h(p^(k)) that","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"phi(p) = g(p) - langle X log_p^(k)prangle\n= abigl( p_1^2-p_2bigr)^2\n + 2bigl(p_1-bbigr)^2 - 2(p^(k)_1-b)p_1 + 2(p^(k)_1-b)p^(k)_1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"its Euclidean gradient reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatornamegradphi(p) =\n nabla varphi(p)\n = beginpmatrix\n 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^(k)_1-b)\n -2a(p_1^2-p_2)\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where we can again employ the gradient conversion from before to obtain the Riemannian gradient.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"mutable struct SubGrad{P,T,V}\n pk::P\n Xk::T\n a::V\n b::V\nend\nfunction (ϕ::SubGrad)(M, p)\n X = zero_vector(M, p)\n ϕ(M, X, p)\n return X\nend\nfunction (ϕ::SubGrad)(M, X, p)\n X .= [\n 4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),\n -2 * ϕ.a * (p[1]^2 - p[2]),\n ]\n riemannian_gradient!(M, X, p, X) # convert\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And in orer to update the subsolvers gradient correctly, we have to overwrite","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)\nset_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we again introduce for ease of use","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docR_g(M, p) = g(M, p; a=a, b=b)\ndocR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)\ndocR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)\ndocR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)\nfunction docR_grad_f!(M, X, p)\n Y = zero_vector(M, p)\n docR_grad_g!(M, X, p)\n docR_grad_h!(M, Y, p)\n X .-= Y\n return X\nend\ndocR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_doc_state = difference_of_convex_algorithm(\n M_rb, docR_f, docR_g, docR_grad_h!, p0;\n gradient=docR_grad_f!,\n grad_g = docR_grad_g!,\n debug=[debug_vec..., 10^6],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_grad=docR_sub_grad,\n sub_hess = nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 1235 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLineseach() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Comparison-in-Iterations","page":"Rosenbrock Metric","title":"Comparison in Iterations","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x)$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-16, 5*1e5),\n xaxis=:log,\n xlims=(1,10^8),\n)\nscatter!(fig, [1,], [f(M,p0),], label=raw\"$f(p_0)$\", markercolor=grey)\negi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries\negc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries\nplot!(fig, egi, egc, color=teal, label=\"Euclidean GD\")\n#\nrgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries\nrgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries\nplot!(fig, rgi, rgc, color=indigo, label=\"Riemannian GD\")\n#\nedi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries\nedc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries\nplot!(fig, edi, edc, color=sand, label=\"Euclidean DoC\")\n#\nrdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries\nrdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries\nplot!(fig, rdi, rdc, color=green, label=\"Riemannian DoC\")","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Literature","page":"Rosenbrock Metric","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Pages = [\"examples/Difference-of-Convex-Rosenbrock.md\"]\nCanonical=false","category":"page"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny BergmannLaura Weigl 2023-07-02","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139397\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.430690947905521","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412973804873698","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 2023-01-03","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field = ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLineseach() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 44 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector trnasport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |grad f| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"2.359559352025148e-14","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 2023-07-02","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794750908\n 0.00653160068349042\n 0.7267799820871861","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794750908\n 0.00653160068349042\n 0.7267799820871861","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393613136017\n 0.006531541407458413\n 0.7267799052788726","category":"page"},{"location":"examples/RayleighQuotient/#The-Rayleigh-Quotient","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Ronny Bergmann 2024-03-09","category":"page"},{"location":"examples/RayleighQuotient/#Introduction","page":"The Rayleigh Quotient","title":"Introduction","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For a symmetric matrix A in mathbb R^ntimes n we consider the 📖 Rayleigh Quotient","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"operatorname*argmin_x in mathbb R^n backslash 0\nfracx^mathrmTAxlVert x rVert^2","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"On the sphere we can omit the denominator and obtain","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f(p) = p^mathrmTApqquad p 𝕊^n-1","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"which by itself we can again continue in the embedding as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"tilde f(x) = x^mathrmTAxqquad x in mathbb R^n","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This cost has the nice feature that at the minimizer p^*inmathbb S^n-1 the function falue f(p^*) is the smalles eigenvalue of A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For the embedded function tilde f the gradient and Hessian can be computed with classical methods as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\ntilde f(x) = 2Ax qquad x ℝ^n\n\n^2tilde f(x)V = 2AV qquad x V ℝ^n\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold mathcal M = mathbb S^n-1 are given by","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\noperatornamegrad f(p) = 2Ap - 2(p^mathrmTAp)*pqquad p 𝕊^n-1\n\noperatornameHess f(p)X = 2AX - 2(p^mathrmTAX)p - 2(p^mathrmTAp)Xqquad p 𝕊^n-1 X in T_p𝕊^n-1\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first generate an example martrx A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random\nRandom.seed!(42)\nn = 500\nA = Symmetric(randn(n,n))","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And the manifolds","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"M = Sphere(n-1)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Sphere(499, ℝ)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"E = get_embedding(M)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean(500; field = ℝ)","category":"page"},{"location":"examples/RayleighQuotient/#Setup-the-corresponding-functions","page":"The Rayleigh Quotient","title":"Setup the corresponding functions","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute f is called with M as their first argument and tilde f if called with E.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We instantiate","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f = ManoptExamples.RayleighQuotientCost(A)\ngrad_f = ManoptExamples.RayleighQuotientGrad!!(A)\nHess_f = ManoptExamples.RayleighQuotientHess!!(A)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"p0 = [1.0, zeros(n-1)...]\nX = zero_vector(M, p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"we can both call","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Y = grad_f(M,p0) # Allocates memory\ngrad_f(M,X,p0) # Computes in place of X and returns the result in X.\nnorm(M, p0, X-Y)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"0.0","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"λ = min(eigvals(A)...)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"-44.838605046940486","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-on-gradient-information","page":"The Rayleigh Quotient","title":"A Solver based on gradient information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient nabla tilde f. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n return_state=true,\n)\nq1 = get_solver_result(s)\ns","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 50 f(x): -44.206244|grad f(p)|:2.387846624353276\n# 100 f(x): -44.546883|grad f(p)|:2.256125365459942\n# 150 f(x): -44.765220|grad f(p)|:1.3051578932969472\n# 200 f(x): -44.824730|grad f(p)|:0.5758153603739719\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLineseach() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n [(:Iteration, \"# %-6d\"), (:Cost, \"f(x): %f\"), (:GradientNorm, \"|grad f(p)|:%s\"), \"\n\", 50]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q2 = gradient_descent(M, f, grad_f, p0;\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n)\n#Test that both are the same\nisapprox(M, q1,q2)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 50 f(x): -44.206244|grad f(p)|:2.387846624353294\n# 100 f(x): -44.546883|grad f(p)|:2.2561253654599915\n# 150 f(x): -44.765220|grad f(p)|:1.305157893296954\n# 200 f(x): -44.824730|grad f(p)|:0.5758153603739878\n\ntrue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We can also benchmark both","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 9 samples with 1 evaluation.\n Range (min … max): 570.377 ms … 600.167 ms ┊ GC (min … max): 7.71% … 7.11%\n Time (median): 580.657 ms ┊ GC (median): 7.63%\n Time (mean ± σ): 582.121 ms ± 8.723 ms ┊ GC (mean ± σ): 7.64% ± 0.26%\n\n █ █ █ █ █ █ ██ █ \n █▁▁▁▁▁▁▁█▁▁▁▁▁▁█▁█▁▁▁█▁▁█▁▁▁▁▁▁▁▁▁██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 570 ms Histogram: frequency by time 600 ms <\n\n Memory estimate: 1.13 GiB, allocs estimate: 3852.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 51 samples with 1 evaluation.\n Range (min … max): 93.870 ms … 108.205 ms ┊ GC (min … max): 0.00% … 0.00%\n Time (median): 97.246 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 98.757 ms ± 3.496 ms ┊ GC (mean ± σ): 1.21% ± 1.94%\n\n ▁ █▄ ▄▄█▁ ▄ ▁ ▄ ▁ \n ▆▁▁▆▆█▆▆▆██▆████▆▁▁█▆▁▁▁▆▆▁▁▁▁▆▆█▁▁▆█▁▁█▁▁▆▁▁▆▁▁▁▁▁▆▆▁▁▁▁▁▁▆ ▁\n 93.9 ms Histogram: frequency by time 107 ms <\n\n Memory estimate: 12.02 MiB, allocs estimate: 3246.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see, that the conversion costs a bit of performance, but if the Euclidean gradient is easier to compute, this might still be ok.","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-(also)-on-(approximate)-Hessian-information","page":"The Rayleigh Quotient","title":"A Solver based (also) on (approximate) Hessian information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To also involve the Hessian, we consider the trust regions solver with three cases:","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean, approximating the Hessian\nEuclidean, providing the Hessian\nRiemannian, providing the Hessian but also using in-place evaluations.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -43.522431|grad f(p)|:9.779418323323288\n# 20 f(x): -44.838605|grad f(p)|:8.451144677175197e-12","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -43.522431|grad f(p)|:9.779418323423874\n# 20 f(x): -44.838605|grad f(p)|:1.1638484603322704e-11","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;\n evaluation=InplaceEvaluation(),\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -43.522431|grad f(p)|:9.779418323423881\n# 20 f(x): -44.838605|grad f(p)|:1.1445271377332597e-11","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $p0;\n objective_type=:Euclidean,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 3 samples with 1 evaluation.\n Range (min … max): 1.929 s … 1.971 s ┊ GC (min … max): 9.24% … 9.07%\n Time (median): 1.939 s ┊ GC (median): 9.22%\n Time (mean ± σ): 1.947 s ± 22.028 ms ┊ GC (mean ± σ): 9.29% ± 0.25%\n\n █ █ █ \n █▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 1.93 s Histogram: frequency by time 1.97 s <\n\n Memory estimate: 3.81 GiB, allocs estimate: 21954.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n objective_type=:Euclidean\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 4 samples with 1 evaluation.\n Range (min … max): 1.331 s … 1.443 s ┊ GC (min … max): 9.48% … 9.17%\n Time (median): 1.342 s ┊ GC (median): 9.33%\n Time (mean ± σ): 1.365 s ± 52.784 ms ┊ GC (mean ± σ): 9.25% ± 0.19%\n\n ██ █ █ \n ██▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 1.33 s Histogram: frequency by time 1.44 s <\n\n Memory estimate: 2.56 GiB, allocs estimate: 19283.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 112 samples with 1 evaluation.\n Range (min … max): 40.403 ms … 68.382 ms ┊ GC (min … max): 0.00% … 0.00%\n Time (median): 43.043 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 44.695 ms ± 3.705 ms ┊ GC (mean ± σ): 3.51% ± 4.37%\n\n ▄▆█ \n ▅▃▁▅▁▄█████▆▇▃▃▃▄▁▃▁▄▄▁▃▄▅█▅▃█▄▄▃▄▁▅▁▃▁▁▁▁▁▃▃▁▁▁▁▁▁▁▁▁▁▁▃▃▃ ▃\n 40.4 ms Histogram: frequency by time 54.3 ms <\n\n Memory estimate: 16.23 MiB, allocs estimate: 6802.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q1, q) for q ∈ [q2,q3] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 1.5505190490543112e-15\n 0.1301942153125503","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q3, q) for q ∈ [q4,q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 5.325642276241738e-14\n 5.1713218623657045e-14","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Which we can also see in the final cost, comparing it to the Eigenvalue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"5-element Vector{Float64}:\n 0.013874911807278067\n 0.01387491180739886\n 6.679101716144942e-13\n -4.106937012693379e-12\n -3.964828465541359e-12","category":"page"},{"location":"examples/RayleighQuotient/#Summary","page":"The Rayleigh Quotient","title":"Summary","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.","category":"page"},{"location":"examples/RayleighQuotient/#Literature","page":"The Rayleigh Quotient","title":"Literature","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Pages = [\"examples/RayleighQuotient.md\"]\nCanonical=false","category":"page"},{"location":"#Welcome-to-ManoptExample.jl","page":"Home","title":"Welcome to ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"CurrentModule = ManoptExamples","category":"page"},{"location":"","page":"Home","title":"Home","text":"ManoptExamples.ManoptExamples","category":"page"},{"location":"#ManoptExamples.ManoptExamples","page":"Home","title":"ManoptExamples.ManoptExamples","text":"🏔️⛷️ ManoptExamples.jl – A collection of research and tutorial example problems for Manopt.jl\n\n📚 Documentation: juliamanifolds.github.io/ManoptExamples.jl\n📦 Repository: github.com/JuliaManifolds/ManoptExamples.jl\n💬 Discussions: github.com/JuliaManifolds/ManoptExamples.jl/discussions\n🎯 Issues: github.com/JuliaManifolds/ManoptExamples.jl/issues\n\n\n\n\n\n","category":"module"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/v0.1.3/siteinfo.js b/v0.1.3/siteinfo.js new file mode 100644 index 0000000..2500393 --- /dev/null +++ b/v0.1.3/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.3"; diff --git a/v0.1.4/.documenter-siteinfo.json b/v0.1.4/.documenter-siteinfo.json new file mode 100644 index 0000000..68589e7 --- /dev/null +++ b/v0.1.4/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.9.4","generation_timestamp":"2023-12-12T06:52:15","documenter_version":"1.2.1"}} \ No newline at end of file diff --git a/v0.1.4/assets/documenter.js b/v0.1.4/assets/documenter.js new file mode 100644 index 0000000..f531160 --- /dev/null +++ b/v0.1.4/assets/documenter.js @@ -0,0 +1,889 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', + 'minisearch': 'https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let timer = 0; +var isExpanded = true; + +$(document).on("click", ".docstring header", function () { + let articleToggleTitle = "Expand docstring"; + + debounce(() => { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function () { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'minisearch'], function($, minisearch) { + +// In general, most search related things will have "search" as a prefix. +// To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +let results = []; +let timer = undefined; + +let data = documenterSearchIndex["docs"].map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; +}); + +// list below is the lunr 2.1.3 list minus the intersect with names(Base) +// (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) +// ideally we'd just filter the original list but it's not available as a variable +const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", +]); + +let index = new minisearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with search results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + boost: { title: 100 }, + fuzzy: 2, + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + } + + return word ?? null; + }, + tokenize: (string) => string.split(/[\s\-\.]+/), + }, +}); + +index.addAll(data); + +let filters = [...new Set(data.map((x) => x.category))]; +var modal_filters = make_modal_body_filters(filters); +var filter_results = []; + +$(document).on("keyup", ".documenter-search-input", function (event) { + // Adding a debounce to prevent disruptions from super-speed typing! + debounce(() => update_search(filter_results), 300); +}); + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + $(this).removeClass("search-filter-selected"); + } else { + $(this).addClass("search-filter-selected"); + } + + // Adding a debounce to prevent disruptions from crazy clicking! + debounce(() => get_filters(), 300); +}); + +/** + * A debounce function, takes a function and an optional timeout in milliseconds + * + * @function callback + * @param {number} timeout + */ +function debounce(callback, timeout = 300) { + clearTimeout(timer); + timer = setTimeout(callback, timeout); +} + +/** + * Make/Update the search component + * + * @param {string[]} selected_filters + */ +function update_search(selected_filters = []) { + let initial_search_body = ` +
                      Type something to get started!
                      + `; + + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + results = index.search(querystring, { + filter: (result) => { + // Filtering results + if (selected_filters.length === 0) { + return result.score >= 1; + } else { + return ( + result.score >= 1 && selected_filters.includes(result.category) + ); + } + }, + }); + + let search_result_container = ``; + let search_divider = `
                      `; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + results.forEach(function (result) { + if (result.location) { + // Checking for duplication of results for the same page + if (!links.includes(result.location)) { + search_results += make_search_result(result, querystring); + count++; + } + + links.push(result.location); + } + }); + + let result_count = `
                      ${count} result(s)
                      `; + + search_result_container = ` +
                      + ${modal_filters} + ${search_divider} + ${result_count} +
                      + ${search_results} +
                      +
                      + `; + } else { + search_result_container = ` +
                      + ${modal_filters} + ${search_divider} +
                      0 result(s)
                      +
                      +
                      No result found!
                      + `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + filter_results = []; + modal_filters = make_modal_body_filters(filters, filter_results); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(initial_search_body); + } +} + +/** + * Make the modal filter html + * + * @param {string[]} filters + * @param {string[]} selected_filters + * @returns string + */ +function make_modal_body_filters(filters, selected_filters = []) { + let str = ``; + + filters.forEach((val) => { + if (selected_filters.includes(val)) { + str += `${val}`; + } else { + str += `${val}`; + } + }); + + let filter_html = ` +
                      + Filters: + ${str} +
                      + `; + + return filter_html; +} + +/** + * Make the result component given a minisearch result data object and the value of the search input as queryString. + * To view the result object structure, refer: https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ +function make_search_result(result, querystring) { + let search_divider = `
                      `; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + + let textindex = new RegExp(`\\b${querystring}\\b`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`\\b${querystring}\\b`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
                      +
                      ${result.title}
                      +
                      ${result.category}
                      +
                      +

                      + ${display_result} +

                      +
                      + ${display_link} +
                      +
                      + ${search_divider} + `; + + return result_div; +} + +/** + * Get selected filters, remake the filter html and lastly update the search modal + */ +function get_filters() { + let ele = $(".search-filters .search-filter-selected").get(); + filter_results = ele.map((x) => $(x).text().toLowerCase()); + modal_filters = make_modal_body_filters(filters, filter_results); + update_search(filter_results); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let search_modal_header = ` + +`; + +let initial_search_body = ` +
                      Type something to get started!
                      +`; + +let search_modal_footer = ` +
                      + + Ctrl + + / to search + + esc to close +
                      +`; + +$(document.body).append( + ` + + ` +); + +document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); +}); + +document.querySelector(".close-search-modal").addEventListener("click", () => { + closeModal(); +}); + +$(document).on("click", ".search-result-link", function () { + closeModal(); +}); + +document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; +}); + +// Functions to open and close a modal +function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); +} + +function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
                      Type something to get started!
                      + `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); +} + +document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "" + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "" + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/v0.1.4/assets/themes/documenter-dark.css b/v0.1.4/assets/themes/documenter-dark.css new file mode 100644 index 0000000..9f5449f --- /dev/null +++ b/v0.1.4/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-info-light{color:#ebf7ff !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#b9e2fe !important}.has-background-info-light{background-color:#ebf7ff !important}.has-text-info-dark{color:#0e9dfb !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#40b1fc !important}.has-background-info-dark{background-color:#0e9dfb !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-success-light{color:#ebfff3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#b8ffd6 !important}.has-background-success-light{background-color:#ebfff3 !important}.has-text-success-dark{color:#00eb64 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#1fff7e !important}.has-background-success-dark{background-color:#00eb64 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-warning-light{color:#fffaeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#ffedb8 !important}.has-background-warning-light{background-color:#fffaeb !important}.has-text-warning-dark{color:#d19c00 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffbf05 !important}.has-background-warning-dark{background-color:#d19c00 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-danger-light{color:#fdeeec !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fac3bd !important}.has-background-danger-light{background-color:#fdeeec !important}.has-text-danger-dark{color:#ec311d !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f05c4c !important}.has-background-danger-dark{background-color:#ec311d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:#024c7d;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#def2fe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#d2edfe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:#008438;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#deffec;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#d1ffe5;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:#ad8100;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fff7de;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fff3d1;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#fce3e0;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#fcd8d5;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#ebf7ff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#0e9dfb}html.theme--documenter-dark .message.is-success{background-color:#ebfff3}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#00eb64}html.theme--documenter-dark .message.is-warning{background-color:#fffaeb}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#d19c00}html.theme--documenter-dark .message.is-danger{background-color:#fdeeec}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#ec311d}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#024c7d;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#024c7d}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#024c7d}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#008438;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#008438}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#008438}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#ad8100;color:#fff}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ad8100}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#ad8100}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#9e1b0d}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#9e1b0d}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#024c7d !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#008438 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#ad8100 !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#9e1b0d !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;overflow:auto}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:whitesmoke;background-color:#33415580;border-radius:0.6rem}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/v0.1.4/assets/themes/documenter-light.css b/v0.1.4/assets/themes/documenter-light.css new file mode 100644 index 0000000..2f168c7 --- /dev/null +++ b/v0.1.4/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-info-light{color:#ecf7fe !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#bde2fa !important}.has-background-info-light{background-color:#ecf7fe !important}.has-text-info-dark{color:#0e72b4 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#1190e3 !important}.has-background-info-dark{background-color:#0e72b4 !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-success-light{color:#eefcf3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c2f4d4 !important}.has-background-success-light{background-color:#eefcf3 !important}.has-text-success-dark{color:#198f43 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#21bb57 !important}.has-background-success-dark{background-color:#198f43 !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#947600 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#c79f00 !important}.has-background-warning-dark{background-color:#947600 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-danger-light{color:#ffeceb !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#ffbbb8 !important}.has-background-danger-light{background-color:#ffeceb !important}.has-text-danger-dark{color:#f50c00 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#ff3429 !important}.has-background-danger-dark{background-color:#f50c00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:#209cee;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e0f1fd;border-color:transparent;color:#0e72b4}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#d4ecfc;border-color:transparent;color:#0e72b4}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:#22c35b;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#eefcf3;color:#198f43}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e3faeb;border-color:transparent;color:#198f43}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#d8f8e3;border-color:transparent;color:#198f43}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:#ffdd57;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:#da0b00;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#ffe0de;border-color:transparent;color:#f50c00}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#ffd3d1;border-color:transparent;color:#f50c00}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-success.is-light{background-color:#eefcf3;color:#198f43}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#da0b00;color:#fff}.notification.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ecf7fe;color:#0e72b4}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#eefcf3;color:#198f43}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#947600}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#ffeceb;color:#f50c00}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#ecf7fe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#0e72b4}.message.is-success{background-color:#eefcf3}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#198f43}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#ffeceb}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#f50c00}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#209cee;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#209cee}.panel.is-info .panel-block.is-active .panel-icon{color:#209cee}.panel.is-success .panel-heading{background-color:#22c35b;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#22c35b}.panel.is-success .panel-block.is-active .panel-icon{color:#22c35b}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#da0b00;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#da0b00}.panel.is-danger .panel-block.is-active .panel-icon{color:#da0b00}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#209cee !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#22c35b !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#ffdd57 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#da0b00 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;overflow:auto}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/v0.1.4/assets/themeswap.js b/v0.1.4/assets/themeswap.js new file mode 100644 index 0000000..9f5eebe --- /dev/null +++ b/v0.1.4/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/v0.1.4/assets/warner.js b/v0.1.4/assets/warner.js new file mode 100644 index 0000000..3f6f5d0 --- /dev/null +++ b/v0.1.4/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
                      Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/v0.1.4/changelog/index.html b/v0.1.4/changelog/index.html new file mode 100644 index 0000000..2dd5873 --- /dev/null +++ b/v0.1.4/changelog/index.html @@ -0,0 +1,2 @@ + +Changelog · ManoptExamples.jl

                      Changelog

                      All notable changes to this Julia package will be documented in this file.

                      The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

                      [0.1.3] – 11/12/2023

                      Added

                      • Total variation Minimization cost, proxes, and an example
                      • Bézier curve cost, gradients, and an example.

                      [0.1.3] – 16/09/2023

                      Added

                      • Rayleigh Quotient functions added
                      • an example illustrating Euclidean gradient/HEssian conversion
                      • Add Literature with DocumenterCitations

                      [0.1.2] – 13/06/2023

                      Added

                      • Update examples to use Quarto
                      • Add DC examples

                      [0.1.1] – 01/03/2023

                      Added

                      • Rosenbrock function and examples

                      [0.1.0] – 18/02/2023

                      Added

                      • Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested
                      • Setup Documentation to provide one example Quarto file for every example objective to illustrate how to use them
                      diff --git a/v0.1.4/contributing/index.html b/v0.1.4/contributing/index.html new file mode 100644 index 0000000..3ac4d10 --- /dev/null +++ b/v0.1.4/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

                      Contributing to Manopt.jl

                      First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

                      The following is a set of guidelines to ManoptExamples.jl.

                      Table of Contents

                      I just have a question

                      The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

                      How can I file an issue?

                      If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

                      How can I contribute?

                      Add an objective

                      The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

                      If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

                      If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

                      • cost functions are always of the form cost_ and a fitting name
                      • gradient functions are always of the the gradient_ and a fitting name, followed by an !

                      for in-place gradients and by !! if it is a struct that can provide both.

                      It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

                      Add an example

                      If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

                      Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

                      Code style

                      We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

                      We also follow a few internal conventions:

                      • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
                      • within a file the structs should come first and functions second. The only exception are constructors for the structs
                      • within both blocks an alphabetical order is preferable.
                      • The above implies that the mutating variant of a function follows the non-mutating variant.
                      • There should be no dangling = signs.
                      • Always add a newline between things of different types (struct/method/const).
                      • Always add a newline between methods for different functions (including in-place/non-mutating variants).
                      • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
                      • All import/using/include should be in the main module file.
                      • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
                      • the Quarto Markdown files are excluded from this formatting.
                      diff --git a/v0.1.4/data/index.html b/v0.1.4/data/index.html new file mode 100644 index 0000000..d3954a4 --- /dev/null +++ b/v0.1.4/data/index.html @@ -0,0 +1,13 @@ + +Data · ManoptExamples.jl

                      Data sets

                      Signals on manifolds

                      ManoptExamples.LemniscateMethod
                      Lemniscate(t::Float; kwargs...)
                      +Lemniscate(n::integer; interval=[0.0, 2π], kwargs...)

                      generate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.

                      To be precise on the manifold M we use the tangent space at p and generate the curve

                      \[γ(t) \frac{a}{}\sin^2(t) + 1 \begin{pmatrix} \cos(t) \\ \cos(t)\sin(t) \end{pmatrix}\]

                      in the plane spanned by X and Y in the tangent space. Note that this curve is $2π$-periodic and a is the half-width of the curve.

                      To reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.

                      THe second variant generates n points equispaced in ìnterval` and calls the first variant.

                      Keywords

                      • manifold - (Sphere(2)) the manifold to build the lemniscate on
                      • p - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate
                      • a – (π/2.0) half-width of the Lemniscate
                      • X – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.
                      • Y – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.
                      source
                      ManoptExamples.artificial_S1_signalFunction
                      artificial_S1_signal([pts=500])

                      generate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to $[-\pi,\pi)$. This is data for an example from Bergmann et. al., SIAM J Imag Sci, 2014.

                      Optional

                      • pts – (500) number of points to sample the function
                      source
                      ManoptExamples.artificial_S2_composite_Bezier_curveMethod
                      artificial_S2_composite_Bezier_curve()

                      Generate a composite Bézier curve on the Sphere $\mathbb S^2$ that was used in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      It consists of 4 egments connecting the points

                      \[\mathbf d_0 = \begin{pmatrix} 0\\0\\1\end{pmatrix},\quad +\mathbf d_1 = \begin{pmatrix} 0\\-1\\0\end{pmatrix},\quad +\mathbf d_2 = \begin{pmatrix} -1\\0\\0\end{pmatrix},\text{ and } +\mathbf d_3 = \begin{pmatrix} 0\\0\\-1\end{pmatrix}.\]

                      where instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be $C^1$.

                      We define

                      \[X_0 = \frac{π}{8\sqrt{2}}\begin{pmatrix}1\\-1\\0\end{pmatrix},\quad +X_1 = \frac{π}{4\sqrt{2}}\begin{pmatrix}1\\0\\1\end{pmatrix},\quad +X_2 = \frac{π}{4\sqrt{2}}\begin{pmatrix}0\\1\\-1\end{pmatrix},\text{ and } +X_3 = \frac{π}{8\sqrt{2}}\begin{pmatrix}-1\\1\\0\end{pmatrix},\]

                      where we defined each $X_i \in T_{d_i}\mathbb S^2$. We defined three BezierSegments

                      of cubic Bézier curves as follows

                      \[\begin{align*} +b_{0,0} &= d_0, \quad & b_{1,0} &= \exp_{d_0}X_0, \quad & b_{2,0} &= \exp_{d_1}X_1, \quad & b_{3,0} &= d_1\\ +b_{0,1} &= d_1, \quad & b_{1,1} &= \exp_{d_1}(-X_1), \quad & b_{2,1} &= \exp_{d_2}X_2, \quad & b_{3,1} &= d_2\\ +b_{0,2} &= d_2, \quad & b_{1,1} &= \exp_{d_2}(-X_2), \quad & b_{2,2} &= \exp_{d_3}X_3, \quad & b_{3,2} &= d_3. +\end{align*}\]

                      source

                      images on manifolds

                      Literature

                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [BPS16]
                      R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
                      [LNPS17]
                      F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
                      diff --git a/v0.1.4/examples/Bezier-curves/index.html b/v0.1.4/examples/Bezier-curves/index.html new file mode 100644 index 0000000..3a450e6 --- /dev/null +++ b/v0.1.4/examples/Bezier-curves/index.html @@ -0,0 +1,68 @@ + +Minimizing the Acceleration of Bézier Curves on the Sphere · ManoptExamples.jl

                      Minimizing the Acceleration of Bézier Curves on the Sphere

                      Ronny Bergmann 2023-06-06

                      using Manifolds, Manopt, ManoptExamples

                      Introduction

                      Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as

                      function bezier(M::AbstractManifold, t, pts::NTuple)
                      +    p = bezier(M, t, pts[1:(end - 1)])
                      +    q = bezier(M, t, pts[2:end])
                      +    return shortest_geodesic(M, p, q, t)
                      +end
                      +function bezier(M::AbstractManifold, t, pts::NTuple{2})
                      +    return shortest_geodesic(M, pts[1], pts[2], t)
                      +end

                      which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.

                      In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].

                      using ManoptExamples:
                      +    artificial_S2_composite_Bezier_curve,
                      +    BezierSegment,
                      +    de_Casteljau,
                      +    get_Bezier_degrees,
                      +    get_Bezier_inner_points,
                      +    get_Bezier_junctions,
                      +    get_Bezier_junction_tangent_vectors,
                      +    get_Bezier_points,
                      +    get_Bezier_segments,
                      +    grad_L2_acceleration_Bezier,
                      +    L2_acceleration_Bezier

                      This notebook reproduces the example form Section 5.2 in [BG18].

                      The following image illustrates how the de-Casteljau algorithm works for one segment.

                      A Bezier segment and illustration of the de-Casteljau algorithm

                      Approximating data by a curve with minimal accelartion

                      We first load our example data

                      M = Sphere(2)
                      +B = artificial_S2_composite_Bezier_curve()
                      +data_points = get_Bezier_junctions(M, B)

                      Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.

                      The original curve

                      We continue to recude the points, since we “know” sme points due to the $C^1$ property: the second to last control point of the first segment $b_{0,2}$, the joint junction point connecting both segments $b_{0,3}=b_{1,0}$ and the second control point $b_{1,1}$ of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.

                      We can use this reduced form as the variable to optimize and the one from the data as our initial point.

                      pB = get_Bezier_points(M, B, :differentiable)
                      +N = PowerManifold(M, NestedPowerRepresentation(), length(pB))
                      PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)

                      And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the $λ=10$

                      curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient
                      +λ = 10.0
                      +function f(M, pB)
                      +    return L2_acceleration_Bezier(
                      +        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
                      +    )
                      +end
                      +function grad_f(M, pB)
                      +    return grad_L2_acceleration_Bezier(
                      +        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
                      +    )
                      +end
                      grad_f (generic function with 1 method)

                      Then we can optimize

                      x0 = pB
                      +pB_opt = gradient_descent(
                      +    N,
                      +    f,
                      +    grad_f,
                      +    x0;
                      +    stepsize=ArmijoLinesearch(;
                      +        initial_stepsize=1.0,
                      +        retraction_method=ExponentialRetraction(),
                      +        contraction_factor=0.5,
                      +        sufficient_decrease=0.001,
                      +    ),
                      +    stopping_criterion=StopWhenChangeLess(1e-5) |
                      +                       StopWhenGradientNormLess(1e-7) |
                      +                       StopAfterIteration(300),
                      +    debug=[
                      +        :Iteration,
                      +        " | ",
                      +        :Cost,
                      +        " | ",
                      +        DebugGradientNorm(),
                      +        " | ",
                      +        DebugStepsize(),
                      +        " | ",
                      +        :Change,
                      +        "\n",
                      +        25,
                      +        :Stop,
                      +    ],
                      +);
                      Initial  | f(x): 10.647244 |  |  | 
                      +# 25     | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281
                      +# 50     | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780
                      +# 75     | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590
                      +# 100    | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745
                      +The algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.

                      And we can again look at the result

                      The result looks as

                      The resulting curve

                      where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.

                      [ABBR23]
                      S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      diff --git a/v0.1.4/examples/Difference-of-Convex-Benchmark/index.html b/v0.1.4/examples/Difference-of-Convex-Benchmark/index.html new file mode 100644 index 0000000..0defc6d --- /dev/null +++ b/v0.1.4/examples/Difference-of-Convex-Benchmark/index.html @@ -0,0 +1,165 @@ + +A Benchmark · ManoptExamples.jl

                      Benchmark of the Difference of Convex Algorithms

                      Ronny Bergmann 2023-06-06

                      Introduction

                      In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.

                      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ \ g(p) - h(p)\]

                      where $g,h\colon \mathcal M \to \mathbb R$ are geodesically convex function on the Riemannian manifold $\mathcal M$.

                      using LinearAlgebra, Random, Statistics, BenchmarkTools
                      +using Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots
                      +Random.seed!(42)

                      and we load a few nice colors

                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +teal = paul_tol["mutedteal"]

                      The DC Problem

                      We start with defining the two convex functions $g,h$ and their gradients as well as the DC problem $f$ and its gradient for the problem

                      \[ \operatorname*{arg\,min}_{p\in\mathcal M}\ \ \bigl( \log\bigr(\det(p)\bigr)\bigr)^4 - \bigl(\log \det(p) \bigr)^2.\]

                      where the critical points obtain a functional value of $-\frac{1}{4}$.

                      where $\mathcal M$ is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.

                      We first define the corresponding functions

                      g(M, p) = log(det(p))^4
                      +h(M, p) = log(det(p))^2
                      +f(M, p) = g(M, p) - h(M, p)

                      and their gradients

                      grad_g(M, p) = 4 * (log(det(p)))^3 * p
                      +grad_h(M, p) = 2 * log(det(p)) * p
                      +grad_f(M, p) = grad_g(M, p) - grad_h(M, p)

                      which we can use to verify that the gradients of $g$ and $h$ are correct. We use for that

                      n = 6
                      +M = SymmetricPositiveDefinite(n)
                      +p0 = log(n) * Matrix{Float64}(I, n, n);
                      +X0 = 1 / n * Matrix{Float64}(I, n, n);

                      to tall both checks

                      check_gradient(M, g, grad_g, p0, X0; plot=true)

                      and

                      check_gradient(M, h, grad_h, p0, X0; plot=true)

                      which both pass the test. We continue to define their inplace variants

                      function grad_g!(M, X, p)
                      +    copyto!(M, X, p)
                      +    X .*= 4 * (log(det(p)))^3
                      +    return X
                      +end
                      +function grad_h!(M, X, p)
                      +    copyto!(M, X, p)
                      +    X .*= 2 * (log(det(p)))
                      +    return X
                      +end
                      +function grad_f!(M, X, p)
                      +    grad_g!(M, X, p)
                      +    Y = copy(M, p, X)
                      +    grad_h!(M, Y, p)
                      +    X .-= Y
                      +    return X
                      +end

                      And compare times for both algorithms, with a bit of debug output.

                      @time p_min_dca = difference_of_convex_algorithm(
                      +    M,
                      +    f,
                      +    g,
                      +    grad_h!,
                      +    p0;
                      +    grad_g=grad_g!,
                      +    gradient=grad_f!,
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[
                      +        :Iteration,
                      +        (:Cost, "f(p): %1.9f"),
                      +        (:GradientNorm, " |grad_f(p)|: %1.9f"),
                      +        (:Change, " |δp|: %1.9f"),
                      +        :Stop,
                      +        5,
                      +        "\n",
                      +    ],
                      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +);
                      Initial f(p): 137.679053470
                      +# 5     f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127
                      +# 10    f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103
                      +# 15    f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574
                      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011
                      +The algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.
                      +  3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)

                      The cost is

                      f(M, p_min_dca)
                      -0.25000000000000006

                      Similarly the DCPPA performs

                      @time p_min_dcppa = difference_of_convex_proximal_point(
                      +    M,
                      +    grad_h!,
                      +    p0;
                      +    g=g,
                      +    grad_g=grad_g!,
                      +    λ=i -> 1 / (2 * n),
                      +    cost=f,
                      +    gradient=grad_f!,
                      +    debug=[
                      +        :Iteration,
                      +        (:Cost, "f(p): %1.9f"),
                      +        " ",
                      +        (:GradientNorm, "|grad_f(p)|: %1.10f"),
                      +        (:Change, "|δp|: %1.10f"),
                      +        :Stop,
                      +        5,
                      +        "\n",
                      +    ],
                      +    evaluation=InplaceEvaluation(),
                      +    stepsize=ConstantStepsize(1.0),
                      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +);
                      Initial f(p): 137.679053470 
                      +# 5     f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692
                      +# 10    f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316
                      +# 15    f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676
                      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968
                      +# 25    f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530
                      +# 30    f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048
                      +# 35    f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001
                      +The algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.
                      +  1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)

                      It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost

                      f(M, p_min_dcppa)
                      -0.25

                      Benchmark I: Time comparison

                      We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test

                      dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()
                      +dcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()
                      +N_max=14
                      +N = 2:N_max

                      and run a benchmark for both algorithms

                      for n in N
                      +    Mn = SymmetricPositiveDefinite(n)
                      +    pn = log(n) * Matrix{Float64}(I, n, n)
                      +    bdca = @benchmark difference_of_convex_algorithm(
                      +        $Mn,
                      +        $f,
                      +        $g,
                      +        $grad_h!,
                      +        $pn;
                      +        grad_g=$grad_g!,
                      +        gradient=$grad_f!,
                      +        evaluation=InplaceEvaluation(),
                      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +    )
                      +    dca_benchmarks[n] = bdca
                      +    bdcppa = @benchmark difference_of_convex_proximal_point(
                      +        $Mn,
                      +        $grad_h!,
                      +        $pn;
                      +        g=$g,
                      +        grad_g=$grad_g!,
                      +        λ=i -> 1 / (2 * n),
                      +        cost=f,
                      +        gradient=grad_f!,
                      +        evaluation=InplaceEvaluation(),
                      +        stepsize=ConstantStepsize(1.0),
                      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +    )
                      +    dcppa_benchmarks[n] = bdcppa
                      +end

                      Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds

                      dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]
                      +dca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]
                      +dcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]
                      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Time (sec.)")
                      +plot!(dims, dca_times; label="DCA", color=indigo, linewidth=2)
                      +plot!(dims, dcppa_times; label="DCPPA", color=teal, linewidth=2)

                      Benchmark II: Iterations and cost.

                      As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.

                      N2 = [5,10,20,40,80]
                      +dims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]
                      +dca_iterations = Dict{Int,Int}()
                      +dca_costs = Dict{Int,Vector{Float64}}()
                      +dcppa_iterations = Dict{Int,Int}()
                      +dcppa_costs = Dict{Int,Vector{Float64}}()
                      @time for n in N2
                      +    println(n)
                      +    Mn = SymmetricPositiveDefinite(n)
                      +    pn = log(n) * Matrix{Float64}(I,n,n);
                      +    @time dca_st = difference_of_convex_algorithm(
                      +        Mn, f, g, grad_h!, pn;
                      +        grad_g=grad_g!,
                      +        gradient=grad_f!,
                      +        evaluation = InplaceEvaluation(),
                      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +        record = [:Iteration, :Cost],
                      +        return_state = true,
                      +    );
                      +    dca_costs[n] = get_record(dca_st, :Iteration, :Cost)
                      +    dca_iterations[n] = length(dca_costs[n])
                      +    @time dcppa_st = difference_of_convex_proximal_point(
                      +        Mn, grad_h!, pn;
                      +        g=g,
                      +        grad_g=grad_g!,
                      +        λ = i -> 1/(2*n),
                      +        cost = f,
                      +        gradient= grad_f!,
                      +        evaluation = InplaceEvaluation(),
                      +        stepsize = ConstantStepsize(1.0),
                      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +        record = [:Iteration, :Cost],
                      +        return_state = true,
                      +    );
                      +    dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)
                      +    dcppa_iterations[n] = length(dcppa_costs[n])
                      +end

                      The iterations are like

                      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Iterations")
                      +plot!(dims2, [values(dca_iterations)...]; label="DCA", color=indigo, linewidth=2)
                      +plot!(dims2, [values(dcppa_iterations)...]; label="DCPPA", color=teal, linewidth=2)

                      And for the developtment of the cost

                      where we can see that the DCA needs less iterations than the DCPPA.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [SO15]
                      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                      diff --git a/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg b/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg new file mode 100644 index 0000000..ca2e758 --- /dev/null +++ b/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg b/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg new file mode 100644 index 0000000..7baeb82 --- /dev/null +++ b/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg b/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..2131b9f --- /dev/null +++ b/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg b/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg new file mode 100644 index 0000000..d51a3c6 --- /dev/null +++ b/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg b/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..3c244f5 --- /dev/null +++ b/v0.1.4/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/Difference-of-Convex-Frank-Wolfe/index.html b/v0.1.4/examples/Difference-of-Convex-Frank-Wolfe/index.html new file mode 100644 index 0000000..4201cf0 --- /dev/null +++ b/v0.1.4/examples/Difference-of-Convex-Frank-Wolfe/index.html @@ -0,0 +1,216 @@ + +Frank Wolfe comparison · ManoptExamples.jl

                      A comparison of the Difference of Convex and Frank Wolfe Algorithm

                      Ronny Bergmann 2023-11-06

                      Introduction

                      In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.

                      using LinearAlgebra, Random, Statistics, BenchmarkTools
                      +using ManifoldsBase, Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots

                      and we load a few nice colors

                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +teal = paul_tol["mutedteal"]

                      We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices $\mathcal P(n)$ with the affine invariant metric. Let $q_1,\ldots,q_m \in \mathcal P(n)$ be a set of points and $\mu_1,\ldots,\mu_m$ be a set of weights, such that they sum to one. We consider then

                      \[\operatorname*{arg\,max}_{p\in\mathcal C}\ \ h(p)\]

                      with

                      \[h(p) = +\sum_{j=1}^m \mu_j d^2(p,q_i), +\quad \text{ where } +d^2(p,q_i) = \operatorname{tr}\bigl( + \log^2(p^{-\frac{1}{2}}q_jp^{-\frac{1}{2}}) +\big) +\qquad\text{and}\qquad +\mathcal C = \{ p\in {\mathcal M}\ |\ \bar L\preceq p \preceq \bar U \},\]

                      for a lower bound $L$ and an upper bound $U$ for the matrices in the positive definite sense $A \preceq B \Leftrightarrow (B-A)$ is positive semi-definite

                      When every one of the weights ${\mu}_1, \ldots {\mu}_m$ are equal, this function $h$ is known as the of the set $\{q_1, \dots, q_m\}$.

                      And for our example we set

                      Random.seed!(42)
                      +n = 20
                      +m = 100
                      +M = SymmetricPositiveDefinite(n)
                      +q = [rand(M) for _ in 1:m];
                      +w = rand(m)
                      +w ./=sum(w)

                      We use as lower and upper bound the arithmetic and geometric mean $L$ and $U$, respectively.

                      L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )
                      +U = sum( wi * qi for (wi, qi) in zip(w,q) )

                      As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use

                      p0 = (L+U)/2

                      And we can check that it is feasible

                      Common Functions

                      Given $p \in \mathcal M$, $X \in T_p\mathcal M$ on the symmetric positive definite matrices M, this method computes the closed form solution to

                      \[\operatorname*{arg\,min}_{q\in {\mathcal C}}\ \langle X, \log_p q\rangle + = \operatorname*{arg\,min}_{q\in {\mathcal C}}\ \operatorname{tr}(S\log(YqY))\]

                      where $\mathcal C = \{ q | L \preceq q \preceq U \}$, $S = p^{-1/2}Xp^{-1/2}$, and $Y=p^{-1/2}$.

                      The solution is given by $Z=X^{-1}Q\bigl( P^{\mathrm{T}}[-\operatorname{sgn}(D)]_{+}P+\hat{L}\bigr)Q^{\mathrm{T}}X^{-1}$,@ where $S=QDQ^{\mathrm{T}}$ is a diagonalization of $S$, $\hat{U}-\hat{L}=P^{\mathrm{T}}P$ with $\hat{L}=Q^{\mathrm{T}}XLXQ$ and $\hat{U}=Q^{\mathrm{T}}XUXQ$, where $[-\mbox{sgn}(D)]_{+}$ is the diagonal matrix

                      \[\operatorname{diag}\bigl( + [-\operatorname{sgn}(d_{11})]_{+}, \ldots, [-\operatorname{sgn}(d_{nn})]_{+} +\bigr)\]

                      and $D=(d_{ij})$.

                      @doc raw"""
                      +    closed_form_solution!(M, q, L, U, p X)
                      +
                      +Compute the closeed form solution of the constraint sub problem in place of ``q``.
                      +"""
                      +function closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)
                      +    # extract p^1/2 and p^{-1/2}
                      +    (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)
                      +    # Compute D & Q
                      +    e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk  = QDQ'
                      +    D = Diagonal(1.0 .* (e2.values .< 0))
                      +    Q = e2.vectors
                      +    #println(p)
                      +    Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q
                      +    Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q
                      +    P = cholesky(Hermitian(Uprime - Lprime))
                      +    z = P.U' * D * P.U + Lprime
                      +    copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)
                      +    return q
                      +end

                      The Difference of Convex Formulation

                      We use $g(p) = \iota_{\mathcal C}(p)$ as the indicator funtion of the set $\mathcal C$. We use

                      function is_pos_def(p; atol=5e-13)
                      +    e = eigen(Symmetric(p))
                      +    return all((e.values .+ atol) .> 0)
                      +end
                      +function g(p, L, U)
                      +    return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf
                      +end
                      +h(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )

                      So we can first check that p0 is feasible

                      g(p0,L,U) == 0.0
                      true

                      Now setting

                      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ g(p) - h(p)\]

                      We look for a maximum of $h$, where $g$ is minimal, i.e. $g(p)$ is zero or in other words $p \in \mathcal C$.

                      The gradient of $h$ can also be implemented in closed form as

                      grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))
                      +function grad_h!(M, X, p, w, q)
                      +    Y = copy(M, p, X)
                      +    zero_vector!(M, X, p)
                      +    for (wi, qi) in zip(w,q)
                      +        log!(M, Y, p, qi)
                      +        Y .*= - 2.0*wi
                      +        X .+= Y
                      +    end
                      +    return X
                      +end

                      And we can further define the cost, which will just be $+\infty$ outside of $\mathcal C$. We define

                      f_dc(M, p) = g(p, L, U) - h(M, p, w, q)
                      +grad_h!(M, X, p) = grad_h!(M, X, p, w, q)
                      +function grad_f_dc!(M,X, p)
                      +    grad_h!(M, X, p, w, q)
                      +    X .*= -1.0
                      +    return X
                      +end

                      Here we can omit the gradient of $g$ in the definition of $\operatorname{grad} f$, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of $\mathcal C$.

                      As the last step, we can provide the closed form solver for the DC sub problem given at iteration $k$ by

                      \[\operatorname*{arg\,min}_{p\in \mathcal C}\ + \big\langle -\operatorname{grad} h(p^{(k)}), \exp^{-1}_{p^{(k)}}p\big\rangle.\]

                      Which we con compute

                      function dc_sub_solution!(M, q, p, X)
                      +    closed_form_solution!(M, q, L, U, p, -X)
                      +    return q
                      +end

                      For safety, we might want to avoid ending up at the boundary of $\mathcal C$. That is we reduce the distance we walk towards the solution $q$ a bit.

                      function dc_sub_solution_safe!(M, q, p, X)
                      +    p_last = copy(M,p) # since p=q might be in place
                      +    closed_form_solution!(M, q, L, U, p, -X)
                      +    q_orig = copy(M,q) # since we do the following in place of q
                      +    a = minimum(real.(eigen(q-L).values))
                      +    b = minimum(real.(eigen(U-q).values))
                      +    s = 1.0
                      +    d = distance(M, p_last, q_orig);
                      +    # if we are close to zero, we reduce faster.
                      +    α = d < 1/(n^2) ? 0.66 : 0.9995;
                      +    i=0
                      +    while (a < 0) || (b < 0)
                      +        s *= α
                      +        shortest_geodesic!(M, q, p_last, q_orig, s)
                      +        a = minimum(real.(eigen(q-L).values))
                      +        b = minimum(real.(eigen(U-q).values))
                      +        #println("$i a: $a, b = $b with s=$s")
                      +        i=i+1
                      +        if (i>100) # safety fallback
                      +            #@warn " $i steps where not enough $s ($α)\n$a $b\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs"
                      +            qe = eigen(q)
                      +            if a < 0
                      +                qe.values .+= min(1e-8, n*abs(min(a,b)))
                      +            else
                      +                qe.values .-= min(1e-8, n*abs(min(a,b)))
                      +            end
                      +            q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'
                      +            a = minimum(real.(eigen(q-L).values))
                      +            b = minimum(real.(eigen(U-q).values))
                      +            return q
                      +        end
                      +    end
                      +    return q
                      +end

                      The DoC solver run

                      Let’s compare both methods when they have the same stopping criteria

                      @time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;
                      +    gradient=grad_f_dc!,
                      +    sub_problem=dc_sub_solution_safe!,
                      +    evaluation=InplaceEvaluation(),
                      +    stopping_criterion = StopAfterIteration(300) |
                      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                      +    debug = [
                      +        (:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "),
                      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                      +        30, :Stop, "\n"],
                      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                      +    return_state=true,
                      +)
                      Initial F(p): -0.77661458292831
                      +# 30       F(p): -0.78442486496540 |Δp|: 0.05520655655191  |grad f(p)|: 0.17699237  |Δgrad f(p)|: 0.17569106
                      +# 60       F(p): -0.78442319013514 |Δp|: 0.01172173294316  |grad f(p)|: 0.17697321  |Δgrad f(p)|: 0.02211809
                      +At iteration 78 the change of the gradient (3.1520524323368916e-13) was less than 1.0e-9.
                      + 16.243844 seconds (16.86 M allocations: 2.325 GiB, 2.67% gc time, 49.72% compilation time)
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 78 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | InplaceEvaluation()
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 300:  not reached
                      +    |Δp| < 1.0e-14: not reached
                      +    |Δgrad f| < 1.0e-9: reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 30]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                      Let’s extract the final point and look at its cost

                      p1_dc = get_solver_result(state1_dc);
                      +f_dc(M, p1_dc)
                      -0.7844223312703434

                      As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.

                      [ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]
                      2-element Vector{Tuple{Float64, Float64}}:
                      + (6.29650307104728e-15, 0.06710268482236606)
                      + (2.6399491947503855e-6, 0.06680333533680119)

                      For the statistics we extract the recordings from the state

                      Define the Frank-Wolfe functions

                      For Frank wolfe, the cost is just defined as $-h(p)$ but the minimisation is constraint to $\mathcal C$, which is enfored by the oracle.

                      f_fw(M, p) = -h(M, p, w, q)
                      +function grad_f_fw!(M,X, p)
                      +    grad_h!(M, X, p, w, q)
                      +    X .*= -1.0
                      +    return X
                      +end
                      +oracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)

                      The FW Solver Run

                      Similarly we can run the Frank-Wolfe algorithm with

                      @time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;
                      +    sub_problem=oracle_fw!,
                      +    evaluation=InplaceEvaluation(),
                      +    stopping_criterion = StopAfterIteration(10^4) |
                      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                      +    debug = [
                      +        (:Iteration, "# %-8d "), :Cost, (:Change, " |Δp|: %0.14f "),
                      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                      +        2*10^3, :Stop, "\n"],
                      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                      +    return_state=true,
                      +)
                      Initial f(x): -0.776615
                      +# 2000     f(x): -0.784420 |Δp|: 0.04611942377555  |grad f(p)|: 0.17693408  |Δgrad f(p)|: 0.17555618
                      +# 4000     f(x): -0.784421 |Δp|: 0.00372201631993  |grad f(p)|: 0.17694619  |Δgrad f(p)|: 0.00749427
                      +# 6000     f(x): -0.784422 |Δp|: 0.00205683506781  |grad f(p)|: 0.17695204  |Δgrad f(p)|: 0.00414088
                      +# 8000     f(x): -0.784422 |Δp|: 0.00140675676252  |grad f(p)|: 0.17695565  |Δgrad f(p)|: 0.00283200
                      +# 10000    f(x): -0.784422 |Δp|: 0.00106177438607  |grad f(p)|: 0.17695815  |Δgrad f(p)|: 0.00213746
                      +The algorithm reached its maximal number of iterations (10000).
                      +609.538654 seconds (55.97 M allocations: 93.630 GiB, 1.01% gc time, 0.10% compilation time)
                      +
                      +# Solver state for `Manopt.jl`s Frank Wolfe Method
                      +After 10000 iterations
                      +
                      +## Parameters
                      +* inverse retraction method: LogarithmicInverseRetraction()
                      +* retraction method: ExponentialRetraction()
                      +* sub solver state:
                      +    | InplaceEvaluation()
                      +
                      +## Stepsize
                      +DecreasingStepsize(; length=2.0,  factor=1.0,  subtrahend=0.0,  shift=2)
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 10000:    reached
                      +    |Δp| < 1.0e-14: not reached
                      +    |Δgrad f| < 1.0e-9: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "f(x): %f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 2000]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                      And we take a look at this result as well

                      p1_fw = get_solver_result(state1_fw);
                      +f_dc(M, p1_fw)
                      -0.7844220281765242

                      And its feasibility

                      [extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]
                      2-element Vector{Tuple{Float64, Float64}}:
                      + (4.912896446145126e-10, 0.06659173821660597)
                      + (3.2456549828225906e-5, 0.06713970236076447)

                      Statistics

                      We extract the recorded values

                      # DoC
                      +iter1_dc = get_record(state1_dc, :Iteration, :Iteration)
                      +pk_dc = get_record(state1_dc,:Iteration,:Iterate)
                      +costs1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))
                      +dc_min = minimum(costs1_dc)
                      +# FW
                      +iter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]
                      +pk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]
                      +costs1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))

                      And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.

                      fig = plot(;
                      +    legend=:topright,
                      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x_k)-f^*$ (log. scale)",
                      +    yaxis=:log,
                      +    ylims=(1e-8, 10^-2),
                      +    xaxis=:log,
                      +    xlims=(1,10^4),
                      +)
                      +plot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label="Difference of Convex")
                      +plot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label="Frank-Wolfe")

                      This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.

                      On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [WS22]
                      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                      diff --git a/v0.1.4/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg b/v0.1.4/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg new file mode 100644 index 0000000..42ee5e2 --- /dev/null +++ b/v0.1.4/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/Difference-of-Convex-Rosenbrock/index.html b/v0.1.4/examples/Difference-of-Convex-Rosenbrock/index.html new file mode 100644 index 0000000..56c5db4 --- /dev/null +++ b/v0.1.4/examples/Difference-of-Convex-Rosenbrock/index.html @@ -0,0 +1,333 @@ + +Rosenbrock Metric · ManoptExamples.jl

                      Solving Rosenbrock with the Difference of Convex Algorithm

                      Ronny Bergmann 2023-06-06

                      Introduction

                      This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.

                      Both the Rosenbrock problem

                      \[ \operatorname*{argmin}_{x\in\mathbb R^2} a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2,\]

                      where $a,b>0$ and usually $b=1$ and $a \gg b$, we know the minimizer $x^* = (b,b^2)^\mathrm{T}$, and also the (Euclidean) gradient

                      \[\nabla f(x) = + \begin{pmatrix} + 4a(x_1^2-x_2)\\ -2a(x_1^2-x_2) + \end{pmatrix} + + + \begin{pmatrix} + 2(x_1-b)\\ 0 + \end{pmatrix}.\]

                      They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.

                      Furthermore, the RosenbrockMetric can be used on $\mathbb R^2$, that is

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix},\]

                      In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.

                      1. The Euclidean Gradient
                      2. The Riemannian gradient descent with respect to the RosenbrockMetric
                      3. The Euclidean Difference of Convex Algorithm
                      4. The Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric

                      Where we obtain a difference of convex problem by writing

                      \[f(x) = a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2 + = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 - \bigl(x_1-b\bigr)^2\]

                      that is

                      \[g(x) = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 \quad\text{ and }\quad h(x) = \bigl(x_1-b\bigr)^2\]

                      using LinearAlgebra, Random, Statistics
                      +using Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots
                      +import Manopt: set_manopt_parameter!
                      +Random.seed!(42)
                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +green = paul_tol["mutedgreen"]
                      +sand = paul_tol["mutedsand"]
                      +teal = paul_tol["mutedteal"]
                      +grey = paul_tol["mutedgrey"]

                      To emphasize the effect, we choose a quite large value of a.

                      a = 2*10^5
                      +b = 1

                      and use the starting point and a direction to check gradients

                      p0 = [0.1, 0.2]

                      The Euclidean Gradient Descent.

                      For the Euclidean gradient we can just use the same approach as in the Rosenbrock example

                      M = ℝ^2
                      +f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                      +∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)

                      define a common debug vector

                      debug_vec = [
                      +        (:Iteration, "# %-8d "),
                      +        (:Cost, "F(x): %1.4e"),
                      +        " ",
                      +        (:Change, "|δp|: %1.4e | "),
                      +        (:GradientNorm, "|grad f|: %1.6e"),
                      +        :Stop,
                      +        "\n",
                      +    ]

                      and call the gradient descent algorithm

                      Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[debug_vec...,10^7],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    record=[:Iteration, :Cost],
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03
                      +# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04
                      +# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06
                      +# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08
                      +# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 53073227 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000000]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Riemannian Gradient Descent.

                      For the Riemannian case, we define

                      M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())
                      MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())

                      and the gradient is now adopted to the new metric

                      function grad_f!(M, X, p)
                      +    ∇f!!(M, X, p)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_f(M, p)
                      +    X = zero_vector(M, p)
                      +    return grad_f!(M, X, p)
                      +end
                      R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[debug_vec...,10^6],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    record=[:Iteration, :Cost],
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 1000000  F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04
                      +# 2000000  F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 2443750 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Euclidean Difference of Convex

                      For the convex case, we have to first introduce the two parts of the cost.

                      f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;
                      +f2(M, p; a=100, b=1) = (p[1] - b[1])^2;
                      +g(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)
                      +h(M, p; a=100, b=1) = f2(M, p; a=a, b=b)

                      and their (Euclidan) gradients

                      function ∇h!(M, X, p; a=100, b=1)
                      +    X[1] = 2*(p[1]-b)
                      +    X[2] = 0
                      +    return X
                      +end
                      +function ∇h(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    ∇h!(M, X, p; a=a, b=b)
                      +    return X
                      +end
                      +function ∇g!(M, X, p; a=100, b=1)
                      +    X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)
                      +    X[2] = -2*a*(p[1]^2-p[2])
                      +    return X
                      +end
                      +function ∇g(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    ∇g!(M, X, p; a=a, b=b)
                      +    return X
                      +end

                      and we define for convenience

                      docE_g(M, p) = g(M, p; a=a, b=b)
                      +docE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)
                      +docE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)
                      +docE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)
                      +function docE_∇f!(M, X, p)
                      +  Y = zero_vector(M, p)
                      +  docE_∇g!(M, X, p)
                      +  docE_∇h!(M, Y, p)
                      +  X .-= Y
                      +  return X
                      +end

                      Then we call the difference of convex algorithm on Eucldiean space $\mathbb R^2$.

                      E_doc_state = difference_of_convex_algorithm(
                      +    M, docE_f, docE_g, docE_∇h!, p0;
                      +    gradient=docE_∇f!,
                      +    grad_g = docE_∇g!,
                      +    debug=[debug_vec..., 10^4],
                      +    evaluation=InplaceEvaluation(),
                      +    record=[:Iteration, :Cost],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    sub_hess=nothing, # Use gradient descent
                      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 10000    F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04
                      +# 20000    F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 26549 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | # Solver state for `Manopt.jl`s Gradient Descent
                      +    | After 2000 iterations
                      +    | 
                      +    | ## Parameters
                      +    | * retraction method: ExponentialRetraction()
                      +    | 
                      +    | ## Stepsize
                      +    | ArmijoLinesearch() with keyword parameters
                      +    |   * initial_stepsize    = 1.0
                      +    |   * retraction_method   = ExponentialRetraction()
                      +    |   * contraction_factor  = 0.95
                      +    |   * sufficient_decrease = 0.1
                      +    | 
                      +    | ## Stopping Criterion
                      +    | Stop When _one_ of the following are fulfilled:
                      +    |     Max Iteration 2000:   reached
                      +    |     |grad f| < 1.0e-16: not reached
                      +    | Overall: reached
                      +    | This indicates convergence: No
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Riemannian Difference of Convex

                      We first have to again defined the gradients with respect to the new metric

                      function grad_h!(M, X, p; a=100, b=1)
                      +    ∇h!(M, X, p; a=a, b=b)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_h(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    grad_h!(M, X, p; a=a, b=b)
                      +    return X
                      +end
                      +function grad_g!(M, X, p; a=100, b=1)
                      +    ∇g!(M, X, p; a=a,b=b)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_g(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    grad_g!(M, X, p; a=a, b=b)
                      +    return X
                      +end

                      While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For $X \in \partial h(p^{(k)})$ the sunproblem top determine $p^{(k+1)}$ reads

                      \[\operatorname*{argmin}_{p\in\mathcal M} g(p) - \langle X, \log_{p^{(k)}}p\rangle\]

                      for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with $X = \operatorname{grad} h(p^{(k)})$ that

                      \[\phi(p) = g(p) - \langle X, \log_{p^{(k)}}p\rangle += a\bigl( p_{1}^2-p_{2}\bigr)^2 + + 2\bigl(p_{1}-b\bigr)^2 - 2(p^{(k)}_1-b)p_1 + 2(p^{(k)}_1-b)p^{(k)}_1,\]

                      its Euclidean gradient reads

                      \[\operatorname{grad}\phi(p) = + \nabla \varphi(p) + = \begin{pmatrix} + 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^{(k)}_1-b)\\ + -2a(p_1^2-p_2) + \end{pmatrix}\]

                      where we can again employ the gradient conversion from before to obtain the Riemannian gradient.

                      mutable struct SubGrad{P,T,V}
                      +    pk::P
                      +    Xk::T
                      +    a::V
                      +    b::V
                      +end
                      +function (ϕ::SubGrad)(M, p)
                      +    X = zero_vector(M, p)
                      +    ϕ(M, X, p)
                      +    return X
                      +end
                      +function (ϕ::SubGrad)(M, X, p)
                      +    X .= [
                      +        4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),
                      +        -2 * ϕ.a * (p[1]^2 - p[2]),
                      +    ]
                      +    riemannian_gradient!(M, X, p, X) # convert
                      +    return X
                      +end

                      And in orer to update the subsolvers gradient correctly, we have to overwrite

                      set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)
                      +set_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)

                      And we again introduce for ease of use

                      docR_g(M, p) = g(M, p; a=a, b=b)
                      +docR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)
                      +docR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)
                      +docR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)
                      +function docR_grad_f!(M, X, p)
                      +    Y = zero_vector(M, p)
                      +    docR_grad_g!(M, X, p)
                      +    docR_grad_h!(M, Y, p)
                      +    X .-= Y
                      +    return X
                      +end
                      +docR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)

                      Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.

                      R_doc_state = difference_of_convex_algorithm(
                      +    M_rb, docR_f, docR_g, docR_grad_h!, p0;
                      +    gradient=docR_grad_f!,
                      +    grad_g = docR_grad_g!,
                      +    debug=[debug_vec..., 10^6],
                      +    evaluation=InplaceEvaluation(),
                      +    record=[:Iteration, :Cost],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    sub_grad=docR_sub_grad,
                      +    sub_hess = nothing, # Use gradient descent
                      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 1235 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | # Solver state for `Manopt.jl`s Gradient Descent
                      +    | After 2000 iterations
                      +    | 
                      +    | ## Parameters
                      +    | * retraction method: ExponentialRetraction()
                      +    | 
                      +    | ## Stepsize
                      +    | ArmijoLinesearch() with keyword parameters
                      +    |   * initial_stepsize    = 1.0
                      +    |   * retraction_method   = ExponentialRetraction()
                      +    |   * contraction_factor  = 0.95
                      +    |   * sufficient_decrease = 0.1
                      +    | 
                      +    | ## Stopping Criterion
                      +    | Stop When _one_ of the following are fulfilled:
                      +    |     Max Iteration 2000:   reached
                      +    |     |grad f| < 1.0e-16: not reached
                      +    | Overall: reached
                      +    | This indicates convergence: No
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      Comparison in Iterations

                      fig = plot(;
                      +    legend=:topright,
                      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x)$ (log. scale)",
                      +    yaxis=:log,
                      +    ylims=(1e-16, 5*1e5),
                      +    xaxis=:log,
                      +    xlims=(1,10^8),
                      +)
                      +scatter!(fig, [1,], [f(M,p0),], label=raw"$f(p_0)$", markercolor=grey)
                      +egi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries
                      +egc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries
                      +plot!(fig, egi, egc, color=teal, label="Euclidean GD")
                      +#
                      +rgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries
                      +rgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries
                      +plot!(fig, rgi, rgc, color=indigo, label="Riemannian GD")
                      +#
                      +edi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries
                      +edc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries
                      +plot!(fig, edi, edc, color=sand, label="Euclidean DoC")
                      +#
                      +rdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries
                      +rdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries
                      +plot!(fig, rdi, rdc, color=green, label="Riemannian DoC")

                      And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      diff --git a/v0.1.4/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg b/v0.1.4/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..692ca69 --- /dev/null +++ b/v0.1.4/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/RayleighQuotient/index.html b/v0.1.4/examples/RayleighQuotient/index.html new file mode 100644 index 0000000..18f2149 --- /dev/null +++ b/v0.1.4/examples/RayleighQuotient/index.html @@ -0,0 +1,234 @@ + +The Rayleigh Quotient · ManoptExamples.jl

                      The Rayleigh Quotient

                      Ronny Bergmann 2024-03-09

                      Introduction

                      This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.

                      For a symmetric matrix $A \in \mathbb R^{n\times n}$ we consider the 📖 Rayleigh Quotient

                      \[\operatorname*{arg\,min}_{x \in \mathbb R^n \backslash \{0\}} +\frac{x^{\mathrm{T}}Ax}{\lVert x \rVert^2}.\]

                      On the sphere we can omit the denominator and obtain

                      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                      which by itself we can again continue in the embedding as

                      \[\tilde f(x) = x^{\mathrm{T}}Ax,\qquad x \in \mathbb R^n.\]

                      This cost has the nice feature that at the minimizer $p^*\in\mathbb S^{n-1}$ the function falue $f(p^*)$ is the smalles eigenvalue of $A$.

                      For the embedded function $\tilde f$ the gradient and Hessian can be computed with classical methods as

                      \[\begin{align*} +∇\tilde f(x) &= 2Ax, \qquad x ∈ ℝ^n, +\\ +∇^2\tilde f(x)[V] &= 2AV, \qquad x, V ∈ ℝ^n. +\end{align*}\]

                      Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold $\mathcal M = \mathbb S^{n-1}$ are given by

                      \[\begin{align*} +\operatorname{grad} f(p) &= 2Ap - 2(p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1}, +\\ +\operatorname{Hess} f(p)[X] &= 2AX - 2(p^{\mathrm{T}}AX)p - 2(p^{\mathrm{T}}Ap)X,\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1} +\end{align*}\]

                      Let’s first generate an example martrx $A$.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random
                      +Random.seed!(42)
                      +n = 500
                      +A = Symmetric(randn(n,n))

                      And the manifolds

                      M = Sphere(n-1)
                      Sphere(499, ℝ)
                      E = get_embedding(M)
                      Euclidean(500; field=ℝ)

                      Setup the corresponding functions

                      Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute $f$ is called with M as their first argument and $\tilde f$ if called with E.

                      We instantiate

                      f = ManoptExamples.RayleighQuotientCost(A)
                      +grad_f = ManoptExamples.RayleighQuotientGrad!!(A)
                      +Hess_f = ManoptExamples.RayleighQuotientHess!!(A)

                      the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory

                      p0 = [1.0, zeros(n-1)...]
                      +X = zero_vector(M, p0)

                      we can both call

                      Y = grad_f(M,p0)  # Allocates memory
                      +grad_f(M,X,p0)    # Computes in place of X and returns the result in X.
                      +norm(M, p0, X-Y)
                      0.0

                      Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.

                      First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute

                      λ = min(eigvals(A)...)
                      -44.8386050469405

                      A Solver based on gradient information

                      Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient $\nabla \tilde f$. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].

                      But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent

                      s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                      +    return_state=true,
                      +)
                      +q1 = get_solver_result(s)
                      +s
                      Initial f(x): -0.363357
                      +# 50    f(x): -44.206244|grad f(p)|:2.3878466243532688
                      +# 100   f(x): -44.546883|grad f(p)|:2.2561253654599445
                      +# 150   f(x): -44.765220|grad f(p)|:1.3051578932969594
                      +# 200   f(x): -44.824730|grad f(p)|:0.575815360373987
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 200 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 200:  reached
                      +    |grad f| < 1.0e-8: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    [(:Iteration, "# %-6d"), (:Cost, "f(x): %f"), (:GradientNorm, "|grad f(p)|:%s"), "\n", 50]

                      From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.

                      And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.

                      q2 = gradient_descent(M, f, grad_f, p0;
                      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                      +)
                      +#Test that both are the same
                      +isapprox(M, q1,q2)
                      Initial f(x): -0.363357
                      +# 50    f(x): -44.206244|grad f(p)|:2.3878466243532728
                      +# 100   f(x): -44.546883|grad f(p)|:2.2561253654599707
                      +# 150   f(x): -44.765220|grad f(p)|:1.305157893296953
                      +# 200   f(x): -44.824730|grad f(p)|:0.5758153603739836
                      +
                      +true

                      We can also benchmark both

                      @benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)
                      BenchmarkTools.Trial: 19 samples with 1 evaluation.
                      + Range (min … max):  265.570 ms … 284.588 ms  ┊ GC (min … max): 7.90% … 7.34%
                      + Time  (median):     268.441 ms               ┊ GC (median):    7.96%
                      + Time  (mean ± σ):   270.099 ms ±   4.764 ms  ┊ GC (mean ± σ):  7.93% ± 0.26%
                      +
                      +      ▃ █▃    █                                                  
                      +  ▇▁▁▁█▇██▁▇▇▁█▁▁▇▇▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▇▁▁▁▁▇▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▇ ▁
                      +  266 ms           Histogram: frequency by time          285 ms <
                      +
                      + Memory estimate: 1.13 GiB, allocs estimate: 3853.
                      @benchmark gradient_descent($M, $f, $grad_f, $p0)
                      BenchmarkTools.Trial: 162 samples with 1 evaluation.
                      + Range (min … max):  30.175 ms …  37.465 ms  ┊ GC (min … max): 0.00% … 0.00%
                      + Time  (median):     30.600 ms               ┊ GC (median):    0.00%
                      + Time  (mean ± σ):   31.001 ms ± 901.457 μs  ┊ GC (mean ± σ):  1.10% ± 1.75%
                      +
                      +    ▅▇█▃▅▆█▃                       ▁ ▆                          
                      +  ▅█████████▆▄▄▁▁▁▃▁▃▁▁▁▁▁▃▁▁▁▁▃▃▆▄███▇▅▆▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃ ▃
                      +  30.2 ms         Histogram: frequency by time         33.3 ms <
                      +
                      + Memory estimate: 12.02 MiB, allocs estimate: 3246.

                      We see, that the conversion costs a bit of performance, but if the Euclidean gradient is easier to compute, this might still be ok.

                      A Solver based (also) on (approximate) Hessian information

                      To also involve the Hessian, we consider the trust regions solver with three cases:

                      1. Euclidean, approximating the Hessian
                      2. Euclidean, providing the Hessian
                      3. Riemannian, providing the Hessian but also using in-place evaluations.
                      q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.363357
                      +# 10    f(x): -44.054570|grad f(p)|:9.520440806961885
                      +# 20    f(x): -44.512159|grad f(p)|:3.8960976303377146
                      +# 30    f(x): -44.750745|grad f(p)|:4.0172063476264075
                      +# 40    f(x): -44.921406|grad f(p)|:4.0629541064444235
                      +# 50    f(x): -44.944986|grad f(p)|:1.5625926334092841
                      +# 60    f(x): -44.962671|grad f(p)|:1.4844829786311928
                      +# 70    f(x): -44.981071|grad f(p)|:1.406186078892307
                      +# 80    f(x): -44.998912|grad f(p)|:1.333230383118243
                      +# 90    f(x): -45.016067|grad f(p)|:1.2712292976953228
                      +# 100   f(x): -45.033852|grad f(p)|:1.2245396895601803
                      +# 110   f(x): -45.054112|grad f(p)|:1.1949140426096447
                      +# 120   f(x): -45.077761|grad f(p)|:1.181336063241073
                      +# 130   f(x): -45.104051|grad f(p)|:1.1807084432424522
                      +# 140   f(x): -45.131158|grad f(p)|:1.1891034869646029
                      +# 150   f(x): -45.157245|grad f(p)|:1.2028717827098632
                      +# 160   f(x): -45.181092|grad f(p)|:1.2191967547483598
                      +# 170   f(x): -45.202141|grad f(p)|:1.2361671256155067
                      +# 180   f(x): -45.220310|grad f(p)|:1.252614027690994
                      +# 190   f(x): -45.235779|grad f(p)|:1.2678969023508213
                      +# 200   f(x): -45.248841|grad f(p)|:1.2817199840828324
                      +# 210   f(x): -45.256727|grad f(p)|:1.2916659158016648
                      +# 220   f(x): -45.256727|grad f(p)|:1.2916659158016648
                      +# 230   f(x): -45.256727|grad f(p)|:1.2916659157663253
                      +# 240   f(x): -45.256727|grad f(p)|:1.2916659156249692
                      +# 250   f(x): -45.256727|grad f(p)|:1.291665915483601
                      +# 260   f(x): -45.256727|grad f(p)|:1.2916659153422445
                      +# 270   f(x): -45.256727|grad f(p)|:1.291665915200879
                      +# 280   f(x): -45.256727|grad f(p)|:1.2916659150595229
                      +# 290   f(x): -45.256727|grad f(p)|:1.2916659149181455
                      +# 300   f(x): -45.256727|grad f(p)|:1.291665914776787
                      +# 310   f(x): -45.256727|grad f(p)|:1.2916659146354228
                      +# 320   f(x): -45.256727|grad f(p)|:1.2916659144940739
                      +# 330   f(x): -45.256727|grad f(p)|:1.2916659143526876
                      +# 340   f(x): -45.256727|grad f(p)|:1.2916659142113394
                      +# 350   f(x): -45.256727|grad f(p)|:1.2916659140699758
                      +# 360   f(x): -45.256727|grad f(p)|:1.2916659139286075
                      +# 370   f(x): -45.256727|grad f(p)|:1.2916659137872586
                      +# 380   f(x): -45.256727|grad f(p)|:1.2916659136458828
                      +# 390   f(x): -45.256727|grad f(p)|:1.2916659135045347
                      +# 400   f(x): -45.256727|grad f(p)|:1.2916659133631683
                      +# 410   f(x): -45.256727|grad f(p)|:1.2916659132218014
                      +# 420   f(x): -45.256727|grad f(p)|:1.291665913080452
                      +# 430   f(x): -45.256727|grad f(p)|:1.2916659129390704
                      +# 440   f(x): -45.256727|grad f(p)|:1.2916659127977244
                      +# 450   f(x): -45.256727|grad f(p)|:1.2916659126563357
                      +# 460   f(x): -45.256727|grad f(p)|:1.2916659125149934
                      +# 470   f(x): -45.256727|grad f(p)|:1.291665912373618
                      +# 480   f(x): -45.256727|grad f(p)|:1.2916659122322556
                      +# 490   f(x): -45.256727|grad f(p)|:1.2916659120908875
                      +# 500   f(x): -45.256727|grad f(p)|:1.2916659119495382
                      +# 510   f(x): -45.256727|grad f(p)|:1.2916659118081695
                      +# 520   f(x): -45.256727|grad f(p)|:1.2916659116667941
                      +# 530   f(x): -45.256727|grad f(p)|:1.2916659115254383
                      +# 540   f(x): -45.256727|grad f(p)|:1.291665911384073
                      +# 550   f(x): -45.256727|grad f(p)|:1.291665911242725
                      +# 560   f(x): -45.256727|grad f(p)|:1.2916659111013584
                      +# 570   f(x): -45.256727|grad f(p)|:1.2916659109599946
                      +# 580   f(x): -45.256727|grad f(p)|:1.2916659108186235
                      +# 590   f(x): -45.256727|grad f(p)|:1.2916659106772588
                      +# 600   f(x): -45.256727|grad f(p)|:1.291665910535912
                      +# 610   f(x): -45.256727|grad f(p)|:1.2916659103945327
                      +# 620   f(x): -45.256727|grad f(p)|:1.291665910253165
                      +# 630   f(x): -45.256727|grad f(p)|:1.2916659101118186
                      +# 640   f(x): -45.256727|grad f(p)|:1.2916659099704497
                      +# 650   f(x): -45.256727|grad f(p)|:1.291665909829113
                      +# 660   f(x): -45.256727|grad f(p)|:1.29166590968772
                      +# 670   f(x): -45.256727|grad f(p)|:1.2916659095463716
                      +# 680   f(x): -45.256727|grad f(p)|:1.291665909404996
                      +# 690   f(x): -45.256727|grad f(p)|:1.2916659092636467
                      +# 700   f(x): -45.256727|grad f(p)|:1.2916659091222746
                      +# 710   f(x): -45.256727|grad f(p)|:1.2916659089809122
                      +# 720   f(x): -45.256727|grad f(p)|:1.2916659088395555
                      +# 730   f(x): -45.256727|grad f(p)|:1.2916659086982
                      +# 740   f(x): -45.256727|grad f(p)|:1.2916659085568292
                      +# 750   f(x): -45.256727|grad f(p)|:1.2916659084154538
                      +# 760   f(x): -45.256727|grad f(p)|:1.2916659082740989
                      +# 770   f(x): -45.256727|grad f(p)|:1.2916659081327297
                      +# 780   f(x): -45.256727|grad f(p)|:1.2916659079913815
                      +# 790   f(x): -45.256727|grad f(p)|:1.291665907850015
                      +# 800   f(x): -45.256727|grad f(p)|:1.291665907708641
                      +# 810   f(x): -45.256727|grad f(p)|:1.2916659075672852
                      +# 820   f(x): -45.256727|grad f(p)|:1.2916659074259267
                      +# 830   f(x): -45.256727|grad f(p)|:1.2916659072845595
                      +# 840   f(x): -45.256727|grad f(p)|:1.2916659071431842
                      +# 850   f(x): -45.256727|grad f(p)|:1.2916659070018381
                      +# 860   f(x): -45.256727|grad f(p)|:1.2916659068604721
                      +# 870   f(x): -45.256727|grad f(p)|:1.2916659067191119
                      +# 880   f(x): -45.256727|grad f(p)|:1.2916659065777438
                      +# 890   f(x): -45.256727|grad f(p)|:1.29166590643638
                      +# 900   f(x): -45.256727|grad f(p)|:1.2916659062950224
                      +# 910   f(x): -45.256727|grad f(p)|:1.291665906153663
                      +# 920   f(x): -45.256727|grad f(p)|:1.2916659060122988
                      +# 930   f(x): -45.256727|grad f(p)|:1.2916659058709288
                      +# 940   f(x): -45.256727|grad f(p)|:1.2916659057295612
                      +# 950   f(x): -45.256727|grad f(p)|:1.2916659055882171
                      +# 960   f(x): -45.256727|grad f(p)|:1.2916659054468413
                      +# 970   f(x): -45.256727|grad f(p)|:1.2916659053054909
                      +# 980   f(x): -45.256727|grad f(p)|:1.291665905164106
                      +# 990   f(x): -45.256727|grad f(p)|:1.2916659050227592
                      +# 1000  f(x): -45.256727|grad f(p)|:1.2916659048813917

                      To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.

                      q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.363357
                      +# 10    f(x): -44.836478|grad f(p)|:1.681699351968465
                      q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.363357
                      +# 10    f(x): -44.836478|grad f(p)|:1.681699351968463

                      Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.

                      @benchmark trust_regions($M, $f, $grad_f, $p0;
                      +  objective_type=:Euclidean,
                      +  evaluation=InplaceEvaluation(),
                      +)
                      BenchmarkTools.Trial: 9 samples with 1 evaluation.
                      + Range (min … max):  594.171 ms … 618.063 ms  ┊ GC (min … max): 8.40% … 8.11%
                      + Time  (median):     599.492 ms               ┊ GC (median):    8.37%
                      + Time  (mean ± σ):   600.660 ms ±   7.276 ms  ┊ GC (mean ± σ):  8.40% ± 0.16%
                      +
                      +  █ ██    █    █ █    █  █                                    █  
                      +  █▁██▁▁▁▁█▁▁▁▁█▁█▁▁▁▁█▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
                      +  594 ms           Histogram: frequency by time          618 ms <
                      +
                      + Memory estimate: 1.97 GiB, allocs estimate: 62496.
                      @benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;
                      +  evaluation=InplaceEvaluation(),
                      +  objective_type=:Euclidean
                      +)
                      BenchmarkTools.Trial: 203 samples with 1 evaluation.
                      + Range (min … max):  18.204 ms … 33.191 ms  ┊ GC (min … max): 6.49% … 6.59%
                      + Time  (median):     25.342 ms              ┊ GC (median):    8.72%
                      + Time  (mean ± σ):   24.617 ms ±  2.267 ms  ┊ GC (mean ± σ):  8.51% ± 2.03%
                      +
                      +            ▂                     ▆█▆                          
                      +  █▄▄▁▄▁▄▄▁▄█▇▁▄▁▁▄▆▄▁▁▄▆▁▁▄▁▁▄▄▄████▆▁▁▄▄▁▁▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▄▄ ▆
                      +  18.2 ms      Histogram: log(frequency) by time      30.9 ms <
                      +
                      + Memory estimate: 43.63 MiB, allocs estimate: 5471.
                      @benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;
                      +    evaluation=InplaceEvaluation(),
                      +)
                      BenchmarkTools.Trial: 424 samples with 1 evaluation.
                      + Range (min … max):  11.032 ms …  17.260 ms  ┊ GC (min … max): 0.00% … 0.00%
                      + Time  (median):     11.284 ms               ┊ GC (median):    0.00%
                      + Time  (mean ± σ):   11.791 ms ± 870.710 μs  ┊ GC (mean ± σ):  3.86% ± 5.39%
                      +
                      +   ▁▇▇█ ▁                                                       
                      +  ▃██████▅▃▄▃▂▁▂▁▁▁▁▁▁▂▁▂▁▁▂▂▂▂▂▁▁▁▂▁▃▄▅▇▆▅▄▆▃▄▂▃▂▂▁▂▁▁▁▁▁▁▁▂▂ ▃
                      +  11 ms           Histogram: frequency by time         13.8 ms <
                      +
                      + Memory estimate: 13.15 MiB, allocs estimate: 5448.

                      We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.

                      Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.

                      [distance(M, q1, q) for q ∈ [q2,q3] ]
                      2-element Vector{Float64}:
                      + 7.359460685640475e-16
                      + 0.048053815279360104
                      [distance(M, q3, q) for q ∈ [q4,q5] ]
                      2-element Vector{Float64}:
                      + 0.08270031469111411
                      + 0.08270031469111411

                      Which we can also see in the final cost, comparing it to the Eigenvalue

                      [f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]
                      5-element Vector{Float64}:
                      +  0.013874911807420176
                      +  0.013874911807405965
                      + -0.41812208889417946
                      +  3.552713678800501e-14
                      +  3.552713678800501e-14

                      Summary

                      We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.

                      Literature

                      diff --git a/v0.1.4/examples/Riemannian-mean/index.html b/v0.1.4/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..89005c0 --- /dev/null +++ b/v0.1.4/examples/Riemannian-mean/index.html @@ -0,0 +1,33 @@ + +Riemannian Mean · ManoptExamples.jl

                      The Riemannian Center of Mass (mean)

                      Ronny Bergmann 2023-07-02

                      Preliminary Notes

                      Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

                      For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.

                      The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

                      There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

                      For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,

                      Loading packages and defining data

                      Loading the necessary packages and defining a data set on a manifold

                      using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
                      +Random.seed!(42)
                      +M = Sphere(2)
                      +n = 100
                      +σ = π / 8
                      +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
                      +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

                      Variant 1: Using the functions

                      We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.

                      f = ManoptExamples.RiemannianMeanCost(data)
                      +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

                      Then we can for example directly call a gradient descent as

                      x1 = gradient_descent(M, f, grad_f, first(data))
                      3-element Vector{Float64}:
                      + 0.6868392794567202
                      + 0.006531600696673591
                      + 0.7267799821044285

                      Variant 2: Using the objective

                      A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

                      rmo = ManoptExamples.Riemannian_mean_objective(
                      +    M, data,
                      +    evaluation=InplaceEvaluation(),
                      +)

                      Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

                      rmp = DefaultManoptProblem(M, rmo)

                      This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

                      s1 = GradientDescentState(M, copy(M, first(data)))
                      +solve!(rmp, s1)
                      +x2 = get_solver_result(s1)
                      3-element Vector{Float64}:
                      + 0.6868392794567202
                      + 0.006531600696673591
                      + 0.7267799821044285

                      but we can easily use a conjugate gradient instead

                      s2 = ConjugateGradientDescentState(
                      +    M,
                      +    copy(M, first(data)),
                      +    StopAfterIteration(100),
                      +    ArmijoLinesearch(M),
                      +    FletcherReevesCoefficient(),
                      +)
                      +solve!(rmp, s2)
                      +x3 = get_solver_result(s2)
                      3-element Vector{Float64}:
                      + 0.6868393613136017
                      + 0.006531541407458413
                      + 0.7267799052788726
                      diff --git a/v0.1.4/examples/Robust-PCA/index.html b/v0.1.4/examples/Robust-PCA/index.html new file mode 100644 index 0000000..26f33d8 --- /dev/null +++ b/v0.1.4/examples/Robust-PCA/index.html @@ -0,0 +1,64 @@ + +Robust PCA · ManoptExamples.jl

                      The Robust PCA computed on the Grassmann manifold

                      Ronny BergmannLaura Weigl 2023-07-02

                      For this example we first load the necessary packages.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using LinearAlgebra, Random, Statistics
                      +using Manifolds, Manopt, ManoptExamples
                      +using Plots
                      +Random.seed!(42)

                      Computing a Robust PCA

                      For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

                      We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

                      \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

                      The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

                      \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

                      where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

                      The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

                      First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

                      n = 40
                      +d = 2
                      +outliers = 15
                      +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
                      +# Outliers:
                      +permute = shuffle(1:size(data, 2))'
                      +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
                      +# We are looking for a line here so we set
                      +m = 1

                      We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

                      M = Grassmann(d,m);

                      For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

                      Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

                      Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

                      The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

                      We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

                      ε = 1.0
                      +iterations = 6
                      +reduction = 0.5
                      +U, S, V = svd(data);
                      +p0 = U[:, 1:m]
                      2×1 Matrix{Float64}:
                      + -0.7494248652139397
                      +  0.6620893983436593

                      Let’s generate the cost and gradient we aim to use here

                      f = ManoptExamples.RobustPCACost(M, data, ε)
                      +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
                      ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

                      and check the initial cost

                      f(M, p0)
                      9.430690947905521

                      Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

                      q = copy(M, p0)
                      +εi = ε
                      +for i in 1:iterations
                      +    f.ε = εi
                      +    grad_f.ε = εi
                      +    global q = trust_regions(
                      +        M,
                      +        f,
                      +        grad_f,
                      +        ApproxHessianFiniteDifference(
                      +            M, q, f;
                      +            vector_transport_method=ProjectionTransport(),
                      +            retraction_method=PolarRetraction(),
                      +        ),
                      +        q;
                      +        (project!)=project!,
                      +    )
                      +    global εi *= reduction
                      +end

                      When finally setting ε we can investigate the final cost

                      f.ε = 0.0
                      +f(M, q)
                      9.412961981726742

                      Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

                      fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
                      +plot!(
                      +    fig,
                      +    q[1] * [-1, 1] * 100,
                      +    q[2] * [-1, 1] * 100;
                      +    linecolor=:red,
                      +    linewidth=2,
                      +    label="Robust PCA",
                      +);
                      +plot!(
                      +    fig,
                      +    p0[1] * [-1, 1] * 100,
                      +    p0[2] * [-1, 1] * 100;
                      +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
                      +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
                      +    linewidth=2,
                      +    linecolor=:black,
                      +    label="Standard SVD",
                      +)

                      Figure 1: The result of the robust PCA vs. SVD

                      diff --git a/v0.1.4/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.4/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..94f21d4 --- /dev/null +++ b/v0.1.4/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/Rosenbrock/index.html b/v0.1.4/examples/Rosenbrock/index.html new file mode 100644 index 0000000..34dd21a --- /dev/null +++ b/v0.1.4/examples/Rosenbrock/index.html @@ -0,0 +1,57 @@ + +Rosenbrock · ManoptExamples.jl

                      The Rosenbrock Function

                      Ronny Bergmann 2023-01-03

                      After loading the necessary packages

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using Manifolds, Manopt, ManoptExamples
                      +using Plots

                      We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).

                      a = 100.0
                      +b = 1.0
                      +p0 = [1/10, 2/10]

                      which is defined on $\mathbb R^2$, so we need

                      M = ℝ^2
                      Euclidean(2; field=ℝ)

                      and can then generate both the cost and the gradient

                      f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                      +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
                      ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

                      For comparison, we look at the initial cost

                      f(M, p0)
                      4.42

                      And to illustrate, we run two small solvers with their default settings as a comparison.

                      Gradient Descent

                      We start with the gradient descent solver.

                      Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

                      gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
                      # Solver state for `Manopt.jl`s Gradient Descent
                      +After 200 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 200:  reached
                      +    |grad f| < 1.0e-8: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

                      gd_x = get_record(gd_state, :Iteration, :Iteration)
                      +gd_y =  get_record(gd_state, :Iteration, :Cost)
                      +f(M, get_solver_result(gd_state))
                      0.10562873187751265

                      Quasi Newton

                      We can improve this using the quasi Newton algorithm

                      qn_state = quasi_Newton(M, f, grad_f, p0;
                      +    record = [:Iteration, :Cost], return_state=true
                      +)
                      # Solver state for `Manopt.jl`s Quasi Newton Method
                      +After 44 iterations
                      +
                      +## Parameters
                      +* direction update:        limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.
                      +* retraction method:       ExponentialRetraction()
                      +* vector trnasport method: ParallelTransport()
                      +
                      +## Stepsize
                      +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
                      +  * retraction_method = ExponentialRetraction()
                      +  * vector_transport_method = ParallelTransport()
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 1000: not reached
                      +    |grad f| < 1.0e-6: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

                      qn_x = get_record(qn_state, :Iteration, :Iteration)
                      +qn_y =  get_record(qn_state, :Iteration, :Cost)
                      +f(M, get_solver_result(qn_state))
                      2.359559352025148e-14

                      and see that the final value is close to the one of the minimizer

                      f(M, ManoptExamples.minimizer(f))
                      0.0

                      which we also see if we plot the recorded cost.

                      fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
                      +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

                      Figure 1: The result of the robust PCA vs. SVD

                      diff --git a/v0.1.4/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.4/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..d296fcd --- /dev/null +++ b/v0.1.4/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/Total-Variation/index.html b/v0.1.4/examples/Total-Variation/index.html new file mode 100644 index 0000000..14385ff --- /dev/null +++ b/v0.1.4/examples/Total-Variation/index.html @@ -0,0 +1,104 @@ + +Total Variation · ManoptExamples.jl

                      Total Variation Minimization

                      Ronny Bergmann 2023-06-06

                      Introduction

                      Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].

                      This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.

                      The manifold-valued ROF model

                      Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold $s = (s_i)_{i=1}^N \in \mathbb M^n$ of length $n \in \mathbb N$, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term $D(p,s)$ to “stay close to” $s$ and a regularizer $R(p)$. For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain

                      \[\operatorname*{arg\,min}_{p\in\mathcal M^n} +f(p), +\qquad +f(p) = D(p,s) + α R(p) = \sum_{i=1}^n d_{\mathcal M}^2(s_i,p_i) + α\sum_{i=1}^{n-1} d_{\mathcal M}(p_i,p_{i+1}),\]

                      where $α > 0$ is a weight parameter.

                      The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost $f(p)$ to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any $p_i=p_{i+1}$. So we have to use another technique.

                      THe Cyclic Proximal Point algorithm

                      If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the the Cyclic Proximal Point Algorithm [Bac14].

                      Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.

                      The Optimsation

                      using Manifolds, Manopt, ManoptExamples, ManifoldDiff
                      +using ManifoldDiff: prox_distance
                      +n = 500 #Signal length
                      +σ = 0.2 # amount of noise
                      +α = 0.5# in the TV model

                      We define a few colors

                      using Colors, NamedColors, ColorSchemes, Plots, Random
                      +data_color = RGBA{Float64}(colorant"black")
                      +light_color = RGBA{Float64}(colorant"brightgrey")
                      +recon_color = RGBA{Float64}(colorant"vibrantorange")
                      +noisy_color = RGBA{Float64}(colorant"vibrantteal")

                      And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.

                      Random.seed!(23)
                      +M = Circle()
                      +N = PowerManifold(M, n)
                      +data = ManoptExamples.artificial_S1_signal(n)
                      +s = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]
                      +t = range(0.0, 1.0; length=n)
                      +scene = scatter(
                      +    t,
                      +    data;
                      +    markercolor=data_color,
                      +    markerstrokecolor=data_color,
                      +    markersize=2,
                      +    lab="original",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    s;
                      +    markersize=2,
                      +    markercolor=noisy_color,
                      +    markerstrokecolor=noisy_color,
                      +    lab="noisy",
                      +)
                      +yticks!(
                      +    [-π, -π / 2, 0, π / 2, π],
                      +    [raw"$-\pi$", raw"$-\frac{\pi}{2}$", raw"$0$", raw"$\frac{\pi}{2}$", raw"$\pi$"],
                      +)

                      As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.

                      Defining cost and the proximal maps, which are actually 3 proxes to be precise.

                      f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)
                      +proxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_TV(N, α * λ, p))

                      We run the algorithm

                      o = cyclic_proximal_point(
                      +    N,
                      +    f,
                      +    proxes_f,
                      +    s;
                      +    λ=i -> π / (2 * i),
                      +    debug=[
                      +        :Iteration,
                      +        " | ",
                      +        DebugProximalParameter(),
                      +        " | ",
                      +        :Cost,
                      +        " | ",
                      +        :Change,
                      +        "\n",
                      +        1000,
                      +        :Stop,
                      +    ],
                      +    record=[:Iteration, :Cost, :Change, :Iterate],
                      +    return_state=true,
                      +);
                      Initial  |  | f(x): 59.187445 | 
                      +# 1000   | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283
                      +# 2000   | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678
                      +# 3000   | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907
                      +# 4000   | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957
                      +# 5000   | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175
                      +The algorithm reached its maximal number of iterations (5000).

                      We can see that the cost reduces nicely. Let’s extract the result an the recorded values

                      recon = get_solver_result(o)
                      +record = get_record(o)

                      We get

                      scene = scatter(
                      +    t,
                      +    data;
                      +    markercolor=data_color,
                      +    markerstrokecolor=data_color,
                      +    markersize=2,
                      +    lab="original",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    s;
                      +    markersize=2,
                      +    markercolor=light_color,
                      +    markerstrokecolor=light_color,
                      +    lab="noisy",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    recon;
                      +    markersize=2,
                      +    markercolor=recon_color,
                      +    markerstrokecolor=recon_color,
                      +    lab="reconstruction",
                      +)

                      Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”

                      Outlook

                      We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the $\operatorname{TV}_2$ yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.

                      Another extension for both first and second order TV is to apply this for manifold-valued images $S = (S_{i,j})_{i,j=1}^{m,n} \in \mathcal M^{m,n}$, where the distances in the regularizer are then used in both the first dimension $i$ and the second dimension $j$ in the data.

                      Technical Details

                      This version of the example was generated with the following package versions.

                      Pkg.status()
                      Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`
                      +  [6e4b80f9] BenchmarkTools v1.4.0
                      +  [35d6a980] ColorSchemes v3.24.0
                      +  [5ae59095] Colors v0.12.10
                      +  [7073ff75] IJulia v1.24.2
                      +  [8ac3fa9e] LRUCache v1.6.0
                      +  [af67fdf4] ManifoldDiff v0.3.9
                      +  [1cead3c2] Manifolds v0.9.8
                      +  [3362f125] ManifoldsBase v0.15.4
                      +  [0fc0a36d] Manopt v0.4.43
                      +  [5b8d5e80] ManoptExamples v0.1.4 `..`
                      +  [51fcb6bd] NamedColors v0.2.2
                      +  [91a5bcdd] Plots v1.39.0

                      Literature

                      [Bac14]
                      M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [ROF92]
                      L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.4/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg b/v0.1.4/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg new file mode 100644 index 0000000..0aa5041 --- /dev/null +++ b/v0.1.4/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg @@ -0,0 +1,1551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg b/v0.1.4/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg new file mode 100644 index 0000000..5994075 --- /dev/null +++ b/v0.1.4/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg @@ -0,0 +1,1048 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.4/examples/img/bezier/Casteljau-illustr.png b/v0.1.4/examples/img/bezier/Casteljau-illustr.png new file mode 100644 index 0000000000000000000000000000000000000000..ecddd4acc643c22a65dc416fa64eb3341011fbd5 GIT binary patch literal 131251 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≪`$_g5pU!0dqVCc7+?{w6;c^8V_2)Et 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ຽ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%0DsP~>N- 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 IM6N<$g5?279{>OV literal 0 HcmV?d00001 diff --git a/v0.1.4/examples/img/bezier/bezier-acceleration-orig.png b/v0.1.4/examples/img/bezier/bezier-acceleration-orig.png new file mode 100644 index 0000000000000000000000000000000000000000..43dd0a9538f7a91b1c9525e778129e281ac92141 GIT binary patch literal 263498 zcmaHS1wa(-_V+F+jYz4KD1s78cdC>$NOvsVz2pKC(%mHzD&5^FE!|6Z!_x7szH#4s z|Mz~oJ3G&uIlptBIp;iQo|yS0FDs6N`2-UH0N_YUyi)`KfTxJ9_5m7#;)>tJjW{SY zd;3;i^6gtHd3zgUGfOZ4Ko{j1B_N@xK-ldq)+tYo$xFCw`j6yS)*~QYnlfhm+WjU<&Rz%6pf) zjdT~Lk7o=yn2dIGbzl%r95b;ZD6|Up&h&GPph3Kn;-g$1zYaKr?d~p9GD94>PSx@G zO--YTk>C97(MF)5oXsRG=*%&9RXFAunMlwz#=Hw8rr z9vy_E{Ouhrxow!Jz1Tfl!HU$cV2@lbGRAIV3bI`NY17Fdc2A{)va*%LTs3%kutz{- zh7$H_%>(y*#TNOLdZ$RqliSIS7`m{wc3mgNIvjEvy>nspbmf?2nzz#ose3&!*_k_h z{Avu~K*QG4D3pryt2+p&qS0?V`QZL~^Lkv)K+wmNYwAQ9BzXU^c9Qu7XTe59S9V{k z&X96xMsOddUSqeBkmKvg&{|fLhwxt+SWVJcMh5U2QGNhG2ND2~5hWnv3jjU=p#Clc z00zLPf0xaHbbs<7IDsqxBm@r*VzURb{w@aYY}n)pGCzu5IYQ8 z33UemKrQaq2AsCy8bw@%lGz6}M>QE~UPBuzCVe9t12B`TmF+JSfZvrDQM3X(>QlK| zSz0^rx(ZPL=HNw?f004dRKHmqEd;355LJ9@V-Kd{WMXDwrWVAcqN3urH!|i`d?)rN z9C0K-ZR+S~%L@XzxVSL6urb-#n}Aq&cz8g}tRPlaMg#|=1H{@<-<8qY;rSmz{*v|khbX6tBXV@>r-uD*edlcNAN^)E$#fBvW^*wyS`nyelEyez~8f_|L=u`n@%{u}I< zng6YVCT3Q)zpIEa!+%8>8UD?0>tt{Fo7cz?1hxcQfvp`K5Sm#2D-I#=Z{WYx&sE>{ ze^w6xl9BoU!>p|St2zfqQD=my{xto6Rp{^mVhaW-f*ov}>FkG_DZ(;hG0P!{@*_MC+S}f>?0*$T37F(ZELtQ_3j%-n1oJbwcJ#qgg{ zc}smqV;g%bK^c8RDmkS;`TwT=gWbrGR}8_Z?11N)N zvqt)k`hP3_BaQs6n4X!1mlt6C9vJUQ~x?)Y4$rq*y`ImfPclc0QFyi{dY?FJ7fI9{B9q-hNk+~CSW5$ z5I^YO3ID3n->5$!4mQS)F8cOh5fg+B1jP~Q;&+;+qWdFWUi~HM-}(NxJQq_iBC7vS zL~#G*m_O?Eo9llIF|&4X)VDSS|LGGmgio0D!G^}h9Gr|?+$>y->@3VYj0QXgY>ez& z-1^+cU?Y8FeMDpUL;649|67N?;jcU_=%DWmHu?+rC+$B${Geai+S2UbUG)d`-#z$O zRQz9$^CN-_5ib9TwqL24*T}{YadE$khQ>xboM5maqY<+)BI=lpSs1xl!N!b6#>R#m z23%YmMx5+_$^VC#e^vHR6_Wqgc=}*gZdOAM7Df(EZUaVkL&TrHA&UW`#j@!e@)#R2 zb8{H{CHf!me~A8-8hL+(prz9-&KT(K=h6pYF-_}Ot&fk!K(*BcQ z?O$pHIk-6gMEsNbp9uB;iufn>PsATC`^Rngw@3e=B5v}6m1i7$_Mq%E>{lU1;)8HUc_aOJeGI^lEvEW zkpYA+1SaHV=|pOQFrSD#5zWSMV|k{xS??HEboBw2?y!AY4{3%?S?urfDtojMWq&U- z85guDnhxbzSF;GaCo>%6P<^)ZF&u@LfSc>Zuqk2L8xftS&5(oZ2?}z``<$5ZZLEzl z4Nm2h`x$>f`unTG$>!}7;+iGT1Nz4MuBR4Ve9t5^6%fbjN1j|p@Hd}_CBCH@iX&}= zpuFKr1*L7BetGV5qK>4wUsvdH?o_R;d-<~(R^jco>rJuGm_Tc6QqG!Y9s7P-Le<6@ z4A~49@;Z{?0;-Kq-W^f8fcTs(b&}?sXRR0k7VJ+#vC@~J&Tqds4n!BYwuY2nT?1WF zMxuuu#f!O=?MxoPup~lRe9MlcbL6QomxAEG82dq*$ z6!#}FsLDfyN^a2tJqP4Mi5%9oFZ0s{6U}1FX3Itx^UJ&Vta+5~YR6%?)pFVx46d0O zb-tUY4bOcJvQbdB&ztXWJ6F0Ru(GGG;5#cdB?B?EaweIO@*7Lj$YK4x{-{m{> zmsQV=Pu-MWmo@i4nHCSYDjzD)jTN|{{^=vKt@CFQ7K`+7? zCH<|Lmap{O^bGmlo%K2m&2uvkl;1lYo-;qaaa~s~hvQ_D;SQIXo=70UEYBOBG#s(( z&Y+GS{4q`MbH5U}ySt|tSRRhjR8F8LSXbi)-yVskk@E0*FUNoMj{V}W9ZwZ@6z-DR zn&XZsRM%85bkT}eG*jzfa@mFjA}dtMM-Id#Pe#9>-I#+v!FQ`9&7HiC1u`O;9eIW_Z=8$ z;!~he4EAjFToeG;)t74&#*_0oGvpH_C6m(28i$m9TF%;in2IhgTZI0V-u8hnF5^I1 z(;b6mMFE6NEf&Yc$s}&SsX*(su@kqU1W-i@bu9bRGC4*pEhhOJ8HQ)hn+YX`iH#?y zN&^E90LXTRBu0|4$hS~u&d%Iy0s0q1O~AO{iXC1vfTAFwz=XOkS6Lx=i!l_qR0AD%-^tpQ|06b6%3^w69x{sn3Kq-Yq;I-@wC!zw}!N}T{i>HIb01hSKM^zMg}jZ zX?<+g6}Yc!_HDiQ3wuJ;w~6Cy%GKNQ#R^EOuHq4wh5^flk~l|2^^*J^1v zcWbeK?mvOlaHoRQ_MD+fgPoaqn1&R2)72U)i3%rj6W&p%rhT#eYBCa^Baff=SROfI&t(?NX`0FcfYSiLGjIM-O=I{5>iS` zPc}{Ehh*8>-ZGA<7M|;lS89tB9yai{Arox z^!Bd*PM}m@AX>N_N!hJ~zom0ga-8u-xlZx{J;(NZ&KqR!x2BLPT$4FI2svAr@5cIgPwR3f?@p^gKv=s34Jr~U5 z#JuI4nqfZ#(3&^U->=onV;aZUnx#X1aWxuET!U)VN>D;vlMh{IXyN~1L%b*?>4gKJ zj~eeR_O`b#b2;CipYO1+m@Gj9zja!p_gW9VI8Ce-P5#u|SLPsT{G74-6zZd?=h zbHS+jlUl3kPdRdZ0SO>MmZZ39oeKNQNzfekRizYD{kG4J*CGv{PMIK|H01_mhsDud zV42UiMkRrMlGuPcQX}lsv9h8jw}4STB!_F5edhj{qe{~jdinF>JHOpLAz0dNG0r0Z zM71g-4(vn-r)p%CN!AfMP&v)3a8iX&gamo-cj6OWH95SlEH~SihJrj`M z)!qX3Nsd=-Yc&nJIqnubE5+ijC5WtjLVvbJ2I^pJ#4I5v_*z+YyM;;8kd_c{Eo%|X zssx>9&!jUwadR~bHw?Q91#W}Akju-o)jw zaoX$L8rJ0Lf3iuU>v2TtNmnjW1oM&~Y?|_l^BQWGB5yfJNls?iOg}ft2;shsduwB( z`z685*K2*oPP9W0O$c~0f7t#I)BjWHqp;`VxJ0J}Qf0O;*p5p-@q0WualLTCqGF{=X2avUpGI5)R5@u%&rG|{br|$lY zMsx64b*=W%UPl5%FHeeQ7+NFG9Su{WotxAs2b3>%#X60n+Hov%jJ#e|&Jz$QLBDI0u(d>L$**XfzD%5I4*wYlt%DuA6fJ490N60Ic(*`8PnSBu< z!(S(%Uwkj~>(FWKGA7r}$J^$1r75|!v*sV0K8SCaSNWf*clZS#WRR? zny<(EtN=1olno5{q;~Ffjk`$lqYo^Pldlt5O^MX7e+^M-om4~HSj_AH?lQ{od@3T1 zv=5hzKXECkr^;$J$_iFX>%O~WC0^E>gZ-v~uWjU#l=rLv*7D z-(Xb4E~xit2Ie4o5@r~to-cQva$P>IKJz$9fi(ogZA~t}^ag&+z_axnT3pn_3z3OlUgIk%`^$x*E;6BfSZYQpvJDCY9ivJ7#FB{{S^nzHQG1YWkPf zZrxpn@6DIktgmKH)JbnCQoeQ?(5-car-!}m!yV-kiFgHfi<;bEda0vcZajcYW^wo- z`X&ElNq>UJQHXBC$4+-cRc)tn!)&ZEU}7&JCp(oGs(rg2yD_P z*eKs?u(xq~`NH&?oz`4fbYbm7TmF$pH#cN{k*pM-o;8qwFD-;;mCtF=#Zi);exQ7vtd-->|Rkdu&PRUMZuQteooWN9v;6;dpn%kdegqv7(~{zy|w1 zqU{#w32Dox#X2Y;kqZlv6l(--L;?~O8g9>KrE0>SYF1hD35s zZ67S=gb6~;SQe`jUAZ!aFytv86;uYG%9|?7rE;@eOb>aTMR$gfa23_ACl^95*!fL; z__)8$(1ts;l2bKl*%AdwlHAl;7Hcu6*cF?I=g|^}4Gf&=XH2^F#?1sTd@g-o`k|9` za*kw-OmCCp>+Wo|4I4aXE!WJ~jf9_La|N5KVRga%pz)no#$~^Wpe#?JBRc6B2u=L( zrzkAog7H}~rTU=49SS^xPd*CdyEpR^op`>Tuk5RQUdR>_I*(_?czbb*t0)yM1v0Ja z#{}fsSMvFMHn?Z9(S0oFDys$orLJ(sjT>$6>}}M|0sgK8)^!1c(pH znL8=rpF|pN!gVI2R~H7*%fRz-a=zdwV4Qa){u6pvBG#}UJs62Fvz$Rx~ruUW4MvEKY=xS z-#=(zFjykD7&d_F!3^RAZg+1_^MpKkgaxh}HUthtMx64nhO^3%Lz9Ju$V*yg37~F| zjY#tx12|$4Avfx5XmXZK)7?{10uZ8xTIX~n<(=e&<_VQCo???WO|C# zv3+AXCclTS>C9AFX{sF@ez&->xVgK`O|h=qh?Ziy+}+W=zgkJH4(we^(ABxvgWc`T zG`lEeIA^7~iX)liqeMsZYF_Rfjz>X>wT@OO?`v#WOhDe3eR9)3b|UUCA_CQjyl74q zhR~&}0TPoX%X8#@qcT&*t+8M?_S_fo5V>prG zvYz7(_rHALRN3LF9bzz0?5!TiEIRFktu~=A1EXyjN!PRHc^k^ayunc}Q}K!U6U(=q zrd}}}sBNq@G4uAAFiyxh>ujgLH|3tX5E{cO5BGN6PEmbo0IBz&L;49_SqyF`7G@>~ zw=iz$RD?5DPpk4(JG6o6@;j?=diRohw8u`TlV89o>Ln?@-9CTQB|}Zh6C*%5*#a@! z<}hmn94pq$mOKsV)uP&u3m(1iBe_MF6xt^R6GKz9R4Y!+(iZh9S5ZV7ITd6->az(%2mf6lDo{6 zK4f-%CVa^sdwZU>%B8RGqW@z6NzDDz0kZr$;829{wyx3rya>(6DQ^h5fr*J8NT{*M zB;fM-1C$7^eC9jIaC(ceixg2D**V9ySgzF<>vmG%jugq$VW)UU%3c$#l}U_>-2W}_ z+I2DAeZLml;<{s8Rrj`p0%@j%tP?qu(L#d=UmHbDyTYI|SbTF9!_+y3!fG_&GY$Ie zGn9wbS|O8D3;@PiIk1CHG*)APbdj*&cpSZ|V6YaF(N;tVJQa3uy-F)|$qu-uYY@bB z<;5=e)f~&nTu04HlebD=@+tD}V zG&Vuy8UUXsFUI|vP`W7P#zMEkUvKaDQ?Coa)PAx&*2C|pF5;b?;v; zdmK51C1xSa##=LJb<2SiiVx*k&-`mn+iU5hFd zh+^jZtUk$4y1(3E24`N-bR3unpqe>tv{wy4w^jNej2)9+shA^FUt?F%_C8btWKT=UF9)mZzNOWhz!@d ztoU-x7r}oHqW0KQB1eBYeRcdw)iKjAu!RTCaabQA(!(zN#1Hf2gtKBhE^a@F3i|+; zxA!L1f|6>!iO<`HawBs5g_%IS54!4{RG(lcRq$2QK9|&Wyc3Nl$u%-VCrvX7p0L{G zDvzn6m?+86W33QC3m5n66yEeOCWhOQFA;*tw}>oLXnk{=pzSjf*dOa zI0n<5h!pY)D`1^I5OzZ;$v}gmU}#U44)?irRPv*);uq;5Gq(1sRuw4fFUs1@LYFS6Nd>C0Z!fW;T;4^5Ft&?d`#Q|x$^8VytsKF22QR?|lO$qt4@T4Kl5C}s zxC_}wbj#0Bt<_dw5vVuj&^=xN1V>z?lV|%2w3oZrgIHAPf&7K}6f5C1fWA$tqjD;@ zWFL=}OAsydrAu-Amw0`whA8j3YdXtT2A}->HJ;vaKo$|S_PR*b%$?FIVhxP?zOav! z6dw=&+>IblqLs(_+%x0;W<$vPq4i4VuGj`Od$eJos;ZquWpI(c=V&^mfqF00NZ@3> zDV=z0gdJcjl49zx8g)XE1Y4A2M!M~Iv{CvDyOaFc$9%F(EgXC%!^QG6FF6{;Ds+G< zrR$;(maCk{rYOkmrytUbEjN;PE2KdZYS9m2UJ`QC{;Y^&_P>A+3t z=MhZ3d_5y|s<~%Fy2mKo_O`&R;_fY9$~IQYb?!}pr6RXOWoJ*M$?s4OUE1cNd_f<+ zbll>+OxT`pot)>k(qpV`Q)>6sK<{Ou4A+HCxOeH+dHHmGmG|mEV3%`KgZz>kasIBA zZeM)7Shdcm%k5KdyU~<8&iXK!3okz2gd!hy-p|i{%HJau(jFHqe{b)HFaj5dm<&qe zXSKKcLv*3bjgLc)Xo1663LQoKLf9o_sEKk}ryB}aU`9KyK47N^p$iwW#;#shYPoO| zWeK-Ww96o;$_ILh?Jgf73}zI4pC1lDruEcs8@~B#HCB@knxI`Gt~_t*CUQ?5Z-dp4 zik=Y<|9E;N%sQL1z`z8n)U39i2P6tH1Vt6)FR<=GiEgHtS|CJz0T@?}e$Ezy0w0p>wS8Hm$%5}eb3(R! z`+#HLHiYgkHKW3uegyN}z7sOiC-<5-C-EZ>mpuE)=|>D>P?NfMgO}NQo-3L#or`sF zWXiM(tXeuPi)3)NTfCVDI1_giF7v{dtc3(wS(mju@iLppDC#c;fV(F>A4(3yiXNYf zr-|rDJ4C8BA?Cx%svB>u-h;2)?@w~zcL@~R2O18(^Nv$=K^QSLZM*QM+{2sQ*mEFd@2`T;8zdm12Z$ee_|bz83)c(h3sBak$2r%H zgKS?i@sNW8fe+_D$0G*PI?jod8Sv$H3QO@|#r>`v4I^uhV90`>?@PT!YOYy39W5vp z*SDhvzlDPzZS1c`fFD$&&yn$;0{uix$@TRPQTY4c$_-DPhPt#A;%N`bR5!7=J26lx zx}Zt9vk2ED5lz;YQlGaLJFQ6xt*M?|d8pP2UG*}Z4ou8TC{pHjV;WY^ z7&T=}YEMVk<1GL3xRvFCTJ8yO`Nd;7eyqsyQ980N?F(;*hgjW~0C?R|m(MsrHG095Tfu;m42#M^gsheT|DPq_GTPWArTtEw*E& z$Nr@z(E(4}2Y0wF?x2=^l}6c5{SHI@7j?6UxzjnSybfXN z_U8(QnYpUjr<;Zm#DaG|az^J~du;Gsb@khARpU-&RmQ=(_yI0+{~wTrf&+EV+tVZy zyr#o#-P((Ys)er9E2}gfxMLV^ceymuXYxVTbl%-mS_0u(V!&ZdH$l*BW%K=YGi7V9 z7stdoBjATy>@Gw678Afonq5R4ONXiE7|!hD0l^hhs!{H{K})1hThd(C7#4rEp;c-P z2S_L50|=-dEc!}AKgiMw>q^Bq>PqW|(NssDMd){u>p@v^XiOcygC<`Hm=m0XL)TW!_P7goY65cp9PO5P< zg%hn>=p6cz@b?It_?CGr@SFA}JUfcIN($GBSQPaNRgC{G>aXbNMJ}&{hu36K6SAU) zyF0;^{ROVbkES$if7kX3N{w6!KJMXQC_!(1^!)krKorM8&w73QI-P13G$#1oY&G8g zLZihnqnT=v+PGS&J$DfZYY$WRrk@1spkXDgDy6WFqmRj5MDB~ttyZD8Yi5J_6_5An z#6U(3hr8~C(_81ad$(N9oP`)7PIsxw1f~KnOo&v;jR(yzHWl-bMY&FU;#^NR{3vf0 zvAFL=g_qHw4WUlX_|T~k*$D!%jliARxc+^K+-pac_wHz!0&QfbB=HmW442dgPY(XNp_^7ya ztN*Q5hO5hbKd0c#kiffFZ3@x-Ha>*PoI2zoUCjyI#dIQKpBD9L(48z7#to{uzkD{xHkXrMS>yQ4Ky;r3$}?HW z;CcT7iv`-#!JkN?Atcl_S3>2h>5Rj4O@z&a%gjAxA?TQs1eGJ$x|GnP@tl3X66p?K>nl0 zq7(qvBEb;JRYW)4qwqB}!an*u!rIFR^z##s`H0oK^QsN~);=uzGe#dQV5>O5mCL_0 z>_Q%!H5o{la7f%{tOK6q;pKG$EY#N+vqb)wm7RQMlzu@~jM|djS%-!<@fk-PTawtX z!W+mgRkvhzQu9^T_Gjv|_2zFT62}o1SV3WIbniHQ*-~6zdF>S$Wf+9N ze#d728|*SJf~Y*oay{wGWYeB_`mN!CYrD65`ttmc=h<&5bTF&-1k!54`e4 z8$K1c45$hDCT1$e*TR)R?RC2oolp<+9x&g{MQf~1-!WFL{3N~~;dY0)?I3EnGX;a8 zT2BgCx?J0vDOCy?dg|p3cx}a}&75Bi@OpyHOc9t6ndFf&1W#$(^8!v9C8ka78v>Rc zef*GSC6URq7zHh7htns$DBxd0Ot%$6;f4sdr7q)2=A=Y)%Y=x^g3QJf&B4lgtg_H` zQHH(x8B4y{1uF3Ai^GkzL`&f3M~FVSP&BmVG{O5aVcrAHQ5O6%%B68fo8*hDuD}1) zlY*`B8ij7aU?H8c_8c;uiEh%dfI&5m)Ag7#)DmPyYs+^Ku+EUVv~O)unwnQy;tYIA zOZR*cE)i%v13V*a!Pm`pbz-xgCj^o%Ko(SEai~@U(@&xwGBG~XlL@*r^w(x!OURoJUM@ zd&n`Xki&(_NlAqs&Q(( zgLlcQ@u&nPgx1%M*QGRR1znbku2kbypLoK>%+g7Ark9;_6J^NFjk+l^e!M(C+}5}c z?&_^<_uuy^nmPK?y&-sBI|RR*&bUq5o76pyPMG^a*uhtGE@b(J!VLwETS9B+7=9l` zAn|@hsBA!1bHfM4_RG0J=>Tmf+{OFcMfJ0mE|wavkl^YvtCz+&(j`?UJ~5Bp`t~wS zjjL+(LI?o`I@MVT^ZpB_oi#OO5~P=?8^WI*9t;P$L;}GF%E0%B4;i8fmE4d@N-BOt zh}u_doMn3Y=4DdJVdLLunSsD(`K(3E3A=(RZ%=6-{%aD|Z zCKu}Hjr!z{DW!Ja;!7^kxx*cG{EfEmPckGnGxgS;0V~(C`)XJIF_d-hkaEOa8YlE# zr-N3B4IXr#&qWYD6?c{K6@bo@Yh}xZ>=p2dymZ*rw z^u6Q&FEmPt!p#=y)4EYKFjz)C=Xk}FxK2^@qKX6Vc;`yQfwS|&$SL2wir9ty41B{s zqrUFKsDm&*qLS7cUOoLWG)AzDgAzQ)N zrINlTesCwkAzd}XO2<&hqq%ooI7InCvo?O@C}A}LAlN`rVN&Oq^N98IiS2^UP(LZY znog42Dn-%&n4=f+7_!B~EjEih90VLe;uUE>qoYJ-GWACt(ld&;VCylzP?%smWz(B> z=>)6tms+jwJf%pzTm7zBNSjaSZXTBGag<>vUC64u`}$0IQchrJaq29o*Avg%vvc>< zvTI#vpGK&g7n=)j+j~b7W)3T(yzrr{36ZP5i{NV9lA#Pmc~ELw6zK0zIFEO7I*1q= z9|WOzeEl^>_Etjj@XrrL)o!|6PchWBXcG0LX}P%9Q@^L{E!3q?QSF(dLm?M}h0u(n zyIv~9KnM@1V__Px4nmmI#VO=j1@#`|>TwOYeP+n)#wEQjQC_~sSw;I!J`8i;m=gi* z?h~$RkP2D}2ouzHMr)VGidZBpt0SQ{Ivpk$$Jd+~GT0~Cu4_O0Qdnj&&q>^wK@6)t z%oPdiT%cI+V$pA>^iIVCcJ2v79_Hk3h7CFZw6+61+ccSdJ$j2QC)+rNII{;p&>q2u z+!fTX3`1}7$pdpL_dX5PjzO^%Uk_Buu~-OykY($AeVr7hO) zD=%1Y-hL6f`eJ$$=(QQR@3WtAvwv`By~`zKpxQ(&Sg37kKYckH)l#jFv?X%Q8M7D3 zr~3k`$XFv_p>cQ?72&a}D16KX?0IVUN%g|2o7d$nUi02w-g`qzYro`|MnPAP2!)eJj1DBY_bl6I8w<@)aSj(ii z^?|AV9IC8O^ulJ1tc|$o`O?U(2-|sh#94Rz#Zr+%A*7@7gjBjOW{o={q!q#t;HS%# zt&a3n2OvjVIzgF7?sqJ6EDL|5GF$?jUBTa>p;9Wa18oaz&sTZQ1~j^#F+Q2*E;HH7 zC0ao@aRxok5a11hHS&JYVJ-by;%07LP-p38ZGPFZ*kU)g$0xNm^1^TQ8QN$1{pR~S z{R=z2c)R<-6RokM3C9hG-N#Jle2)+3&PcqENHP+DI@P;fAxe7<+qvw#OMK6KYDSwM zedJ>w^2BIZAwT$rKs{Yh++?3w|LNC zI*MVbQ_&82);^_cSMHCqd50mZAGhP2-qO26;P@&7DvSzy_m#}j^tq2>nK|Q%02$_d z6-LO?iNTDWwbxU#{SAuzY=vDWY^>WM%2tM!gqpn$O!MVZ-CBPX5;KP}xV3troa*#t zJ`Ax=nv&B9?u$n+p?IElGojadJT@AQOaC~%VsJjp8als6f%4!sE9E*aPXszX>$f-E z4fy_2s*vaS%>J2QYWJx$efI~UNVa19GHP6RnY)<>qC6KEf=6E&)-+(~LGv+US1)=#6_?Tsi4SLL_3w;|MQcar;YiVuKZ>MnYI_9m-0^34Wur3_)ZIEG zx~dEq5$C?*;O8{MS#(|`JP%sCe7s6KFaAt?)9&*9`1@K#KF8DH;6REw-Vxq5OuT~g5VwUu_(eBdgI`dvH9zL0QTi46@lvQRP z%a1a?-VDHQWGe1sgf3$!yHbt9L9*B+DtIFoRrVIh5}>_ydks`*oxN*1}nMgvij_MrC@N zW2n{nWYbyY!@0N+*9-{gG(FQxhCc2}AMEhKwTeFIV$_X@kmsWTXV&tz`}-H#6CQP@3c7}r0)$|u5m)ekvSIoGN?6LIU%-qQXoTNX;ry;*Jr{LcPL z6TPKQ{Q;NTxU%Y=VT=76t_rGWjGHf8wsW;+KGGOT!V;7Q56UR}uG0Vm=6NWy0Xk!R zG+*{Qs8e6lUfQ$ho_13AytrB1WAEo0V*f(MV3HP@56QkxZ=T&NT68;Dnq$;QwS?fv z`4$H(dFc!-ev3fW=Zj3DAJeqYDqxQ*H9HdJJ>J-?pOj61)YBVSpuyz3p|Y_7U`Eq7 zQqy@sy!o_(FW53+Mbvf9EVY5L%)m}xOQ}!2cv@>tNvF>=f*qZ#?zHj#igM;^7}eeR zV5@ognBLi%Y}z%_y;9L;tgm2EBBRbpymiej)hJ%n&7Cxe0!rBoTZmv#0qnNVUDKdh zJU-VA>x@Q4YwN`GzG(MacS%=1@^yk`R8Cv2IRaO zMJV#tsIei!3yK9Ea#zZ9efOA$;fE&z3jzR*8l#_PuXp9gPG=^Y=ggJP>vY>@hO{oc z2)`F6f4g5V)gV54^;2e*h^hJJIE`+EMYsi&eaUFgsIGm6>f>`whL9d9{)pTf?cvHq^=r7num}&M&36)yoPN2CarrKwS8kGsHxgMK z>J2L8%cKk>$F)LP?_dC=#>Oh-c)|)#MNx%aQ`!@g*>OLuYHbJ=J<7y=V0~6Hl_EiI zM}6YXH8f^4r0Sw7wDo(}miKUp%!Sf^)WU)sICjzjvr}X|=FMUUKR|O5cu$Tjl8fGcZ zN!iIt;u4uOL}x8(hhEkWxwNmmfOxq#PU2YI7%_qC#Kgs)O6Rky1x;S;G~exvBsAZw zg?eI!mnR;|)GWbXgL;GT{fNT1_zC#D5#vS`nqjw~rt#pk-s%T7ZcbD*h=Xw9S`Hu>)v99 zlIVobfXX{;pzmvmzMloX3=48x*6O1?-}?nzSki-e_tlAbj$T_4nOa~3Pu{kiD~d4> zvtqZDhuZbMr6r`TsOY~bs>Ot{&zh5mHV6N$YM_uTh0!$qX##pnK`9c!uJ?2t=T#A@iM7H z1o&E#kB`WXqn%v;VaP!Vo3MO35yJ`1n4Pd)P?a1rcjAWH286EG71w5rnSo@A@Rbo# z<|N|bm+B9$;jHT;2PU_zHcgiUHh1Ee)Pz-*)5}jE*)?;<@OtwRTui*c$2+K2$x*uU zhynEJK6n;$?vskKy+QH&oTKJGzSe+$y<=sfz3$@@rxSN!do z4`u<>*XHEcuPK>4c7Ht#Qgn=ix;}Ew>Kao0C|e|nF!lH_%xCjmI*FA+i{R8GsnIG? ztmtW&1NyULeo@bzRZ;2zh*O@>Rg(GRHHuWRrrE_Gi^4r_XEI4uuc_VhM6^UR&>kp+ zyH8gz9Vii_;+~*&85F=VytOv0z4XhJU}j|KC{3;U8WHEbW;%}wFL{hqOd@Bysbu@K zNg9xAu_1M!JAPuf!}ArPyA?{Km~_}pA?&J9{5V|MwsVrN=wbrA|E>uYqr&>w=Cf?x zCWH#O{-b`1w2Qp(&5vb*8;*jodo+9t$%rM{)Wsm{e0GV9b?%{J=!m22oT$xy)3{u1 zW6d&N7Q1q^#z46*1y%xaDdvU2I_^`3)ETil_qeyLDq0rb6lfNB&L}=W(3cZs=O{aO zkfap5fUdcpJ5V)*y6j5XA?P0TYjeS4L@P%AsNbTiL?k#irg_Bp)<>QDsE0;l{4G#V z$c0HGcnMWaxt1TDbj*wD@MOc9-xX@PcrW z!J-ib#SK|HMEHhqC*>WRW|>+171zC(E?pej`)_Y5lKNUI#!40`{IF+K2b;Qu`fX@f zoq@^ra>$<-1KqRMk;I*`w1VUIk?Lvyu`)M`G-whpI7nz-zT}RmA{ptw{B&uJB`@2A za#Lfxt{LcnPU+@qfLN_RW`&@QQRakVt)@oX;R+Vv*%jM8k&th!Rf~Gw*^X-CrGOIL@aw%iX1)H*9DCuJ7OKHv_=2M|{tyz6@8ezElwQ_0i*{iQHZg zgA_iu3Wto&*F2qfDlG7S)3g>`a6^uEF@bn;pRC*7J=McelaWxr2=EB{6<;}YOYp-{ zKvu;7|H5mFWXz|i)9uhD#lgHp0$1ryj5ON}d+d;fvfOW#Cx$hX$_uHqIo9q~R_ddc zvuADOtt`Hfcc)Zi>Ww#!Izsj~hqu_KZH#g{d=VlbxsY`*(6%NP*s73=diIPST?Q#o zB^e9JN_UN%SU~*kGCi;!N(_CM-txNVl8xI{;xsFLBliSrfzikb4~g8)M>Sa%{H_j+ z9sis=@w-A*XaQ)6_nL+sa_~~1z_phf>cIHcAFo;~So(}Qr4jo~i;9$LCVQ$b{&*st zVqn^cU7{V*#D85bmn~K`*=?|uoay$& z-E*mP7Ku1nY%Sv_aR40H>-?PUC}*}qJcdz&a}>(tU>dk)<2i!^B06seC=ov8DQ51O zM=z&zH!?_0QTXWvmkb>p6ui<|7G z@uIes?&OH{{>`4mVn4y*`rgO9AQamZc;*L#j4hYu>v@eyn>K21Mm?Qncy{rYV8;{9 z0D^7QkMyq{PLugEYQw$(hTql&k1N-&(4Co$jFo{4U3+CV4JN-E9!2O~b0Y(yI|bk- z1-x~aSbH0o#_p3+9!?zT+?+Uy{NDk@2Ok) z*YM#CZ!ce*uungZM1EL+%r7RmcE!Gj`=C?QJYXhAiEYA_X$DiK$2Jsn z>M`<@?8R4E1(F>bLP2)3a+9wCY_xhADo1l#9RdwOX1?OJauu$x zo)rI7U&!!8uo`uK+jkZbIu0AfBN^st76Kevw;>gmWjX|60UlR87#S(G(ygs{h)&hG z%BWIwxcuaknqxQQ2N0>k*sgu@_!54+x%t&XX`PgA0(Lp*a@JyV_FU-rx%c4v3$EL_ zq1!o%%Z9Do6t@fGHTcxS^GA zYsPBPYMVQ;ZZXfJl2xgx85#E$S>@kBN24 zOc^@;7A7NvYRf}{k3w@zx|f-`0Zhb-v_Y+{QT{$V7~mwG1P~qkMl8(GLq}FITCRn%%!FHUVD_C_IPQc!GcvuR zoi$H!+r=^7L1dzun4ox2_u3-dAf2q=k>^1vnZsoLB3BWXV{M_~-7IHMF2L!tg(rGR z>DLH{gNzy>Ivb%IGA$e`CN}0BXTem}(XLu_t+(=T#9EQHQvzf~Aov-gFX`#ZJ_1`r z(o-7$9{|BXKEKd%)xKUZcQG8`HMdnvdo6Xn3eRDk9S3Ls;1B+wmj!iN>xa0{e(UXT zfBWt5V{p-+^q&-HGrjY-BY~C#;;C$%bt31T1e`0!WfvAO@l_~<|Bhw*YLxRNO5}dd zUD(6!Sg{C6MW&(;%M2w}1jyH;oRrUp!A~4PcR~4*^)dgdoQ#?G)&V%+aKv<&EL}3aDq4>!s z8vF=^DrV;_1u+$0SZy4`nx-7l=Aeag(hmSJF%Om(`~uJ{FTV^}bmf-uZVa(H`J^C6 zo_&fzK&s49xj>?*3p`xe#A{e~E(~ZEw9a%vZFTILjtKk5pQ$~hKxL9zzu74TjR zv2biw8FBrSt6Ley1-I?IEw596urv}cdA{kfK@908ML-zodUH zX#nJF_UzfS7R&4qR?BW^>gq+m1x6@CK|(SdBH}^dF(H&IWm*7|3*GzDN&!+s; zdD=`yKD^e}2|g)kKa_)OHU!0(T9827J?E*L8O>t}uV&h36@yqm;p6jc>LBOnio1>1V^ijoTJecapEFJxse^XX#p2-eSsvbNQ}$zW~^ywB5`7yPaq0 zF!EG3@ijQ|yVxIoH6J}%$)F({9UZN6zt8{v@Be-`i}ErC4#%0l|1a-)*Sl_)C%2Hr zicg*ylRBXzfsjDDkvrlzk0hWHdgB}4n7M+TSJ5`1JpKkCe+Cx$VHWFbr>njTuJR9{ z;5;35Evm3KV41JN`abBp-RK=H+_1J)ew2v;0PkX7%$6dG=FAAQD(pkdE}CKen$YfdyqF zfOs#w`#Dk6VN37tYf;ePcG@;l{Bh_Y?XC; zXz@d0lCAkc%R18HT!FVwA=qYsl4X#+fZoH@!6g8a-zPs#pY)JeMoZmS)%*}o?cRIu zy@L3xKu4YADM^C{iboKny>{`LT2d4WNv$;u0rIxZFSVmQQhy~9JV)fodw?RXRrqlY z;b|5yT?eRx>8l^2P1k)SIi+?=!W<(VboSzEcIx5gmobaPkFS(kX z<1~QyIDD%uEuYG98oa51Q+gF_fibvSCJOWX6X@HuK-dLDAf)6KIiEEGfGy2Bmw zoRcFXBL{Mj638ePZ6=zr<{+mbFScL6LfnV~KP<4cm5(+oYnd|~!xN%R$fHPeod9u? zqFbp>s~?ncK3&T;%D2_gTVXq9q;^~NNwXsowatig44IG?<&?XF6W?$kUUBMxJY^(p zgRe1EC=-@7YbjPUc${!LhWkQ5)_c-^9U@M>xNfv3U#5ACHx}~pdMDDrB4k3H#8b$Q zbBZ(pnxkn3%XptTwNPS({&5DIWdQX;?+ZblUxEBNtnZ^dcYeih zi080`bzbm!X6`=26@M|H{|f;7qX7SdKI3j5%RIcic0xx29Y8-{?g8e<-51)gJ=NLh zV-@eQz7OT_fAiaq`}09H7fM5mNdRw+>Qy>e74rbqGF%4_cw%;6>Ug9+$#)P^NB#(!e6T z44(ax)x)HR($D#^odEp2tx&!a$n!Y_-z|Ppxy~ML*zEK+;n4^`=3T@-k%ggbYzueuDS>nCf!cqN99bkVRVRm*vh> z)_jAqanKdkHpf=^M2qI_W1^9cB(*|&TA~|i(x5-#W*5{Mz@6|Kk?z!kU5mMAWd>l* zC@#Lep2;CRmGd0`Tqu*n7DDi`QR&eS>3_ zsk2@N5I16}uOshc`73Qj2J!^~UOJud)Rllrs1wd%37`N9YjA(Y z!limS*8ViRTRj9_=Pxa%1pOnuP_!mMN5ve<%{+cd!6g9o{?nvM=R^y!Pd9CC!us(G zR$D0(mX^E{wN5%l7JrgO)~?WO*I!b=(Ke?lZObLT(z*Gjhb1V0$qaMCBP<4-N1pqf zQXq*Urv+)rleD}Ju4bM`A+Lc>jrxa?lYCn_wUdq{of1q>fM$m0DYW9W6TFg#2Z&??cMeyDrk~~GJ9ove5n)fx=TZ`Xv?bir0UheQJM90kM7wK(BqH(X- zC(9Rgbu-B7V^F%r1)fxh`$&4$vjQQ}iFl+m|Ab8P^H$tv18>9;o}Cgd_zhfd0ol*u z%6AZxe*W`5jsXt59HM`-+#?&IF~s1}L6UAiyamMvS#>;Yk)I^iiQfw<|OqJ2N-yNxAYW}!@x z&oWk7DLeF{7rp2m0N`!Rza8ZjsjsLQP!L)tH~}7K5PGt_LzxSJ3@$cd z!3@xs2jv}w7mKT?o0P6(q?arx6{l&opF;4TpR^P1?ngWP@W^5oAFblu zW4~QK!!Mzs4+| z*X0le!)o<@!R@{haIZ2~d{WR0B2lVYG?$~-FWndN(7KLoH1k-T0w`r);&(!>3YTV0O!F!&rF%;$Mq=< ztmgGRcMh`MS6+EY&k+5Ph9~58d2ayRM;Kr%N3QFz)TbCI#h2~KcTr}B2VjiBbxD`8T% zLV-9BtA#{zQxTy!s=SuAnoU(MVDIt+qobocX-fr2u~1G?FpsN{t*b(`&7{pd*D?v( z96dKgIqJktS}3zAl-qiKD|Gui=l~4d&NaEA6Fu8$SHSIUSti}r#+|24mSD7*c+J~4 ztv!$(UV;V+bR8Kb0DU*|vP|N;y}WI=c(L#BU8Q`VuloUL`@IHvn*wr_&CeIoB)O^Z z^KyC%eu1tpl<|l-*4dA^m_ry*0$V*&kbp2c_;k{ z;9tU8AD~Qu>8>)*<1BkhlmYXXzv@-5y5VoqH=ziDorJvE4QTZOgE?yO-ssG zotG3~DBe7uLnwQos;-2M-0t-zCDp5|M_I?5HV^-{1Mm1R=qo(IS#-Z+|_ z%7l{3(@Z}tz)PKec57|n?Kp&z_Iu}gI)cW63aLNQKKvDtaqNN4wJ39K4v=QOmQ|PY zwSdeir>RfUR@hW&f=JG{`Tox6W+%Npq_(9aJ!vU}kV9L+a2-gWpV!L#)Hmx$$BkxY z9dPB=WcmV}WJ1VXGgoc9AyCFZ(1F=;?jv2viI!#CgY{a2g|>{;rtOATiG+nbr{d;2 zSdy0IEf@7Tn(TSpw5D@D=R!^wr}3-|aE*=#ycW#sS=Wjl{mHw()V}5Xr4VaA^oRk@ z<2+ODDma3NrXNq)Q41j#2YQJoY5Swu_(+VNgG0ot&Z~1oWW8y?!_X%<;CG%+~lv;|XW1emq zt zx=<}ck*3SGtskefZ$9M`@XNDu^J{DIzO{M$+Cw`-r_gFEWErhbcQ5lbI|l*Eu*p#K z9(ix`PFku%(Pk&Pr~Fp@G&`U9$-V;j&I!|^z^Q){ z&+bwf{k42s5#!cN*F5oUkyg1}ZXr9%nn`Hox5Z71MRML-@PCYJyn#O0mm@w4(2@_5 zT5onl9n*3;(T}{%$fK-_{bEBJEp2F>Xft-8z-o#2mp-s7%W z33=iv1DD6wKxZi~c~|6n&Ak8JBDR2Af06}reg(0@TzW5?)s$ZN!WU+Ef@T@q`+=C7 zf9%J8Y@AQEeoipw^}$}I%e>~D@Dz~1LIv>@=<>PQ#eBZJz@E-?fAv>?^?U&E6Fk_@ z9T^$<8lZ8MIp@IzU@HI#>{{De5Jg7vmr|}51-li{JOPb(7oBpUTu?0D5Ajh7z}3_royv&@rl? z(jM|_09>(eIRMlJm@H$%p`*$b9ups_PJ7$!*V6Xe%cOE1)33!_o)+cLB%`*1mI)cs z7Y8Tvcp4^Hv$4)W90Ra%(&OH1iY2Z|;v?!>zm1+z`H6l}Cq7fFr4ATR;c}m1P_qsh z^pA{;9JVn0QOqh)FWsv#P(iM~`ZvRX;4p*dCEP>niH~znxjUcFir%;2dvtX4gbU^X z^&y@Y-#7^uJgeX8G!u&VBUk0_#z6z`PzXTaN0qKtfuwLu^Vu{9EIU)HV>h^W>LEF3Q?P6La8t~ zm=nxVa?1hpN3pa7b2koAp(Vv7ZM9O=NeasLh+EEJS>ygf3Fmpn!zC{b`Sx9NUGA(F z-VR>^lXR_@lxJu_&JCuSm*}_WnQsWbpl>^|zzbyMBf*~R=z~BSJaX=P_61&- zTY`l?%oe7*kd>>n!$Uy5Gqt6X*245n0tY?rVLu3%^&`83q_z4_JOz1>fBVvY&7|+I zJ&n_55G+%C!O=QemtlPqZ}CZ*MWbHorwN2q#$(7UQk!MvOaA1;psf5toWRg6__01< znE*&U1}ssEKeoY7UvdWE&jK#10iG!aYwpq}T>&-dLQ~IyX|eb&r(s)ys@E=okYz}U zdh(UxsSj37{jjgC!4I@rgCHukt_6K@;8p?9PZD>(0Kca`;gkY(q!rh|h9pk#n9`dG zIX#NRn;O(}+A4v%w5I{}akdOz&#Qa`qobpT<;S1xx6ur`HieA1g-SJK=O<|&@QPpgm0$Vfop;{p zmd)Ou>3RnLoj>QF1bjF;;VhPbUr2lPt6v@4JhD;D?ab-^7GS=Ihj}Zbb@##c(~+V0 zPzXu+ge9P|1t13nbK)nc^Dtdi*{b}*EuUAhY6GP)kDG22uO=;j#xtJrI7;OR)@iue zsTYcpa$zl7p0rS|NqnTW1A+O57EjI700%b=@xAtwcnvP1A6?9~K0;dDkJ47@rSc1C zq;}=Mop$iIpic0R^V(9Hc|Ffl9oq^}QVC`X39I@;V$&3sIL;X}LyW z7A3p_I(4io7lfJL&L^j>L5X#~QJ&=%hJ|HY_32{*zlCKy_tz@BfGAa;9Ne_!ol-s( z;=1^CwP^r-(CftjP@suTTJmuR z`EoE~TZR^0(jvj@uQkm8VcNc9sjp@FYSCy8>c}iDluPxaqV>u1IVi%{QQDm6e!2j9 z1@1|A=yPxxeU?66pjmXnF$R!548(hRj!Jx~O^;FS@BjYq*O2~mFMa7tzlaO|QD~N# zw#%4bPkh^UC!9wT=m7dzd@(=vv5$4*I-BKv)Ad;B_W&?2XA9SdaOWLDVQLjR(&yQY z=d-0$I4=k+fYC}8zg>*d-G}wNQ$<0ZimK&q&d&w&DkJ*f(&XD{yd4Olz-P?nPdlgc?S%b^ug-!!)bQ>}iF4f?bS z`ME1te8?o#$azhCo{6SK7XnnO-a6)VyzqK6Y?DJv4y|%|B=KpPQ`&5+qa4Dz<{*C| z50je7LEHYt0!5CoDGQz(KiU&kXI?gFcpW*{HLT@Y^wmE>4RCV{VXv{lHlkgQ26+pM zojm7_Q@&+VoaiYb)t6@UjiUt|p``wtQenXf#S4PE8{+7R@_lbtzT2mT*U7T&gC==8 zC2$|4L1r+)d4RL`2mL>S6}=Hq9~>PWbpf0*YQM)@v?x#W&7JeSkC5Xei$yP>PA?#T zggooTz=?r~1I{WmkKqx@0PZ2qi)>R|U=eHejyvw?VL(z+K<`suEi~&VT4bA9^t$a}T5N^&=xAU*ch(<{{Q4nG~Ih#RuGAnqaO= zbUoJZ2Hc%{e02(?6-vN*D1?}ArCd zq)?Nh^O){0<1sLBPyv6873LPf-zFCI_^}G-E_Jb{^6h;Sgrh#kP?Q`EDIWdeJe7&e zwm%`0w(}OB%7S$3(~XAKR4j&LpfP~EeLG;Td{R4YBqFLDLoRs{#8r&f)wo{EwDbft z%A{*!r4}vf$ZzXBC^r8n19>#x_B|N94l&@#)65V61JH@L3R<{5g9BUU*eJ3mT$RK)_bgqC&!P8xFJg7p+(R70wv%$!)o_cl$+;T`?Wb`X1VrYLb{Ho zCqCQDB!1e{5@-i+(#`v7{d6x`@3aQ_(=$VnxOIYO=)^)*-S4=^*8%Ff-=(j&EW8_Sbgk2}{-No%yVE=)WAesx<12&l zDq!A*ebxo<&V1tx942|)axu?V>Dp_rEwZSy_MZ2=rwEw8?B<(qUWpa|QMZa^acyT4 z8n4oM7Sc_Bo^|Wo?GBr_RG0^=@@{#9UEglyLB50c%O|nSzskexhcMdRes)x)lHA}f z%9;a^HuCVVMu9$rmFZX2tYg_wM#Mv5szk6N=fC*HFK(jFa={$s5n!Gx80!ckY9}o; z&yx~skGJQUZ#zjrN1G`P1*sL|9_^b|nphPMHUhL!Oe!*YOA1|D#tqSKGurw~l}7A> z2i^90*j9lBkwn+zL{Hw0yNzkazU>=%HRuG^%^}>CXM9zS;;DbiCaf~}h}YEs^Q8;~ zdgxayg38+okR)!s6jJ-?yai6sa<1An4sPz^Prj2^g=p&O$I-HCw-ay=N_66nDTZ~KVmCWyh-jZH-PJXaD;_nluNR(t+=l^ z#5xD+J1{r}KrLe+FY)Lxrff)Szn-SsFX^WN#y6BPWeh$yE%3Ar_&tF&Jj#H@ez`h7 z%{@y?eQ7(17t>m8P@mHX<{P5Cg97N3k(pnJnP4rA;Yxt^P?Q)ej=b zEI^&-)#DKZYG}lQIR@`ju7cmcfBzt_&Q_|2uQuZ{*?J#e2|? zxyVX|vEac^=RDg*UrTd$vI}|WS;)RZ*ZjDaw)OHrRQ(b9LNKqgDTS}GE$7v=g_gOM z{Q1Bqi!P-}PQ|I)Pvsf$#G8$n#vznNN+&HtQTpEOCKOSDe);t@??J0rN6-po=_!0_ z&7D!fON&5uYfiJ7a^}C%)&tNE0G2d80(?!u*AR>0R`AaK4*Ny>F_=kZ@}u$#5TNZ- z=pp}_Rx9aMti5CO%{C1Q2#hPMQxvv|d5|Cbo3=^yUT`P4nA0V`ux^Y0y#AREsZ63R zO|O}B<6a{!U4v!P&%VWVHG`0@i~aYy*SIHp8DysSxZCH^EwAkCzk8L}0g=@Vl1>nx z^O}>_&X?C+UIN)TraYppkkUM+d!m&|#B_O1vI>6l0;#U2sjtRmBj^#gUwV&b0bV!8 zxex$7!8P?=`&jH|8Gfz$RBb;u-L?(w?L{1U>Dn(l)r1`4l{W6T0pFq^-G}l__nNdq zCdkaSEb~qWaE~ovYG57D_ZVr@*0rf%Mq<4B52mq&$w&49`T~r^K6djfY}3jzaaj)O8laZ9w5>E`~$qv8fH^ zf|oYBRB3@xB+DNmUdy6?E0C@8=WcoG9_FU2tXpkTsokRyH1hoPJVqb$H2F=jcfb9H%4(smOCMmMr)vM_Z$+>Jg-GOLKC#7?9;ap()|+spBewvM9u4h#JdE$6)=leK@vQfzqPk^4> zj$xVO!n+JbSwUewsFlG(twN+q^BdB{Ltu>N3p~^_%%i#L)=gs`j& zy=MioQ1p47RL(LfkX4Am4*jrB@RVn^^BFsMA-gW-7e_a5-h2Rec_?)1x7UfPqRiVL2_qiaO$8g>v#}u!taHkf!IS@a!oxRm5gS8OvFLkoZmK&BSK8R8}{A zx>oJwA`Z>d(xjWW74qTUYL~yXLdG_hmpg?9*R%?#3^N#V4{|L<yPm*oA$6EP$BpS(iN<5m@o^IS{r9GG?%|t)(Xqyp8@Hz;5 z6ZCBv_r)M!crd?LEn`{l)%JFS=REI>vXU-8%XLGm%riHE7j25&2uHYY3V^zwAaCzwF~D9K%O5LoqM_Ow*%^~+bMKD#fk*a;m`r}@8ZSdp)1^e`|ahQ|M{PvWAWRw z7)^f?g?BN(dmUx-fcoBP0)lwBVK=N%@^o>!i&!HE^R67s-Tz$R4`r$%piU?|A84$l zSr*N#VWHA`Hlx_aoZDfPR=oS2m(x;E=^0eex__HzIUP>vQ1uxI48-rlY%xaNbrYfGmoR`tvuo( zk7iR1t@C*XH_MUZVipnYri~y%Is21%BpN|FwkM5{gV&LMRRQzG$g)?rXtQXu9phf7 zJk5i2m0gmfX_8Fx3|>tn7?0=FcJk0(&oatPtFbj@5s6Iz3E(8(YiT&8F6RMY@|V;1 zXxV6&W4agGuWOL^-UL+qSW5{2JmLMC*E2r?=hpKriaHi4x9F-9fEk!p^%|$PAwT(X`a6tpuUba^ z6##X&adxV}Ye12LTkl%dz2FOY15U75Zk~1q@#48y&hHbW;gTe zUjfX^x7>0|3GiQdJ%W+WpR->Ap(xINHqSo}-Nuz&oXPicfp|7;u%c2*p zEkW6lc0A0SdyI$N2bwU4LKVy}RXL&z9wNE2?bk@?=5PWV$=?Ef_ zOe7M1M%_?&Xa4Jljek@n(MTri}8q_juyb@~uXVs{m1ib**zY?3rPj z;{bz=*jJ=bkw5E z0K~Zi2M#O~$e2U+l}JR@yo4N6JJyN*Qpfus-Is}%Lk^H`fk60m(rGAX^4c5W9F^-@f8_-b4pjDr7 zeY&`}$1xO6@;>}xUY{#5a1Bs@=R4n7#(n?8{O0j^C~U3Jxd+-^IuDD?oS1TCNL1>-6uf2OHa zlA`#qx5sT^M~-+vUDhDJ=?O~6c50Lcaow*bo-QnjRS(@ znoRsg+5C_Er9OmJlbjr@LBp^M-z{hqR&}(g5pVOGtOHKg1sJv+Tj}8Npl~<(oFP(Fx~{ z1d?JtcQ`)BId$~Q;e9`Y6pJ06vd$TgyPImv6oAMyBoM+UuqCcDmtd;CdkbS~p5@sg|7b77X$V zt@1g~CZCD!8R_SVmY0sd_PQ}J$-~HR&78NCmUvF*dG;v>%fwCGmby?*t@`q0 zx%}8l&+AIZUzFh*Mn3oM1i-gakOUNua!iBCsMbbnA-$Yzvsj|bkt)qWiq9X8N-|6_3!t;XWuyA_g)0alw_puto40o z+IydU_Bnf>@!sohTOMm8ZyEi6fHu2;7yc|_54?H5!a(kO7+(5K-}FtFy!+kn{v!wT z?HAAt!aJY-%jld>JfF9`{=zT(!cMl?-S*u0job`&4naX^=s=EguJ%=q%9E1ri4blI|8^>v!=IymvbfS>ib?ykJxKaxM|+W3DY z;IlBG4`=)Dd*Az>%r@{bM?DXESqV68E8@*L<_ItT46b=` z=gKRXS>JL#f%^A6&yw0I4*4m5x5CfkYxJ-E)VEfOHHb(vIMR_%2F6t;qFywcN8U$} zSKdud{s_ATBU_c*gPkp3S)XmfCw{M6#*2=4aqNZv8%YucCY;hXF2MnZSAg4_%@CBNDqGeAWQ~z z_{{s?U8xtJ^2TpMIr+Tp($bQv_72}*$Z+W4YFb% zWg_F-?y)O@vl_3*F3aa9XAb7y{_WrHg*Klt|0TBAzlZbM52J*4W8m_PIa#&hih&@m zA{q9VFL^PTe=bTn&n(`v=v?GMQB`cW*Q5A^qv)Oi0yFQ28rarb<=pIp4(@_u7nbqE zkAB0&i&08>EnG&Uc#)OfnO`tT*U&(p@q29_7vY}F?t_o0Eo*d0m(CP?i>J&GXn!;1 z*JQ`s!Y_YB1IMss*thjJIq5oZJK14Hv!4rsmvKqx76zQiYZgIxevZ=8l+Tea$;#62 zr(Xn3zkgn@LY0iLJ&%3Z{N9;2MZ3==e6GQ126W5lxoB^RK;p=+_1wx?cj~>13C#gk ziMcz_!xC0jkpnA0FAnbJTi)4rZ}h9)Tah=dWSCX|*?>r=s7(WEO;qKfDlqF$k!&=^ zzC+vp% zCD?|ej=Lb(QWo~l8q{m0j?5o&BEV1El9hVf899CU@L^vgyOR&c_%%3pt4=ehZ&1hU zc>3j1CKhjYFy9{3w`#@5X4>|E{wTCdKbZgWFaPo{vCZ|*QK0vsY$q6;ea2iR)gp~6 zuBN~)Z9EI}h2raNFyFyS(vPg@dSho>YE;JUPH-ly%%8zvx(fyUI}DPB%|TU|vzqYi_v-_;hpSU+=fA{a%bsE12nArO!?9hm;wEe?Z}qw z5$P!pl8c^U`PLb(Iwhge2+u7)>Gjw0(=IJMg)iLM(i;uBQTmb5l5xu#Jmu$k@Oc}ili>Hxk z0+psOtb?O2E83Rd(-p?Pk&9{gRX>s=$9VkNS8^E>-laX~-3V5{mxJRC_@mU@?QmVm zE#(t0p3DnwUk+i@b(SG+cu;Qq*4e#ykhjS_k;!mAyXvaiyhbDZHypev=h;u5H~`0Q z3M|3raqP^)4)#?p^3Ki!G$-7C_wIvljN8Wo!|&Kn-v0KtZ=e^S&$}=#g@+94+uQF` za(>K4N|7G344&_d^@BOzGXJILJm)$8d}(RveGIlIQ993)`N#_7v-?686}z0U8ig1xaoyhJEm2Ql3+>Fc8(dZG@P`IVH%$ehr8hI}4eb|B0ycs7AUDdO;`)guQc>!vFPH<`q zvQMvY6{27C$Gldz)E7B85G}CXepsXCqdiPIA|DWnPT`hso#k(o8DYq7EN~(25)D3b z&pEPi{0hGC^*7OOvN646KLykB(;k+$6%BFuZRr|*$zv1#S!jmd7I{;=S)j6{t)D=< zpJdm==h16|X14HSnTQD*8D`Cn!1B`uBcwG>iE*Qpb;(JKWf65@#^ClVl z=Gay(UpiH{Oh$p}X%{UCkL_n0<9tli`zTk_)(^K`r~U;*BW;nJt9Fr}DyPaQczr9b zM-lTYY`;I`WRnSx#}oG>r9scs*(Q06w&tddY8c z`0(K)wB0Ulx$k3#z^@=~@Q9&ro&5Z-`l_$WO1*8rZ{L0|0X|0kv4J0>{GHcq^@I7Z z{o1d+p27STOAO{z%I}fy!9etbxplQYqSYv03;>GgV>3_j5(`TH5e18zJ&tFzB zEo@#H<#qU5^dcPF{5Mnf!{P(Cl?(qf8MSJuEMvfd#cD)@fUjduKkbV2l4L5F+EmX)0r=yR!FQ1f(LLt;*@!bjy5jtBox}c;UiN z%QJlwt}@^}`~dQ+)nU%YXJO%Sj{e|N1sAY;bKo!o2{7qL(3f`F5;)&CZ#c3fP7#r( z?I*myaRNxVT=87}1Jv|gNDX}k-}?9~S8}Pie$~6^rGKk;4vy4y4@XyiB;`I}XWL8M zl2MgYarr3tD#N&aJ9U#^%5g%z%#C+%ojV|}aBTIUcMgyPpi@pdCc0bTjd(M2Jj9@W zj77s9R_fP4<3aNL470KufZzq^*_dyu^D^g7Y{ovq8PvHfdYWzc>$oU)sb}ime&2qi zP4PZ<-PsK7W0&Legfkxd*!3;n@-42U_i%RoPPVVUoR#2TGnlM805F(alTvCUD!YS- z=UrKaGMKM1!+tWW?2A~ra%8v6xA{v0Kq={?LcR_bIM&`I@lo*01^WvCWc`KWr zTFqCW8eA!}TcbYjDh-W_gIF1xGB6r4(=AI^hRLw7I`jOvhO_;AQ=OxMr^5RRx7u&j z2nOoRpEQb&F&Z}F2~ z>#ZX=;1jk8(^7xZO_<6Tw!uVhgspGtDqjCUkcN2@$?DHAkF;9xWN^E z?nO}l-SjiM-#(8VZ1c)5KQf?S*zXpYNFCy4_fg>8smd{s<+QTY11C<^Crf_PvclD- z@@>00nbDb^{sv5F>5&%MH`>zBRejT@L(K(eLPJ+^20Ra zcJ>s7PM)Nf90D@1m;NCiZvUHZ-BLefIL`#}I0L(nvt8{ic;cs!^MN*K*J42aeQTum zaJ&~Y))yK(!Fhm*z#@~VYZ%}kCjUgMQwo$8{O<&I1N)SfI`(59VF&dIXX?IR;ks}B z=5Id4<89e~=jAgyw_iSEb3OK48Ii{xXXi0TuFTtDzMD6|y<=%<={jb;?_t2zAUK$7 zAYw>}YqU)F7sEr|X$+rVsd|!z!$;cO&UC;e&o&zeVd<#EDkO&HBwO8k{_-#X@|iqS zeU$C9n^{S?GWYX}Wx!%sx_Hsl075PXF#*Ccq%A!LKwfq7YS=vK?aNsoa9r;KH2w!ePmW!-e9t%Fy24gh&+2zl~48bag!&pcpFlTYy{$daa5 zTi|6LepyX9-KYF|yb8-JKcac{W(=?s)Z$3W(^@mPPVAcVfK1*K>Z}wU0mk-;pC4F_DN;8S=;u z-#!NBD+oL3%sq#KftLNIR_YGwI~~-yY41+K2A66#m~>tDzeLM2rGoGg|zHZ} zt?dt?gr^;F_^o0H^o@Hazh<1@viL3CH_xp@$AKZ2@LE|(H%~a>8%_pT!WvNNY2@Zv zonH&T_b|BSo!uR5)iHG_JbdYx7K3RVIl;%pOX1P?kjnJHgmSz&_1iWYwkW9b{>*4dtX5M%3S zNy~tzK`m1_anA8`r5X6Mz(}+3rRA#3UskeRUcrn$b;?`CfXObyxnR4z;#Zy$wjP9g zJ}kqe@W908A}4jo!sCn7r=u6SlI~+*r|H}KnfSTA>*X@}3ct__+^kR2Shjg%8?|`) z17V&0B>4EI7p=<6fJ(Y9eN10|TU=clf3_(<<9Rf(=}C4EJflWO57OQQFSrj7XBE;? zPt>jGMWYcNG@ZCFg(^K%&oU7+t#C{utZrwL;^UOOnCW6BK^GoAeE2TP$|O-Zex--f zjXh|1(Q9CBpbd4>ojz9hm&z|`nRJ>5OmvPmSfD<>SN@7E9Shus z|DtC<``LHE$9vg+pW~w3yl3kQciTNSBoG7g*kI+n=0Z7cxXu2xU;DMb+HvB_9Oe6> zC0^x!Ie6Pv|e3a9$6R$th3YN4*@~v|Q5aKaj_#rZjD~+Px(J*<+ z!T-bo{l*(_+|7Wpn~Bdu@a}*#FxQ}^(a{+MMqZaDWZJ+pRgEcwnJ<)a5cy=Bc+#7a ze-Y|sLm3VhH3&M9n&Q21W_{trolQSST)K}0zT~i%fndeSr7Uhm*LGvocbYTwJ+#3t z-dgw&?Xf{0x9>YBM#i>Nxjwz|Gh5%0PwPiD9oR)T8Z!8q5GVo?@UkjZb^=XxMALK~ zuJlxt;F9hD?;8+(jBP*1TG^SA?tnJvc+tT(-LkX|fx(X}7$eXf`8G~oo*+P;zGZJe zUq`%{-MafYzPpD>WZj9eFGSYhTX*qNAN*8=WGDaGj^{S}GnsfEXXXD9WUPKwzsmwa z8kWr@cm1#a>aU)JO}SDsZ++`qSGoPZ^C?ex%7lw@-}ai4=UlPq%E}nlz~(ZO={N^y zU;f~kv;&0aT`IY&M-6zvsD#d{HJlq5(Fw-U&nfQU@hiXK44DjuwW5jXe7s?RBfY}HroWhA7&;mW`N*@#91&d3ndm+6eUdtlALR)#(_Z!thS08XEOqgRKJ=kE%lf_F`@LnJ z3R(2q>g+szIY*0c2FJTCd7lOTw)-qgVD`e&XPKSzv-tnQH_RQ(<(|(HzKQLvf66U$ zpXIz-WkN~vV~}1t4#Y z)y^8*+z0tx{CS`EdABo(xCa_uf>TK~BKjGjp}(dg6L*`=0Ysy>$v~E2l|S-hDWuhf zN26o9{80W=@b6)J@Osmv&2N)yH07s^Ny^v+cqXCfNOLP!`Q{n!d7FZ#OrIrQVaxCd zW-yrefttJ7I;~sTQ}8WP^fNj)dCGIPVHub%V)b+}^}ZeWY&{Eu%dD!x<`r%gB8`@B z8993w(frD*uzrtk{%o4@v$ilX<(8U;Cvcm;yF4K zrMty7z2_NR1>>r46}eCRPzaO24f?FRP#@P8f$JbC-)?(PIm>C~B|xTtW1ngH)=xOo zLuiV~3{K@W9P2KQWzV6T!|a20qd&3e-FwpWX>?be9c9>X9ApWOJ8H#a$(14o{+V3X zv+aS0)yPqNCJlbB_8KPduGDX)JfD`y?RKk#3>TXmeMC)y((r8Dr(fI=Q|&#PTlH18 zw3&mv6C5vMryG=j3iH(^sQJ?T)tVPb#Prcy{Z`jR%{yRVX!$16zAN#Q% zdk-Ia@{-*4psw&f%WkVq{aI$|{3_nT{KYSRaSRMI*#E#Yqp!fAeGuhXL@E5`0t&tW zsX$i0Gws|2M`^93)@}!iv@J?{tL4oyQ!Zd|2l$k*cT!j%i77RFkb9yiB$sF#$oygolIY$Xh zoNUw78~AF!LXBVYFhV$e!!%r9j`g-a(r^+un;%-|`YRlK>*D=`p8h7(g0~>*7Fg5x z$%F8ljwq*z)A?Q=T(ih8~2X}Y%e|S>2HyHT*sES+R z;jiJRKJac?sn<}&Om38E0~^Yq54k&+MDj#&GH+jU-F%@9z9F;2b_q}NMISyX4@?|3c<=i~Jez)iW2(uI z{^*bTPK(`N`ITRJ{JQI|d&Up_&=1}Eq8Gi$XVf=Mw8qM92Obp(oas%EN^y^`Lg>`< zbZ&2auD$Mcultv5-@cmdun)2dJc7d1qg7Tq3f0%1d}Xi3qI2`kn6F{$_7E$*ze9<9 z4W#KRo?C@uI|)xbgEL{bjz5Pj&Q&g}e7Gt49^owzr*d0t42?tFQ0T?O;eFt-J9L$e3gEj>#4f0*F`T-evG42Otq#-YO;|*X3x0Fj- zV2w0bgIhYv^`^fQ6?xZ!g^qqXva)r`g)EwA&njpAj6tg&d5jZ)f^R&?U(k&kw%)qN zv$9N>c*&{qs~(9z7XFIobMaCzR>!)v`kfU;nJ97x16)?3;Mxw6wRC2kIKX?~V4YRH ztJ_t7wx95%i!?S|ORI7!Z|JbYBt_WtamsbKz`W`^=51zzGzT_*H8}w#x_FB6HVsUq zjr@pboptg?zjx()A>kbivi0$n5uWr+psDi-P%>G^FTSciks&ZDMBye+e4J%D>iY7Y z9Xvwz3x#i_N%3PjssW0%-a)-|}^Rx##FYT>)>6QuA6+CJ1x4?M3m-kr! zr-4X2*#63h3Cymyz3pvJVOM28cpI;N^{d_KS$x3@UhqM7CBNX>Yp;FKx5@EQmrXl< zz-_xnNdjAS^hc@a^Sc<8p9^qvcHlR?=}q6o7TC|wsXvNgy2q6S3Q`@r6t?_cku@ql zTY4$0#%tMz`~b83<0xn@z^PO?4UI||gGD@pA#kglZyn|~{S{yMYo+Xo002M$NklvOb+nFQ;-K*(sg<6Wue(sqp&Hz;We}=Pui&$_}HEC z8|$eTkY(J0BpnT}kM*%__$&7eX!Q>`L%)v+=}k-w-BQSnJ3aETM*qE*b~wnH{NIwV3`?GX4!o1^QPrxu zDSz@OfAVx})h=$lZ~V;9{LC^(gS$Cy0F1#WW^W198K!u;l1ilum(u2pUg@Kb7kT(F~1hq!1^20yZi|gghNbZ?seq^jEyQCjdQ_Eb1b89J3nPMoSbP^9%)Xt zOe3iM&9nF6v!h?UIvJCeXPJHZ#fNzIEhkW8S{E)pr}DrFf5Nr!R9#G~pZt02+qPh0 z>n>H~(UnoW+O`hrYpl=@vNN^E=h1C5`$B8Gt$f?qe(I&O>;`nc16A<5{$$@0e(YoB z* zinri5-b)WnGb~STucwcTi>y5c+07BpL&$YEm*k#^{khLoG&oKYA_s8v)Bj0}Eb%ju z0MGuc^J6Z|X&=fx5bW1|lwrE%j5f=Thg}nP)mPH8O23!^eu0VD0+Wih8*aGasjqm& zE1vTH_rL%5*>=yMj$dU+Z`(ae64)NlKXF0NvAWBPW4O)!LT)$z0hg=pXN7iy=Z6~F zj$}WG_Z{4Hx4jk^%%91M=3bsRzk}^x&tTOkbZ&Saw$U1K!C6D0ckxJx-!?yrQr(0R zT_k;k0Y{^&Q7>BN`E&Uq@n~(q;mZ%;!|D>hhn1FYq)%Ajb(H)9jKO8_eiH`8m5ns| zGPBcQIsBaYn_pXw($q;`o&XtK3x`)y#2qt*uQ*}TGjJ1B?up}%r z&TaPzNPtH*cKEFMAO7JV{&#ffcQB})q=SE$)#-i}4N@6Q@l{0QWvB@bMgm3gyv&!I zd=6=+xI}l0gSkqlk_m{bS+!{~iuk$E;zw5~bB!(j8(9(LWisTwVhpRNXk^ka}3D-_mgcoo;atz~}E!tM5<;q{$pa|fbo?pjXvW?Sb z?uz*2Ks|phth*}SCfAMlLv-u^M!Pq_vw+gss*a||LBq3OFH}01S90$wD`gtF^%-4w zOGNVijRo7svQbb1s2gO2_|?yhZ6WU+H>(H<-^F z8I?h0)I~{AIB%c&9quI*agkZ}$4nzXkK~{Tfp5NsAhTo)hA-q;S8-X@>_?G5jIYwU zGOIGGoH7g=+MErNQEeT1;7#$`;^ND543LpZhfXQB$zGB<0RQ`#)Ofqw0ZbnJiJO5D z+GhcCq~3?% zTLD2!yUWWQ`fxWBy}V$FK38z|%i=Y9Cl2t{*VDhCRXZ!fTaLP-^Qc1jILmZ!#qGhC zJd7>4$g$l6w8bs7!;`_!C!NWcjy(F4 zM&9zrpuXd2PkY+koSolI9VcJ%C0{bfw*MLzbSFH%_6E+-p9$>A=Rg1Xd+@j2qbLCz zYTG>m3HW|?SLSRF?xpj;o98e&HoxXw3~CpmTpG&J5TFQZf|{;oMS<~S6j6X>CICK$>1@ zqwxT)cST1znVvuVzW!AY^8yd7MmMVk_dkr$t!J#I1?%~+h3DXgi*{rs0M7c4 zc?3KIU37JxT=L|LbZNL^cR-T|f9G_-_T>b&c%Y3niZwVEU!aT=5ZlRelSjHwS6E+? z#(E@Q9MU(HMcS4Q_zZMpj&&eSeCukOvOi8a%E0aQT}*I1qj&ehCmM=hvZtMS$j>%d zLk}M2)uw*j#evF6sC6F8oW@KndGc_sG8&DX+XE|Id9V8Syh*R>6xxlhVd2zoywSmC zzEfac@U#KA9So?;^s!@Xy&p2K_@iu*oiym%PphxWPtlKTD__644D=0G0*T9mlLw#U zXSePFcJ7{vOcCjVJ7Ln&g-3k#t6bG7$6wI#sALz%hPTt7QIq?g3ZOb|`_|-1T;n-H zz=kdG-izCOkrnlwe;!^qh5v~`KYoX%`BaPqD^uPdT1nC4=$q!-o&wi;m`< z2m_exjk_q}m-O&}U+rUi%=@H@iw)Y~0BvzEY4(BQH+)dGNn>1`sa6{Vap||G@Ur zdmK>h>?oj}+)iK0S~4xAQ=5eI?IjadBG;nmKGt))vuW^zE7%I_XB$^##W1d*DAzIp znCAlC4JvCh0)+>7jJ!rrR|diS809Xl`0U{fm#b~R)Y(M%mmXfW`c6BTtLz#s6uD$j z_`)g!;Z3VL8t(ZrK04~7u`O5;{iR%ddG1~E<%h(At$fpxu8e^3Wi!V)BH4|R-Q#w< zGUX>s)h$7zU0Ttt_RIiTWrCmE$;iN$Y}A12z^TD>M5>j0(xf}kix4Oi_^lOpNQmJ#y6+Fvt)!k0HEj(+^-IFr1Gyf6ujbmY~3L~v*i!bbEg&p_2D zx|57nZo^5vfXxI?G=8BcAGlS%u=r61^owu2@y5&8Mf3@p*a^#_KiZb5i##>@(kOYv z-jFvzN3KU#E<|T82QROehDPqcNJ|*f*P)L$zxG96^hGydn@;;7m#_P}uUlYZahfB5 zm+_IRe`z@k=vBv7?6&url0Y@=XNvxLPnXWP+pTtSX#q;^t;1Dic zeaqG;^sZ0OprbB}>|gT#I&Qa*vOf$Wdj28KHx zq$dprA;UWJhtLo31u)20`UTig4I zTaE*L$(UfAa0Tmkt}p1~?&4${z4=ww0dt@!Zk)W8jJo=mH`~t!1j-esP4s*rk~&fY zd%={SR~|d5WtZa=XU`{noRD&?Pu0mbDMwcBI2?d(UAP)~Eg*bx}8$-~%66a`NgWIr?eUBjEgPRiD&Dov_WEq@v#+ zMQ5Hw`}iG-JbeJJaK*1S%{L|Pr0tHs=tVEO5xfZ>hFW;ZOJ1_hH{2&255D?)zxR8; z6dWgEX$QjF?lUNXts3_;SlszV`n9ip?H&g7Q@{C}zxh9+p#SFZ;lp-XFI45_Dbz*< zRr!=-8J|%Jo3eQ`eFeq77$rNzYUBnK!EMEC(e@Id)7Qix&&_(lh3&7syg=s3JU4we zJlxx6-J?>0uR*D@W0-oHgoTwq2i`G@aFt)iBZF!g4glpPbX!{9WCcH0v19OH8^|)a z7137T-oT|?@C(F1A|)H*GF3Q+&oD`(+zbtq+1T-#9jPQ7Q=2f5Q4{PGJjIoZJxCNRuA^3XMF2VJLw!`~`&k%A3MV=I{rr zdF7}p>>cU}IEFir=^!wfXmYvq7%TLB3=mGXGT=2x%L@O{vQN4LQ3GW4`)Q&g3^L1> zG*RWO>j$?Urx>&ybjJM^eTp3GZoZ9G`3_d&@c?C5??w9A!{~3$(n<5ie?8%087YS} z>zTI4m%l!pq%-Y9o^tS~40NDR@#Nq-x3si$GlTI8XV^=~(MgkZ3qg6<2WIT4O& z#K!Dm#qIqV&(l8#I@Jae3k(F+506-UE`A5cSP$?T*t^M`@S>}oEPPJ#rM3w>i$D9S zSG~$_C#?F;_b{^k_ZgEwI?!i~`gu&)mHGF5-}jyTt>5~sr!k2CCKuq2aK3aqgF)T~ z)|5m==x42cjnm=H2X@ihqbSJTD9RBO#+8DGOf4SUpoKG#s3`mk-M#*^K3bw^f*MSlv?zUgz{8hcepZN_&I_5>5tsZU- z!uHArtBrk}(LP9i_|fMVh8nE=Ri5pV9T;GGzKJI8bHF>HZP{b}%+xhrhsY2gD?TQ6 z0ca>k&?5UTX9$u%G|-uxv0ct2oi$W_LmKv-+#Q(ZQS6o`97Rr*neydtCS9~C2aGqN zvt>>n>32LvxQ<420Ju3HC3Ik5!stY)>Z?EM2kG{kOmZYfS<2qQvfxb?#(2qG*~S6q z6A2E$l~i!i8}kYjU%BN+I>k)44RJw*H?#CE{f#uLw7!!Gq^tA`s8`+`37yglk)^4i zLx}k3%)n&_h{WVKI2n)b3Ji>Ke|dieWx8{*##{G3#^T`s=h&BfTnC)TgRw`_70-CX z#fuG*PWYlMU(mD2Zq`lsJ{@u`Hqb{Rg)J9YBJru?ghj_~eA@K^CNh(+|N5_&my_>$ z*SnVf{LlaV=SA`ZF4)zvJx$wopI!;n4D{1W^*pEc(?9*wi{JnK-@ojQc3#@>ZqBVQ z;oSUv4(9ZAYnQ)PO*?cSZ^?s)ar2$YPX>360p%koh&OmMcr;&Je;N{&X-Ypb&ioQhO~zhPkK<;h}{+gGFlm(ep=g=L{r}&;N ztK@At)+uEP)Myz@m@-RGt#i4mbJexdxAJ?r)Syyu!SDF5^rCNk44IJas?C1o!}T*-yQWQP1>^4#$3Ddz34EvfXWK>85Pr z!uVG_ReeoQn*y`o4jz5-VfyASKBjUdi-9AQJ-#Qu!Z;6#7-HVMrSAUKA z&!Fx*1L}#3;zM8gg=cKsab6935p~{y&0Juo!0q~H^U2j?90mL(H{c7eirMx*jS}cP z;-``9`Af>Lr+v@&d`~Vkz2hD4_!S;cTjK2ezcL_aRo&Ihj_I#tSPC|FSPdEq?H8pk z;?bNNg-3BT+#Q)Hl}1&C@MS0KDA6(l`Cew&S91yPP6qdSC9H~Ds|aa;G7Kc*I>0o- z8MsL+qhNvZSBkH1Tt&tkj09ofJfk;pr0oFa>Kr3|k=y<%Kl!?;iVzR6N^iUg7bhM+ zjn-BxH*w|LpRz7m1gBi_UOY@?63L*~>f&*S?^{2BQCs(%)`3D<%_3F2@ERQ_Ga9h| z+*MGYq4o=Rxe#YUhi9~RXRF7E13#`hT{-RH=U2Sq&xV2Vb)x2FRodk1>v8?;WggEH zr+y7yS)SDa>uXe{=|r<1*m|6?4!~7k>hmj1_J+q%?q1ZVJ!kt!!CHS`ZJSrDI$*F> zeB2w;t&G4?$9@ts;68m;p+d13(qeE$@4g3 z!tvfN?A9%my~1(bk~qk@;0ixF09_XXr4xNU?EAi+_c*(Xw{m247&z;YqZ)kase=S# zgHB^3ccEt|dC|;`T$-KmM9w_h@AI6c`>EX5{@@S(;B)1d^LE>9+kFNka5kg(87S(p zPtxrm2JtY;R{Os~DZYlYp}!-+^RGJpDdkbodPP_H$4=gG7G0e)W4?_+`XRSz8;msS zH!8M@#R@V??im;>m6L3>-@$g4c;QPtoH%JaaFUL%){j6Wma!-$4IF<3Cv5RQ;x+yP z+i1=+Ge7C0Eb!)=upS~kWdrLo$I=+_35Pe*HJF?FmpH(jn!!=Qh1JNojcvY$W_CN( za)g~-*^m?m>KRtRckgrFLBeO98QguQe-lrI+xDDxm zF)L&14(L?>2>w=o(i48Gyp|?EfQ06zvRaubl<8*aQmp$)3(8x1FeD&Z;D z>Sh|jX}xZFeR&i$$d^2dn9r9QDSMqAshixLa_58g(1uw*dDO)RH$31Ei32Sop=({4 z2;W5=POw9_)cSnYp=_WuJeG6fzr&*~9`C)K!F|Huz61NW>`P~OPW}z>u*fQXZF}oI z;{LS%ZR)_E_7ct`f}8>EpriT0m6y_q{|y&AZblIvq?7uJPX{6uDIHzK@<&{wk^!J8 zj0Vk>;ks{wBYeUe;jZvO3>@%Ldi;`qXiA4w-x`m6T+XWg0^S*aBYK&0Z2+Rg`nW;+ z209f6JqAEyRfew5tFU<~*Fp(T4M@;-wq6FqLBc_Bk=6MnDCYgGjL-tMCOIU>MLvdP z5;q!gc`nPNIBtz^X+Wn4 zO&fOUSY};l5;TU|x@qLhn>Ylc4Wg8ybex`8iVV%y#VBuK@$PGG6xCUd%*=IJjmGGqd>+_^TQp&3`^(!o` zvESPVSSjCwK3{??YNtnf{)E$stB@m%Lf2kw5EK{T>^3lvVQm9Nk@m z{`$QKCpNP#b!>7;TLVz_uJ{BS=GXA{Q;#d5Q;!u^9~>BO^0h75S-gwyB|OME{Deo@ z+$B221-Ym5iPhK20Csld+4#2m^hlsO)Tf8qc}%6=1oy{({Kr?LfWNu4wDcefaSI0K z0u+S)erB~qPko88OV*OPby z)4gnUY2dO|*UGPzob4vAN)ct!$Kef1jxS6U-o$bRW0|cU!i)x_FB_mcV&t<@<3pg_H11G;sj40ULBn5 zaPdu}j75HyS@}I-%gZ25K4_U_1;3+F?JF!`fh!uJ3G7r~5=aMpWI%qw4;cf`74CgI z)(%(b_|h&}_Ao`)w3LfX=jrc$>wBH!ru|LlirFn`G=jYh4NtkoziBo27>2DW(4vt% z|8&4uzOdFKVd&W>rzVD`wRF*hOWd;Em1Fz)DE(#`J-P(HE^%5X+s(2wm{SJ9L0=5u zrkEU(27Pa^;fZuAHVvLia0?2#L&FA~PJjFXFVe^x z;cT(DH0kOzJ{p(8E2AcC_#rR#u6VG{{E0sgAATwr$8Wt%6>@C^(}!z$ab znYe1-F^_=s#gW$v+oz3-2l`Ma`ldSW{fbqd4Zo2KzE9w?+Cg+e{8?ui#h1P`%SqFt zt3~Y6z2G0mMjj^3T>@dMFBwS!Fg_Q*z^eWjZ`i!et#|x6b_*ul3z~4Q|N3{o``s7+ z(I5TMGPbuSqgCFv|0zfy2Iy13e_Wul)t-*X^X9KwT3Y(YJfh}nUGqL^I&CR^I_yk* ztUu{0g)h}uvBT4;y$yaZijeIw@&HLOvkEJs-#B0K8|OUtdGI;UdCrZ@f>roT1f<;x zl9wou^!SbK*XZL7D=l!!$f=;=9o*1qd^D0%2Fm=vh(jG#xnOh9RR#m%QSziS!W4ln zt(3dU2`scmJ{znCJ?O1&MvC907fx6A2#?H~pahOTX%}DBR?_pv?>;ZYu}k8u-_Y;M z(`faEiztK!Sr5!LStMh~OFmnQdytKfKowkp7`LG-eokLF>RATadejj{PXMrS;#TRP z^>P{0tKAJN)7g4dyxKc`sNgJypOZ6P)hlJTvJEGl{OThq%Hn{r zd|~_1Z_{t=V_h`8F?giOPv=0^pOt}#s zeVYSrCxiICY`-7H7P?B8-&I}*d&N)u#83Q!NDS!3Ptn-+KLrVlo#s=ZabBZ(tDQH& zt@94G`0z= zRn~Os<`{4kHC##}SNeIaDSixnVKjOb)wiCu>$u(DXU>GB6}hzZ)N4i#*3w1cbe*spP}&>KoTVFK3@$4unv=Tv>7W5IS)#>!|Gj=21!PK~zV zy0}>I4K1E&mKhv(73xPL)20Z@T?gUs}@e+wRio`#8}NUpj7q zFEA;-pZgq_Qck}L4o%XEKgfqS+gH@oO%g5Ld~tNrEi9?BfJ~ITl7&j zw$C#VH#)&1T)6guzWWWQ;$2T$CbqEZjrbW$Yd7$Omegr*s*!G-fyN| zmw8$!gE|BK2A6(c_Kn~8jb8%{+b;9|O|kCy({GAw|!5!W|;+By&-=FlYFJLhQ@|8(~K503##}}?{j|*QP6d`!VQP;kn67^S; z6oNw=f)P0LaX!DZ&Y9tb7|~NaYM0#w@+_x!@~&a4djw^S%D1eNmw1^hAd3as&35W( zCEVbP=g|;v0)$qB?FZ5kuZO3cS{2SDZ!W(8z)8Do!DHVq3tWG!GvOi(`Z&;3S}&6+ zel4ryB_1+bMi0hshNqCB?d(H=?d2s7gZV1ky2rg3N1pwo+HB-cIQeaSrtOTAUW2ej zO*zYRP?IJZ;!3yrrFApi_NrZvOejrjE_Ee8deC@KIMT@*=MM*62IY-m<-085<1hH?xa!A#_~~$y;2HM?&8Bjvd*>>ij5A?c9ex zPQLY9ztytVIoH3I*K5B$S*{B^kN{g={HCzfxa5Q#yK0BdH6RciT^X1%4#ju*BOrlF8Br~sgrSB z_?Yqg`k61^<78A=24`R7;{+nR9u@qA7HCp$r_z7q6DT=8{NJQNg8xP`1T99bX}!0z#XK2 zx_guft?2+%JEojQBY6HJ>^IMD$!YEj-Ndv0`+3pJ zCEUKxq(T5(WDh;@Z7<`x3MVcfw99UAAH+7?%~K?YfvqFGlqrnA0UZM9BldBg%XxRv zwrd|H~)*5zx?Gd1$ONVzTgY`dl7}c?SBFis7~|=pq&4puY29= zcKbHCx4h*o&*i-OCwV>M&2+kxbWG)8hb|>?3T?+MIcYGm!ZE$UdtN*5>YNUK#79(6 z*1Qmfe88h9`bMOk&W@qmVCA^NOCK&_mb({4yAi((Kq-U1zq1-D^290rG^yQ=c_>*^dF(%@M={XQSECB^WtvDt{K2xGaqP5;mdgZC(wcMbjknom?3< zU*T(L#?=bRnM@$pd?%jC)glv;T|V1Pdsv?IW>*0c)EJckPXW-)_PjWR-3knU*3rQn zKX2tDPnvk+1+^Gc;LqvA0YIAZ!LRbgo05eIIMY5^H%l+^#=|C>)``R#3^EWmSSza# zN1QEa_{KHgw}6*RSsCDwe@zC{w!$aaATS<4X)20E7!^#;|(Z;x4@g_Nm)hLd*b#(blwY^J_=fw%4~agoSYB| zKGw6xZTzHs(nr2pdJk$i`T@P7r9DHm>pPfGJizneN4T$Z82zrNXrw2<)+4Y4OIAs5 z`3b|nZ-v{9Zry@E$DN@o9JF!jiUD<1neBletU-7GK*uYl- zzwAU%*!QTE>4&;VI)n`bbY0^JiV7lVo7xV^A-|m@YF(d05$ySY_#3c*TVu zklJL&1YFWunT8{amR`7pH`@=BK2wG?duLtB2$^1TcWZN<6`t=8n6P~-|FCgJ4jmE8 z8CQ&rhK7cshx&o%O4xEjqhvuli5EFEn4IYnE*V$d0GoD=woFM^gPwX!Lw#mqls&a= zdzMo2)-U*~ItpgJN-jZb^+=dM>${9xd_j$X`ACaF29DCLWI@;C6`eTJjLwms3la=E z?g~v@rQ@R(rz8Ae3<$HbRetiPo>X4714&ytikoUH;lmGp(K9~VZ^bjce!-&-HK`zL z)DJ5+PG(5AZ=LpX95%x*kkv#k{YY5Sq?gGPeq6_A)v5TL%};qG#$F8AFw^QO-wv#- zkZ(mtcKEFb79hS^PTr*{zJ6bSlSS267U3B<{W*3dZ)U}R8Es@6s{`^__!Z70x!ODI z?frbfaYIl zt2j4*79H$w>Ev0Zk(>^TpWaIcjdBsUgX*fIrsHG0vK7sZPd_SgFN5+4I<_mgf)_uu zf<1(NHg^L2Iv*=|5*>Sk?f%>7?D_CZQ|iL00i()|aS%p@>S+=eHfiOXZ+e4s=3HS| z9P1{JDrdk`ih3j6}s@{ ziibX}mrcR-e&Lu_a_RF&LrmFu*EpFy{VCW-8i9Audq3`0J!MwgNP0{DNbd)$z%{(| zJ0?__Nim?;id-1oS!IL%_)(Kp+U^vF-gERID1Y49>R;_;eh|Q`{u6xvx-?;gO`j^B zO#{aCs=N9As{V#yF>e4AF6A}4>5DDRboC=;Lcj1M7q_d?v7PRM(U07AukuPRB#k)L zPYR~$QLyHxEQ+)LR=o?a{MbEVnIxTJP`#CH_bb_1+{4kxaf>dUz$g?LI*XRHyg^(aukB-UheV)j3=4|A@1k@8>bK8|i>veo-OpaQ@N>>9Ax) zsYYca&#;{>im$<9rtRY!8(f6D6MxJDMkAA7qZ5Sy#xF}P^YV-fxD;{;TkW?1Cl4_e z(&neDa^)k+j9&w}d7#Dk1h~N$PCwYHJoR(-tqHHamx%91Bx`IX(X%-ShQoyF&uZDWyf z1#4Is`$O8p1Rd~YKa5rx=@-QNwzZG4INrI;Ao`H6gH=Y7Xus@;5SFHGRIcck9k71I zSCuDh@z=}9I+_=Lz;i*dfbF{n8J}WNaWxYt+fm+xn{`u((2`EdB%C8Cj!16wQC;lD z#ndOa=R24bZX8F^d6MB2kE-2)41CwS_T>~$8qIU_{r`rCgTz<12X&#-f++Von-B9=jRU#1Fi;I!%@6U_4`IU z^#>-hBh9*rZW~sf%MzMzN4{!hCeFvgwi+On$+?^~?Q6DU^^+<1R<3Evy4rCHrbVom zlf9DLRxqYjJxZP~BF2V7Vm_AS28fqaKR`;d8u+tFK1Z#r=2Xj3ua$$gL?8>esr0zbfr^+euX7cY5Jw_(MifL zUdXbFnKVZCEgL7@HFhZPVA6CEFSNP{e!L)8_2_vX)1ads6>V*R+Z788%qPLW3tB$L zR{8RpvSmV8?|Dia zk*3Q)<=qtesNaqEb*xDPFE$GP#5F9f!Yz6vMefG?zD;yoGzgP8f2mKSX`1wW-}(Y? zP`r-|!4L7C_a`FXd`kj2>*`NeGO4uiLwf9mpwhzj?PLr6ZfMRinZDdfHF>o&7+M3_ zfu8Maop~eXZR`^GnbkQi*zMvgY^QlG?05g^pZ@6=TR1j*R^}#eyK_k3?}fm)XyGh- z{kMPnx4(>S*#DJ|{82ihACFKWs`Exnq*o_4Pgja$I0~mCvO3?-pnM^#{aeAw3ZnU? zWPxw=C~Cvckh-eh`QZkJAxNSa_F^aWF{{y zJ;s`_gZYB17>rRazzGlC`t)XG+3;#Y(nxOUg_l;hvu$?<5tva%TTv<+|t zEps%r%EdU}7#CRJmchw{#B!w7Ir&OET2`e))Ap-6Rr$inP~aPEcsHG&;rdlMBh3b{ zS1Z=ao0Ug_7A@n>PCUn6#vUAJK)<;0ix+tc6FTx|UduN(_9MTlZcc zi-r@Y4OYo_p!0iqeC!fd+Looxj|C8p>_xJjTG<36yDH!JK6ttKHqPX)B+rEsSqLf4dM|x zXaC*q>VR4Cb{#U0srdpKXzxOiyjic|7cPbcUq$j4J}RB~tdkFMf`?yx31|5lgbb|E zcjeY^=_kuSTn6fnN8dGlp{oasO)gHMs41htl%l7Oq*<7*%${2FZVNQ<$oJbm-=OJ3<;Enaz{WBUk?ze4@J zk?$lUXS}A@ufav8q}d+~Ptj_y;c2TpGjL;lhUlg=#4@&tli1v%Ce3yzSvu*6jGGM8 z9<)`q;%zf@Yn=LnxjmZo6YUcJcFbu};R+TWQO?zjD&cukmGGwO@3-(zx*CT-$(&;5YYNe1=H zX+I}*=8ZVgz)5%9rQ^+*cd=W#&aUZ%6}!)&pW?ge&t&oSBLXw1hrZ!$_wglQ$A8>9 z&SB20OavZ=hBH~S)9IUUIEqAEx-wEqQRyk8<>5`ao)>Y& zsWY~smCBKq6#)6tb1>ZHY@KbeTL_apu+>o)Pva0eNS`FxW_93`dxa94g;TACX@qCIYo$s<;$OgoozV? zhOqF)TYBNR8(~&tYIcPiobgQX8UT?%ZofI>)prH$owWOS?bJ*q%0mxC)b@~%)5z)} ze2eyzs>kqa0Fw6}t+uU0o7LhP`t<-`=eh#9Z?IxN?tl+YbbvH@8S$YT`I=@J-#!ys z%^P6}m~M6iB~8N(Cvt1RPT*oA@W;Yh8S)XCH+l_alc%ivf!=T?D9FZRg>`KS?k?(- zyA713zE*kqqrA!M3m}@wy7C?xeaIEZHm$U(L$#k!q3?M%Ti%$-J3klObTJ=NxkEe9 z%86irjm#^p;lg^_+4i&?Vb(Y*xsw5XiNXC|+WjPTvdzdoQwPH8i4%$i7FWl4Z1-*^ zZddZA%ni=bcX8io!e!wfVPOBy&wcK5-|M5szM@+q+wR;Fcw7(YRDIsd6|B;qP6zt| zws!8YlX;m9gFI_|w~`cnI9pJ{8nz#v=Is1(l+nl3j?pQ1Lo;V!Jpo~ji*FcXcAUpE zo`j)V;H_}?z=KMim6G|=Z}|G+mJ*GI#(ZJ<*>2)w>leQUJaMDEg7S-^;a5JvDaA4# z2aSnm=g{^R{zE8r4N|E`!QmU%SjfBe4xg1zTJfMCqb*IGyeLO`PQN2uhNxsETscYm z+E9(EX|9+n&&xQtsHpE%7;9+ zNOmv*-os;rOQbsq3Jtu-LVUvV0qOa?{Z2e4z&7>;t{Qn7O`GCf5gr62BIl5DWJ?NvpCr!H6r-K*2Dqj2>4}JckGvF*BU*Dg9 z{P5w!_pp0-g{yURhi1z~T~Jd0;2FV%H+@{mXXKZ5I_fz(x_1>98$V*7Z#V@j|Kg^t zC}*Ap&b^dA55@?)s!P`(W2VrcB+LoOesGrGbqg^i+v(|0<< zuISd;2HtnuZAAr~IRF4a07*naRJR>^*0Y{9Svt!ei;pEhd#v&8Z>N| zY8<33oC99UA#8i9M=QxZ?!H44fa**l?x5HsDeCJE;*SZP3QSFlAK% ztZC9mS2Gw`reX7ylP`(RlLPosTKREX(YyvLgCRm(_}n-qoIy_?XF1j__0t#=PQ^&K zPEHIASZ-v`McipucgCuhYk+H979R(mfbqcIFI`AC`VpvJ@8{Q5C;X~Le7vHwu zqoKq29wE=0?m0^y$i&D>4-y-m2fGbEHNdC9RwkYd*hV5m&V<7cH1hs!(yLFI6(_&c zP56Dn@$+0c##(@_a7@<$OZISij<7FRl7}2gkS@sR$WPmuU>GN^1BZa&7gAEE_5#jBs&Nw*&K>xoBzJPUq^v-HbZ9pBW+QBrZ>`xZd)R~w(zX`~fBwBGDC z+>X6_GIaN|kjdhJbakQVq%okA@1`@MSY~J7ZYJZ`U>_&%fB*Y;a(Q|6tH1iIpT)rb z1228)OaCq3PWNJ^vfp-_B!Hbzw8-;uJD}4k?PQ+8yn+?+OSpvg*L1KL06LPLYczs( zEL`9_Sq&CoP((Xxlo;i^1|__gj=J1d=jo_DP3cKT96GWy{x#01p3Lm^G!u(^n34Oa zN(wEw!fEA;uQ5<*V^~ZlERPzFN)s+&(yW7EHCRWXjq}rJJ2^4URnvacaY4d&VzQG9 zItMVE5AckSK8)oE0Uix-3FJ56k+9(GFrJ)g%{1vmluDtaLUy>rtTelWUl;l ztt@e?TxA5R(ZLsYChYb^ZEu_BZa^kSeK~~f|5ZLCLNhXHWhC$qkQ4x6odFF zCRP^%dyICu+d&@q)E9VyM3Aw#1nm^k&SZ!x?x0N%u$%P|cV9l@3XVRJ`T`Rf;ZM0n z%RF^9ZPaMzi)RfuWzom;?r`}aY?k$N*JY8Pd0F+6Ctrr0d>)h@^++8^Pg(e7FUI;* zxzg7m=REFcI$>#g&m*r<#jae5?)imACllsJCiu3E4O){a>4e#q?jTo_+wcU9^b=_i zuJ*9M$g6ZgF>6?<)2DYb30`LF{T|*PcNx0ln=5^3R^bL7yp-E$ltg-qmzI`}+;GDUhd|r=`Jey!8{Bx`@$0|->l40j@qcjt z=?#3P?H2r<_+#IdslV@zwwRmyTKZla6CRfXx~p>^Q~Ukj|NRT8@c+fi{2q+pDQApy zAd;q6=ES3n^voLQt0UX-{ApZQSRow3xa?qceg{hK>LbPnU+u`CZwDh>8nZ)#<{Pg# zqq>-vDck}d%h1TTo*QkIRUA=!S2SXnEDPtLs-bakbYON%+H?)qZhhnYG)NjBf^lxC zrsClCb+f!oI-n&zXYg*rc_eXy@CJ&Wx?xBkBpziV9Db2WwpO9-JE5~$07mC+Wo4t$ zD*36@SsBO?`Kd5Ld2mH$+SFU!ND|++iJbAJA)MRe4h)$%5RPGBLbAuzoKFytH^ETk zaVdEL#>t2iDGeaO(a;I1vm9w#R-7<61?=Z1=V&*}v>}vd$+1C4uI9)hkCdT7j*A<===hMVnM z^6Z1wJv&5FBHuTIIZ;}nEj$Ww$0T~w(U+io)3$PwR{h8~u$*QR;3caA^hx{u4hLS# z2i}h3PLTM~2mEv<+pC4wx_;>(nd1d~2Tmtx4zTHy(2=fu=v!CilRV%{ucV)WwUr;) zS)Sla?zD1g!j+F=d#c9&_fUEv3Gx+)CGG*WePFP4A)F5txeCeEk zDdVix342U|7w4mJH5m|2dD=eu;zUm^>&@Rl1nnNB!zVG+N?BUh?aJ&LU}<8}D~QPfwN~ zmjgNttOA{80RBJO%6S5_ymw;k_o3W1pp1%wQ0(yIY!f^UgbEkKVP~O}x>Y;JEc%Je zKAjxU2UizW2=b&AFyrFeNyW!^i*5r2x!kuhF%h^6rPbJI_@lV^xqu=a6x@N>0VD$! zag`)1W76a)TiK*pj>=}fiW;RQyegkKSGUJ3hVnBRA#7e0ny_2CuGB!8XxLVH)axqi z1dsm>e;4`vU}Sx)l)TG|Tgq-X$G}6wK}ll5DKCw-5oKsv1~|)VKVfSSQ#oS{@HJ>9 z_kuCsus>bWr8`9PNz*wdPU{%{-SED^AmC*q^KHxE;aP@1(+W2vjN^n$UJHkJ@%Sl2 zm&H!ReEdz>l(CaW@n%>VDJzNgFy_UPE^YH`rPbpXSjnzrRs*GY!r-0hqa)HI2sHfS zb5<55ubz^9#qyMo{1k7ghH6w+8V#g)%TaS!4GYHWWLVR z3MZHlU*JR<*?VK&zEo}K1k+``a}jt2D?+(l}q_u!DCz>wJe-O(#HsU zKSP_KUTHI&#K$I?*M7n(7vHRx!Je>vuxx{TsPj4pcPHZ740i+EEd%ZJD!U=ePkriB zkNnNw{LN)cOH22$N_V29d}AM>5jyy(`;avVpK#r|$=ejc^(~DjS#e+CS$d;UG7C*` zVpHTnyU0ZR2shpju@kfZ1uuAk?+ls$-QWG)31{j5^v!R6^UJ>M%f9SQ$jgb6J9pJj zhenX8zenzs8Mi!Qom=@gf3WcdZ@Y2wi-#|seD%=#9!G+x8cC%ZvR%-m+Ti zaT+g{Wql(nePAV?wg;x##jHoEmFMon+@q$yA4C#|I?PFl}P4R8)>@-z;t z;0Wil=qKs-?v`2K>LZfTWxyoeOK$c_`H_*7fexQgpD^-!SgHBm1}E3@H!GL$EJ1N` z#;L-1&%p>;Qv*Q&NlzVsPdngOUlpe&U1PnZ(_jdmq1nnM3qr##L3jZsa%cm!VJE`c zAV+U+|NEKQo#^0&)c3v+fPb75@=PE}t2S|Rl{Ui*|CYcsB(+uQgL2EH4_{r0 zo^XTxHWms`r|l0i!FjOR6{`mb%nj9$hLZr_;lIM_{2nfy?#EuvF`#d-&Axua4L2;X zWAN`jck(s==@q=X`+tAu|FVDXjr89)Lg{xV3;*+>7tJ4j(Ti4IIrmE2=yC5}`O1y? zS1!5unLG8%@7#FdZ@+)?|2%kda@VhX)7(cMcLVy*{oK!`lhYA@g28;9S?4{h&VAcd z8O$gn{V58MZwJWM7``1dANR1Mnjsvxrx}bdWn1VTl)wSoPm6jL)PdP;L|50f(sq@p z0d^9x%u8ervN~U8rQxNX1v;%;*(yXP1o*C;YxS&h#CXex<>R8f@L^k(;gK&bNoM;h zD9-$Xb?`2H^K_}GWmg#Ah+AH6dHXV%ho}!#A9flVtnj)jI};GgACe)`3=47PXu1Ak zl=Y$Mpj8*hVk}J~&v4O=!6HqkVK2I-#{!tn&o)ZCv~;~V2K2qica3`Z{%~cGbZOy? zgjN#I{Fxb9%1cWw{|prJg=f$C$72EDAssnbk4!R%Td$H$jF#og%ND+}wDC#?eR*dM zw=zo(Rn}SIXELm>@=bptEPnXx;Do7(PlPvBe)O^XzN?_3wY}5B#&Qe&dh6`i1}DA<7=y8z<|(GWoN~ zW9XK4IRxp;A;d_PH zfl#9%of@2rwj|2t8#K# z5##SS>G!ZY_ac@?Xq2PnG?|GbacPw^t&F5$^UClCMtpd(gLo8SUYs=j$uoYnhxj9} zrt7xwMNCBl@QMFf_9u?j1|kqk4k5Ayt+Ad}h;rBh&bpO6i)K)SCtzR61uNx8*j z7p`!G9c2ex=z6y51uX}3)0*3gw>tJ2`DyTYW51Vx}bxZ%PxyAK;L zH;ZF>>QpjQPPl@X&(R)HM=z3HMnCqRhl6b<2^~+-U*kn@Bs2sh?6!OExghK8hBO!l za0gB0Mli<+PA04V?)>Fx9P-y0P){;>x|E}i4KAVG%tA!E>FeOS`gicxKKT6v!;AR7 z{cWc^e57aR0h_XJ8UwZWdwkSWJLxwf^j+cmwmjQSIZZrPkw>=u@8z2t7w}cK2?M&1 zv8`Qy{YQ2@>vNy=U9WxPzkd6XfArpcrytn&C2I>0Z=70RzWwmt&;7ISyY?sF`^q=| z+2j}A`!9BW`#=1}$UvHpC#PJW`ZKigE9XxA*nisi@BiTco4n;M_cMlb)%)P$4-%ugRH_dPoFYN~NGcpdWtlBsznqg4A6Ii_ zApHOtZUE)~|J=O^+^<(v-~0UE@yugLPDV0<5C)mTETXnF4y~02tf;kO$(0srtyk@& z2ijZFs!xc5>Nt$s+cy^0_XU`q=W!z6?NAtWIQ8PCa?&w0oH{eFM{y`DVpdrlH8 z3OU`M_y6u`t+m%)d+oJ{XFvO~9GCA|Y0HZ729t8YtqFs1UE!`-4G6a$)^erk59eTf zlF^=!?EhEY-0fJU4jPV)+97zP39>7Y@}=2hP2@9(CTN+%@`msMXuM_jhJ>nDwV{4L zkgO+uinx^&K3T)?DPaF1lPpl#`udUEwuF+)*3k{oitaA zDTg-kz*JxFK{+khdnr$P;yOula_pdCTLV=S$-W&(>v`;{Oakd^>(Yj8HKZ}DtL2=E zX5gvsu>QghZE3+MlQl)R_^_NDx@1@B5OqA8iReZLcWsC=9Uv?ADpS7v6&=ed_`tQi zl9T#bD_0vZXAg!n#FvNzF#YF*m(6_SBOiGr{=H0)-IW47_F)Cvrv0-VX~hPRAD--Y zw37q9_S8wln8R`B&^LENr#?udta8?f_SD86hu$%MC#e4kw)*enBCzeqW7p-6yS%&Z z)7Q=X-XHz$^5ZYReEa;i&A)=fb|Lij_`K^ETm|uS> z_XFxG(G-Ej;=4<8S%Z>$>0n!U{S!)g3rvL$~AbVt0e} z94g^yU2iUJaTe(y`YH~>oyE!aKUJ}CK7-0Tv8>j;;cY8Q;}Xsjrx`d=Dp%TzDAr*H zHlJ5Jdt4=c6b0YRfWHlTUq&I1sIW~?b^vF-BxOmNftH}p#FjX%xsz@BZLH33pe*;M za>z$qa54Z8jKPqCe&)4_q2Wms~u zz2fY8u5Gs~!=8zTY`nH2GvKy#3zZMcj!$~(WB$6dqA9G|8m1wCg>PQTCp!#eByB)1 zasEljdc^4aoOL`tibW2j>79AMSJ&ArH zKY$-Of+X$K_W|Hc?q&BNFkfj_WJZ||=0*2`aLpH99y5@@Z`xG^dDm~w`c!z0PdXyY zt$KdVi}5+Hoegmd-n2DDS{r&W?l|wVpF#hf1%JtQhNprpK1=7M7y6W4lkH)7J$wKM z@^5vj{F-1}*XSx`=J~XE4c1_ln}IC}lYfBp=T@XyI#V=kd?D?OxfBUGEmFrV4CqIc zIeC_=AK47cBu$#S;8#f*LJ1_mSr|yBqcTmRi-tpe4|9zgR)7M_rjjr1}T72Rg#?QayzV5yI zR=XMYdQYGnTNqwCj!WMd+4n7S8VA}|yWcs#kb_-6&b!_>p;UH`-M$XOAif19a9=vo|(ubW-dP7%u`lf4K_3gZ-X|(iBEV|~GfibNHM`3~tjuVV! zI_hpafc2x!PVh818XxQDBtYH>PF{N3woA*GRuQ?sH?Qn&saDv;)m;X#q@P{%g*_a;(UW_ob zvgJ-<)!oTl=r_>5tOiqc2~EoF4JcvLG~xvNRa0MP(QCf2@(|co?{y%5?x-|t!nnTN z-YB=S*5_CKhlNV-l+L;~ow9$qa&t=+($OL7HC#2Co`D*_G=PkZRg8#ox} zfIci!I%!AnqN~JHKgvq_piKD;e5FZWc;Y3K^?FuymhqbK%6EnBFM*LJ>7{R>*YXUP z4wTL%$$!+%b2>{7m5*BA&i#Op+ z3qEpL;&l0)d?@7tw!mG?EWxL5w^TV2P?p7~#8Vcy+K%)QaAtXaPWL>xj2+%hTi!~Z zi=`D75eLDq^0Ix;;%Or?*vPJ?2as36o4VxD7j-v&?xyZP|M#~{J?>GjUw;1aAMAd0 zxv%@fedBI=cFZekQ{DV=G;tR#uysRsn{~87PivnK!ItUP5N=vH7CQV-!?j{hfFjc{)Ergx?z6SH-;A)M8l)$!YcQIaS#?D@fJ=U zTiJGalH)2+`ln&A+{o7O1S~SrFqr2GxeSQF8Wy()H3%IYf3rphBcZ{!Gskc>I^hdA zKlG7Fi`gx&>SA=b^0N%<7uh1Otk@{eLCHrrkct5donaUp>t(w9`YK{xH!PeW!heIq zdq_8w-Gc#FolXg3`DDnO@*$ddU|ZP7O~r53A?ya|0?RAEymt0ci{4!d*oj$++G(fik~u4&K8Q-yXX%w6a85))6&+K z&o2zMe7rd6mn(w8RlDhDR#rgJtadUFvb~L{u(A-`{M1b!*-+KhDRg%~D^_1cbHZCZ zNeI%JtjN0&{WZ?A2MImyFsi)9q7Ki^o8$(rlns%etDJln_*6~((T)|p}XA*u4#zV zvBqzC%Ud>btI#sj^)>R|DiB-jDYX7X^%XXgwqIp_gg-^s*n@tW;c zha$Om6q(MFavM&cxh^2Ab&0`TpSM0P9QDh0jF}N{vVOqybrT+#iW7{X${;y_vn)Z& z_4PBM@vG6SM-63Y^<&HdE1XOQS~<#J81rH@@#V)yC*qaNm5b*X+#>Xqn|X|eyD#n- zlsv;=qb0oz48#fcWgAYJ>(Z(Yfaej#2J!gy=K(}q=Ok=7RWAn)4XD2qim$714ErSM zl>aSTqpN%h=Tv}}XIT!cRrX16YGoO?mZuzS=ja@1r_!gu5C74RBn)`3GktbT za{vJ>mm;m<&oThET|FEn5#!N6aC}teN^X(Kn%lM;&1*7Ib|oL{q|SJXI(>?8uWzIY zm_df1vW#9e-g3T15Pqo#zOLG)(t;yh@=Au`bC9Oo!oR+CX=SW|AHon8$G$j2KlIf- zKQQFAzE!?u2r?{}q?2VWP~#=Rbud*w>1wNrC;iGx+JMFq&(QDYE`8sV_YIPIFTG@I zKP#QFOv6Q2eyy8_<>nZe_tX9z3y7WAp6dT(TfGS{_}XD7mD9*z##=S9;U~^J_x#Z} zJn_;9;g3H2U%Hiz$GT@OUD+*hymD#!%LsZqjlVb=)3PU44qy1jFaGp1B>b71Hh4x6kydnudpOnQ?vWe2{V#cDm)(w1zSFX@zH@%{)mQsIt&03A8oy(9 zcRl{~KJ#`P3k4}9v2&$U;HBPn9`ICf6;wal%^Dw+a1#fuw)0Hg*Dc&SR5?odhaDob zT{>i^!uu_5w&{1UO?3xprTC!U?!_XAGKv(wbTKg>(GXtX-@G%6jS z;k)cjY4(1Yp@4RCzEY2id0*#IeB(L=|U!G#njI49!DPub>!M?-R0MQrH@P=ir zAN-1R>e2WyOf2bHtNNPOjHxuW7Rr6m+hq63d0Px-19|qsv||D{R%L^dzt?-TaeW6hrysfPeHZ;| zm1pVaz#GkxT@zs>AzUV$txiSTbY(7#1GGD7ehxRQbmGIshxlcGg@;t$bQy7AVwo?o z?c1_tYj?$yo*82A{pIVsFC6$}chMP-?7sQVALGhQkrxmkOI1o;=@yrcEFa6{aNqJ> z!I9``>+DawcdmTT-qF3{JSyT)L+a{@m2P9VgATjY{n_&`%G)CkZcrZXLg0Epjeqy{ zx4->G47}gUjP5$N((hrQn)jzMAX^2ghBaJDhh9x?H4}zk!Q|d?w(570w&H*eocVp{ zBP>zjL!W$C;jVheymx*cTUASRf&+Aj@YmpiQ+W8&)1};&o`ixSBK_e&V7_U+YrNUu z){E$5veMFfIP?59+Vrm}KijyKNssT0I!GlSyuwMK(G$->U`^QtcnZIV8}MOT8G=)w zg!wW8>+9UZH+tdKMC-#D1>a8aK%CFdQ+Cy}M5xctjXX?8SG`K~xb4iAbUlY3 z(y#v5r-5hKfByP%Of2_6^=bLRv-}pXx{)+_8>8sxH{O+h4Wz^Dgj;#h1rov_zBv74 zl8MV>+6Q~lE6HeZCh@WKo4y#4mu z&+tthCRebQgTd15+j=0Up!!ex{JclN1Cg`X=DX~tERcqI%9aX zSbn;SSEn^CMq%KaCY(4maY!2F*kKHJtZcW?L33w2(W0L`|4~l?%K-P~_5dx=;QHhi zKb3A};Oqg{2Ey-pT5CZju>nllg_WDnUq=}Iw3SfQaeaL%o^k*w{!CBXi>H%5E^RSM z$@Q{c_4{B0Z0L#Wui>rnn%t}1GlBtIa_(Up@1fDcecl5Etb?m*CmdDJ2LSDpW9%M? zSE0y@?m#y>fNxr|dMc9uS$&lS=p$yEhwP%)gope|w}&6(6~3|(W=z}qEe5Y_bhRh% z!7ct99MN9()gH>l@Gy^PuOod~1Ki3_y<2+Pm2mRv-#Q#=6}ca2jNVvcxTc1{bb`Z&(eMVmV<99q60iX6;>@n zuhy<=Fcz*{ccRF1OcXo}7exn7WlC7wa?&8|M@*J^ck)bD<_m25@23nW4_Xlwd#Lo) zp^9FSk{8p8c;HAgKV{$-Zt)Rg*YFB12$UUT)NswyrK3{E+=&g3^BNG+Q|7wzmCpnT zRZ&z%VW;>jKXMG<P90&GRR{7!Uaw@<;m62`ij*HO8(| z9t^(jB3NGsX`Yk@y{eP>59lbzhOY&C@SOyn^A0h<@bKU_+NQb*l7A zzuKYCm(PKdu;s2zoapm0%2GW zNh+Y82XJcOSH{Ys>Rx;mPsNW77X7EqM%ai&KX~NlpS|xvTi57YhCCHs>{0PcUO)LD ztnHn~KHiOO-o#+N4ZKV`geT8Qj0cmY>Faaa?gf6wFTMD(ySDG%+CAwBPZ>S$uRXiF z?n5_rH{E-Ex8w5Z?#U;b9kt@iq|?$}b*}1Zsl^zwjq?vs zk`fs-NuRh;^W%08fwQ^mPzb<0gx;0FlA|AL_ z{(9IDpsj3IAA?0sr{cAxS+|}BGWW6*zs9vl`>xWLJ@{9;(zi27bsk1sX(SF!Wmgj; zl9MM)CRHZjDm>J$(pLx03DkhE)=uGb7%o73^OBEmf2clDXK_gC(+p>TmKFo(AvtQ!v7>rxm(@rCfbTf6DUZSDTQcm2K5pP&LWZ+?BZ zy!ZM2A>)&c!s$?Po}GtHKEU!fIRN)ul6@H%ZCI;8-Y=3WK8-7na(6Pi| ze~iO&N0|g1BfLn*IRTEH*^d>dh~7B1mER`vZ^4jw`GJPq_h_TIDj{%DQo<^i1Nt%- z+nkS5uKKD6c$Hs+6JQxMRP?x_L8KJkflxRdq$gWz_{M9H?*T}&v&%~iByd$$!NiC) z`c;N?l=zDEY@N%=N1oRS%g+^5Wa1dRz~07=%`1y{ADZ59^u*NM**jK_v*9K`4k&?} zkWAGq2lRfWm@qU+&Zk@fAHIz2d^8zl$#%uI@(YHjuij1lq+j^b3tYjr@+zI=iJfS?lx~{uZ`j7tNxh2a27?#4 z!cAS2KlbnlZ|)rW(wDxphtI6KXo=p@4r#kqXTv^Zj|>T0t~3&-UpjcNVy|!I;P9iE zpl!f*`Y6TE9?yD`9)FY1>gm&77dx7ppIbU}_nC)x?bvnne|+eFoV~nA|Af2u|N5u9 z=Uw%b?(D}tYV@oxT-n{Uvik@B>0@8__HHi|qnC}BM^~q4i$87M=<3+mrT2ZR`>7j7 z-8Ncr^#Yz=U2#$O`roHk7w+w5u72v|FkDsgq*;DtJY0RRcx832q3KYDA7gM{W%hnA zO0W&%?(_1Ivw2>(xbq^m;TgE*eJ5N+;kSkDcrTgB!5U_Qi>~ZY*8Cjkp|KmoaoicH zvqWG#HJx|NQBdE#F&yz2N3mBOQ0}5pYA2@}#)_O;U;g7Amwn$;j^26!pQbsn;IrfyXYq7Zeou$A$}>N8Z)sJB;=Lb`lqZ>Xew}r9 z+e~36jkxVrM%3rBW82q3owln3ahB`JT4}jeY}qkPv|DY%)j&lauW^pKe}E!pM{~>b z)ALn+x3IFXVVMuD@r7yO-Ex<9P3%IJf2p(O5uPZ<+Pa%xJ0Qi6JelsVocK1b1Gw9r z4iwhGvWwq>{qy>@ijqIbMyDcc!~DD+*@Kbm%Zcn-Ve*>Y2Vi5MiKouQZGXWmN8dJb z;I6hsba^|#6`41V9R*I?Bd`OrSJ6tdmmm3-ZF^+`2+lJ7^n_dPZSoyl;rIzxj|GTM zXgAz2)XIt;G#u+68qK$S<5lNsBa$Y4b>N#OY{?<@mk!SGP#2^loDPu4xymT~zLhc?V&yv-Vs`wOMXvBW2b^eZbj2Y)fOYi*T_`F~GqweYh_jTh>Z_ zm{ys(>1Vse(O#rGaHrjX&Pq6n_}jnz+uy^pb64k|#-OWMdEXi38xeOq6aAR>SwWockJV&#!1mL9g4fWqIkdw{O_>kKVQYq8k=QGynKoSB^3F z4v(-|gSg~l3>vNCxmKz%2p|~`oONj7q9MN;*y2-ugsA~0{2@yRh{(R>k2Ma;n*rTd z@1&6}R`N@JB?tNPSFfE(f4sc9JT*5px4dC$+v<^(Lv!~o?)N*p@G}~1pWZ&RWqQYv z6MWfod1cx4g@!^ryx#E3d)l$3mn=*!cdE1y0U&LK@8v4;Z=HpYBi_@mwDN(k;Dh-B z+0UIQc%;U19SrI@D8URk%E@{dKgqQ`VQd5W><1y^APf;LLxm0Ahb+fi z$D}2Y_0<=ybV8W$M7v7IRpKH$Z}~Pl{myM)5yZ1iEmOeaP4v>m&?YbS14q0}6fDAY zTn^Dzyzw!~;eU%~5<*zoRbJss+puNn)`uslll00@TBBE!AupO)!k#QMS>1xoIZR(2 z-q2ROOwK#sug^t4GJzN4kp*GpKry|IDS69t@(RBBraO5nd*O#urZ^jPA3Kmo7}U@5 z(IV~P#G|K+?ej~NQx5dlSU+gBp?(a=ez+xff5?Y}K6A1|DF)+4@r+a0(5!uvn| z{@-~1lb(M7JnJ2$Q3$7_`==k6?0~-YgWXSYv~Pnw_A*-P8!za7`FE($Rqx={waL8; zYpQoz4d|R|pW>H>qB1W-3H;>ey(r7hW*k(`%nXS~SzWQCNDjhDcY7RTa0un}Q;Z&v z%MEc3=nU?=`4;aUVE3tr%p$$VT_tskk0M8YMQs&)2lyohd{_31torwGdCeixy!+iP zGq>o&r%I`U`O^U5>+D%}cz>qF_(8uW12JS~nLl*Eh;O^OrEbD*7>IqF{V#O0$KxPxz%{_oZ_ ze?z&vsh)CoTZrtx5YVC02xZNFB!23{1~QRko$IDE3!8c}I7DRbM-nf(H7Nm2}a z&x1r7o-$?kA@UQB=^M{xr#G)0T;4bLhxh&Gvp;(L{o8L_zK;7E{N}+_cizn9%g@^U zf_tB~<(u};Pj6sGqDb?3*zhM^oJCm2dc+~WW|aJesd`O-C-Tu?idT~sd6QJyUfPK? z-|)~4%O0kmA}k%t@K;W`58EeYSD6JQKk}$+dGcnPxC0^y>s58KE>-9C^db-Py~R&F zacVF(x@ItyCjG~PGf)#(cYS1bn7-)2EDx+&hINoum?Rp0C&^*Fcr(9rN*-;aeqz}0 zi%uh(K3M~U^|hZ>pDwzwH>CHjm2EtE#*H*S4W8u4GvBiGQwBQiHLzPr`?3f_{1#Sz z?pPHsJ>4O!liZe(`jKa}#{oTUrhO#r0A3eCg>=z!Fb2=<^7}sZsZX8fV@z$FJD=F! zIe7I>_6+F2S!V8q$6hYmR&3WFakXvOzG^w_oL=S$dSG%x9yk=oJ6Y{ZiNtkzj0XIO zMcF~@?4IpAwog6!QIB5v+~+?#{lSm?_w&E^#ov3w1?OGxEbQ=)0l)V>?|F}tozr%e z{<1fZXWw%5XyIk=7+>)28@eB12WcD3baY>faS?5lx0sUux z_Gdc=^p4x%p2o`g1+36NgQ5+$>r|vNRO!SjEXryp$w^9moOxw<9q4mH+QA#e^TPl) zV0ip!iLY(Ul(M3@zBaSb*(L-2W}X9WA?$2)4^?8MTmG~$8?YucE4 z`kI%kfd1Rw!m_zA+PGo7ys|o)dfR{9cIiL((8k^8ZKSLX-PFaqRu(tRt@2?7w%ZXg zWGu7FsIb2LTOUc9Z=ejlY30f|CJu@#>yktA$Pl*-uW&_AqeHb;JrK7MBe8&NmuLqK zT*|WiNp(fL-^rS>WgfF_n%cZ_!?Dkt@&D}mne+eK>L1LU0d<$L*^3AV-|->jlZ42+os!mo8`_2_XbkAzdzA=e2*)9w8O{Lb5vO*6U?))8Qz}pGWwo?yFSXX5v9o#kf z6_=(zZA_3FoIEx@a~Rl37B*oDJLi`t{rX~7*!Z*j{34|*<>X06d-w5=fBccOhaa@c zfi@OMM;)m7Ibgf+@f+_RKF%s1K5PJr&5nR=qFp}9MO9^qyksIZgNKCRCPI>26WnI(!prhpJFig z{quVmSa+cawdFRfqe|b;{8bL(rj?80G{qjP%nZsqSOwgIa^-u!4jRz*^$DNfshHxc zWHCm>SNM3rqnS}|eC%T%`$Z0QsQerG*(u!8-^8Hr?A4R>8VEm7;U}lOuwj{>uheA% zpz_m+$Nc;*xwp5O?^UMhkmS1}i2_1R_8U(?@u}d-XuNg zfWtli0qZtzTv@*F$jrvqzi->czxe6d&D%D2kj}7;8q^xt&=L=sPSa)^F(x^zMqTn8Pv}Ocm(7rn zgZb8(?TgnR{rH*x^4{lM%Gw>(QFJmg2z-U(NA8ir|GPr5JACvvBILy%4;ck6lS z2@)XB5$%B{P(#pDh8sVP?a8Tm04+OuE}uH$>7N9h)F!F&jNtkrwL=^D8P0dhO$UAs z810gFCW{=)!9I-L!Nc~AJ!ixq?FXtB>1&61hJH5N?%SU8oabEUATDpv0@#%dG-V6cTZPW3u z|N5`bzWn7c-}S^NKJiOD@_YuT;{Q+5|HW%x`&#GbJ`y;s+?B5z&%fuDqZ5Dsx5tnA z-Rrv_9y@L4_$%+7|JwiiqR|(+S0w)dcOOoh0iBikh~M~4Z+g>HQK}cRlD?jRt)=5eh>U;ICN2BaHr`oQ+Be}k$jH7ky)&9695N&J6->&Li7BY2dvv&={>~r+!wy2VP~;}&B6a6U^t{?rx|y%Qw!r8 z@0{KK&wqdWWxsp-^z=n+${)eDd}@(Z2-`guo;5l=J3YIy%qMa1NLKeP-(>Ao3J0^2SQ$6xte}18}2_QyZ5LEZwu| zn)}{x-tCysi$|BPo)~|@imh=B72Waijibj+Jz@0&s~?y;cmJ=P|D$_;=IHE*%QZMi z2e1>T81(^Sb|?n%Qw5cQ21ndFD0dQE(;;P6@)gGVdFe>WUi}}^khVPJvKS$<>7v10TDPaZIXmcI3ul4YT&onIAA2u z%fUDq;kkt^w}&NQIgvvWPw|g@W$S>dK;&Irau+fD5TC&=Ofh(#L0`>x#FYVq-zs`P zi|;_4I5uMgaqSCe`9_6j6(GkJ24{QZ5&rz{xR2TVwCN%X6nC|blcr2PA7ogY;zGio z1H8QTb%i!bQ$Dg>Wi`BuN0K`Lgg|@0c&_bx<=Uv!2l%Ws@YA-i5E+v%JH4LC8fAJV z@*+DfyEp@Ln>G?Wox)V+Jq~3nqbU}0M_AD>v-Lj1*WgyTnRA*&)gu_t@8R1Scft4H z|KJBd_}XVZ>skBX{N^{$ay7X9YoiZg(;=cPp4}&FpR*WBz>j8Q4vQd z)ozs8d)ssA3UCpuc?C>f3@c^kc{~d3iTE)J<}-J%A61^_RoT_)9c*2V=h+do4@e6? zgOEI-tRBkCd+l__Jhzt~on<2()m3#?*2LW!^Tg;pWzG_|-0k4{mAOm;sFUw|#xPJ$ zo;6Z8d2*m%02lFX+{o#_U31LBw`}SbzP#|*nVxjSd`K-ncxTWy_uK_py~`r*HL5r?noW$6}Yv@KY{%CC@?DBnZED;J^(t zsZ$zExeU?)&-4EkX7`&la&+W;d)anTrp+0s_ScWWBtg}3R=~v*(DjqWszPN_&Z6j{oQ-9#>Gt#d! zAq0D!A$u|agX0?|ezog_k6DC4muuHdIhH)+#R5~P1X|eg0z|bx@WcA5olz zY?YtR9Uup1C+}XVyMPTkY8dk?E5FC z#=&z}QaipAns>?zzaCc@Y2egp7ey|(PWU{YXZbsr1SJ0t|L_mDzVL-Fbf@li_r^`7x_-tlMM-&j5h_bjHK`H1eV|Ne!eFLI~*9M9IB zyg#5jEe3QN)>+@`+uruJOK8yVrZGQD<7$vfkzzzzEn_GKVLP10ML+O^JQa@T!kO)E z@~dnpZy7r2WOhsWK`8}ONf}6InLY1jn`fUL#{r!VqY;TxiengO+2N0Jdc#TjWXcLq z%g-c%uou6$wU|ys_F?I?pP&S(c(dpF(n217PdK+RSs%-?1K?|PoD_H-z+3SA-mp6x z%S%hk-QtOZn}7F{7oYjs+t2El4|W&vfl&u@yA`7b`=rx+Z};Hn6MySi8cFPg}9opOb))eAj+Cm>cD zCn4#^I7puXeGBko26SKT2~VVpI~iFf1|qof<~!!IquCV)sK&P+^*<~hDd!s3;@BpW`_@svYbFVaU3b8vM#{SB4c;LU)_+d)avl5ya5 z@~drA4>Dlc9|+qn_5&x(bLd0{Px?k|12pCwcpDuDS>|cJ?H1y;hM|35hY9{RC zA4pFoC8YCRk%?&)h_I6t`?Y%S;CjL^y6s~_2WofUj)+5lNdKo#`3miJ(6?dlZh$8z zFzUFIm^{{jru3ATI%N5gVTHlf#+YwCt#=j;0i6632{Lh!jmgAPXM#ziOof|9Ze4M{pro!k9|pl#HFUsVA=5PkLzCZTQGgqW4o1W9)kJPVnF8*T#O`&|KqIC z9US&C!`(zYhI6PWt-dOP3ZYZMoRM2seHEO3knLxccZCk>*NxmtI)Xx#Oh^)R(otGC z3I^^fMr9{TIPVOV&MrMj_ev{LIupJ)=@{Zkl(-$S?}UxE1fs-t4#NH5kMgHeiicB) z&G#9&)M1y4k~)(BpmBT&%SW>z_Y&bN&8PMtj;ekG0eAZLFDFbb50msd1NW3p@iQY zD5M@SrW!?lev90dOZe3Q8ph>|c+iOeHFUxgH_y6wZLjrrMz1lIj7hWoG?9o8~{Y$)|A3lvJaU|K`FVCvvyQV@Is8eNrl%Z3+~L%p*-!jC@jv?*bqH8vhdHDjV8 z%FM6^PWp}_HNhl!KMLW{ZMc1yfJtkduqKcf0)<;X=^AVYwdBi#^*e>Ly`4bHXAY;~ zJ8<=kLC1-u@8Bz=T-rpRnL`IJB+o(Bei2?QAABE2ZLsV{M$`-X1G$G%r#}4Q z4?n8OJ*!&H*`nHOx#HG*}HKYq0^qE;IRF zEYIM9>G>w?KsU92|9xC3IbJ?-{P@&(X_;sFb2HZ-#y~*Y!*4z;koacUI_l0M-RQ9w z%pQE?1?S&+oOjXbTa*1p0`Qq#24&h@>OefJB>1R~sIhhc$lyf#IVhW_?>3`GT>e)v z^2w7PQCB{hAhdWMJ(y0}ozL-@jr;t-K`3pY;b)+CpowtBBP^ernDEZcuFQ>(%^m5E zo_%;~mb$q>jMN1@rJK|ZPDXQ>xbeQ(xsPA}@k@BwQT}1WCXvqMSs`T+OgmY=ZKtJE z2l~F&@Oq&&{GJ%~vmKKUtcFZlF~Wv*z)S+C_%Hp|KlY3k+!hDJlm7c zkOC)4-U4y*l6G!5@fuz+)lV2mm%l}BjJu0_LH6)0 zn^QN_UK*4MXONpr4CAsIp9Fi`s7>%Oif{iMVnXI)!_*I78(j6U{P1cUqHlgx@dV?* zVSe)r>>~&C4}9PQTfhJNzuy}^4>H*}#)9hyDep}`{^LJ>yp18f9d3L)Y`m+uM25jS z2l%eLr+dX+%m>k~)yIyz^dC+~I^(Pwbd z{fsROi${+hpF4KK0lhCGv?(GhRQx=HD}z{No6awWl00vw^Fub`redUN1bkW~;j~N3 zioqjo=)@6M<1*#-zU+`3q#bU+$ZxJqXsrttv`e=RW{|18_> zS|>AoyHy=qDH8FSsz#?iFk?NfAsK+gI)NFmw>0trp&LkllWp}f`OBlzx$ z1osp)vf_~k^P0{{Bkg6nj&y1GSjP6vV98*%g?2g*L;QK*+*&q0Jb;pwYojNL2;TgH zfm9|&zxR8;_as(f`*^eDOY~jk8ag6beuFm}N1C+!sT`SXBBQ?I#WQ|(ONaI?{oS01WxbYsISD%ZG-ofC0H+H$? zJb|3lYnT=}v^rRq)SU_W0Vd&R(3W1L17`yc@skiYu--#-#6d@}Bk^zwsL{c*#p%@?MxxM;^8(-mhtw$o%cMj-U6TJGvJh zU+7l0ZtJEu&v&oB`Z=R7?cK|E{NA+_`V#PZ|6x6#x0%%frxrJ&G(XCrhdb3gDq%yH ztIlG)R{+Bk&42X6>R_D7>!c}I6`%y$! zhL$x{!kW>`TRLDXzl>W3q)ArTDMhz>!@5a#Sf?8JC2M-}fHA(lV^%$d(csw`Tp3^^ zW?2cbMNR6C`O)H&E?7F)F`$=Oxq$Whd9&ly4=#+RAICjxySA=+n2&pIdH#nzsk&Hb zh2;}DWRxKsqtW;(KFg5wt4nF(+>#Y9{7UnIobd4Pwx`!c&in2^hVD*xNH7MzQ!77_ zNux0gGl0zS7<^@Q>+JTG^JgA?f~##e@GxMaAQMrZvS^852RX>mjV|8$4M+FvI(z?e z7vt5Bs??zs-OEH?M6`}hKyBkPqNWRPovWSfixOEsF$^7Oi1UCByyQI?oaNyJjILT1 z;iR>^@Yxcgw}dUfFPykA)y~Nira5U>q;%I=mhW6SxX&>$_e6C)`<9MdYjMDnNT~CgmiW^vg#{5=!%;@Xc>m_t$XB*KM@)MoP3v#_7em% zBm@7_srm_9{a`%}QFM_le#x5ROEeRjEe`p1yzo@3>@U)jt~+{D*xsWI+Dp8bKFg}y3#LZA zvbK%M{j85d-XKwaJE8O`j z-JQ>TO!ub$MtH9YU!i+g59rh(Gb?6+FJ@b34-NPU2PGStymS=&C1#3? zoQgW-b~{F5UxUNzjaMo4P^nfKIA(cnwENOaFTK}Jp^?Flfur!?6ii?R$#LtRt1(1FI#;HO^lEX@I3@gtY!CywkKJYBsl@UqPG{Oow;!13t~|M6oR z_Q<)mf(JR{FCFbhUt)arWvIXLw8aBEH!m$LYK~h+81mqYIw0D>$=aP)M(^d`&N|F3xP9-M;vZ zo1V4*>|-6L>AuKoZ0B&&{mVdxt-#km*4LaBys*1{_4C~~ZTOb%viT?6cjClCw=h1= zaeu7*x*Y*{%cMg-&C|zOcHY6ReE4!TT&L9uW)&+;9w*^X7%xU1z%P3Gf{6D}VT7dY zEYrtOp!D0nlE`b4q{VnDP|~ssV_Ku_N;U&~OH=nWnEeifgmf)GUo<3)3a%{q3>H}P zAlE85ydkW4Egss#JozB*PrKl0cI)bEdQ@%g8zikP zVXLmzv3ODj7G-|=TFW!M-qtwT32ebs99Ze34&+rojR2WwbPTBXu;qOj_ib#(K6?f! ziy}}Wt0Fq^m3yMnwq7hStmi@WVi$3Bv&tKwP14X89|>jKok9H=JFDAWr87pj?Y`-% ztFD?uKMt|@`!f08$>+77`~yGm10Q?1-X6F2Rg)_I!{6$@`;MjVTe_p&i5)w;4Lhg1 zU;g>OGUEGc$Z>D4!$WzTG8}7j%ABurq6%@%HP_^%ECcQjGvjj0#8bDWoTXeUj@xK8 zz{`0lMBiyE-%dcj#>dm`UaGKxlcpZVAgLeBrJ*Bv(rNV>2v^+ZMQLYHqP%}eClfJ0 z;iZdjx$@;N%8w_%d5&*dbLN{KoI#pF^W;+=Y^T6By5{$8kk+>+c;@F{0?@I(ggr^V z$T_yDO&eC1|KO9G&i%EUX6Clfb>jmpa9P5RUi0*YLvQ`oV|V|T7aqO!#ZN!{CGjU4 zl!hh_`tlt)Q+~-`W{cMtxq>OQ=Esw7e$pssRGw>slrkDf52wsso$1qdPO2?TPFvOOE+Fx%>})#KBT+5CiqS8m*U+4Z)q+7q>w(^9@$!6$Ro#Qv0 zY}1k_pH3>BwB(hume%96Mlc>ds(jN8s~~Kt`tEXG>w->0={;f8A=|!h|30^^oTby! z;v2m`>6CaiaO(H{3K|KMru|W$GeK{(i;p3EvZzb(*YnZR%(wpfo*(d&z}_9<1W+CC zX*E6)uku^IY4uYniS~F^u7a~YDlYB%r9Fs4w(rj&LRy?U;J`{-9ONE|WmoCy0(=hP zhT%fhr`XBF#fXDCHr~mA2PN|cj_Iv_2Ay!!gs-;U$85VFru^>03oo>s@jKu7&N)8# z;&;|(*tzqx-e%HYB!Mfhyt03d)A+-|`Ru&=lT5BgH|_8K;m3Ush@0UqUhQuGrVF~a zhR1hkjPAE%55@OMz2Tt{zE=4R<{S8}{N``|=5v{8J(mIfX0^-m2Mw)4s)P;z`Zla} z@>d-tjospQxZtCZo+90j?*~`>u*Yyh0CfhS^(%b&whJU>9$?oRS;qE?onB(Uo;yHxBI(8j?@A$6qg>x5AeczTh9e>=WXWrtQ z{%DZ+F?vN8B+FFRdDb{cCyC7a4X1TgPx3A`;bGkk5936?A_uwb0QIk2Js4KwMI&je zS9vFuJ>YrBzp|8kWZc4)_JG9-*9PC=YVd*JOO_TiY|Hd7SLp7Pv7)oF`nG*QViVbi zj&&-Y9{_$>UdUU7KX7edWu_xK84R0mo^bX9^CPnsP9G#mTz@hVpKyd}x@j$)C>gXV z&Xe~Z2HlA7WTpDKAjPY^86UP&cqYlRi?`^ka8(X|qW;rCX9#OJuBBHrGAGT6#xkq) zyWF*;J^Y9YBu}z|eYr(I7+lIT%nIGx9^Jj!f?vEBp1!F5BbeQtjsg1+y0FUPs>pVq z{p@GAASWk33+x#9(U-ruckkX^#8-J+DwBd9`0E_FroDsqci-N9=Pirf^H`l9zm#>w zH=f!3yPx}>(LP#fG`=cr_Z4$m%J~%|d<_A!O2b(HFxw~IfqsZ^I&kA5jk`{HRD@DU z!3+n^2+n-tSurr6@A8=q3Q#LTVRWT9(RLH;OdROh%z?PA7hZVb-3;d0{%x>pI)dQ* zRKgnM(gD`-Y8krqJWf&v|DjX$GPRVvXp8U9I`|XTUw9Y{c67ew4WsGVB`k@V5T7w^Y=F!_crgQk%^y~>1qV96if222&N|PUT84jYUD`^3< zp7JbA!j3XU((y0vh0yY%8nBrz|GH)8oa}<1-tl zw;cZAGk@~B|7+Wu4_z|*w9#=6Ss&rci--Bd@HB7YpF8`Q(O=*4vhJ$6f7yNG^k2Pe zZhGUf6}Id#L(Shevf!to2`~7OO^cTtXn~xD@A*B6&|g4;GHB&w5-Sh5 zHD$Ln^Xs{~{0|MHJP+$X4BH-T$U}EDGi6RI)bvYwI}Z)?G6> zi}KOCx}W$nSLd_c#`C-G*1z_w?rk#jlsBjEO&ZjMufPoj_7#ACZ9rc4y4THfkYVu+ zZ+OEVjP{kx#O|PE2diOYM1f7it*^9cGV8x67Jkia1CJukqZIS5w1>(Tq}Fjr4~|9z zWm`dEcVSG%DA9d%uskb*SO(F8ZDmU4RD*cZ2mfjX9dKx^uSY;tVt(oP!r*MT>Lk|D z-+EkOs>3_8=M|$BwmN4Pw{IRFyY>qkckjJ^ZmSE@%|6EDVaC6I%CUWqKIg=NL&v6O z=XkyjQEB>|t4}{DG}wYEo+T3FhaYGC{1K_L4VNMCop-;h zJkNHUk705Us>vmM4)8?NrLFMIkMW)6jr8R)ZP-n%eEY7y{rR6h^Ve?r>0R&KclFkP zckD;D{F|eHck7#u|HzJCJaE;{pZMHGm% zPhOOJ!5SCGxXQfp6G{)2G^MH?JJz`$@U<{DI!LZ^4zH zepC6ap32TEd5?41%VD=cj|7O8g%Gw%aKRnaO`7r~V$ZV?T*ckDivcl>a6Q_H(Q&(#_M2ru zx9x0)f;C@U4MH4wre%VGA0AC}xZ!x6{?yUcqobYEXW#XVtuMIw%AJ4bbKkZ5?_Kx& z9WTD_^3Biv?2ehU4vcyG3Q@44apohroNaJGG|~_3(3Sp4?QGpObY%4d=%9WXG=#yq zYAPcpsjt+P%spdLGJGIh%kyXd2&`ojPTBb7LX(I*3onB{hjaiI*Sb6Ls!m$se>!;m>!THahpthMfg$qbe$MlMqt~;se!wnBFfYz;d(rL6zlYR

                      Wz=y!s&Ilef=5@ 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%0DvTS*zqB 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 z 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%0A99j5Ri7_ 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�P67bnj_~_@Fnjh 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 literal 0 HcmV?d00001 diff --git a/v0.1.4/examples/index.html b/v0.1.4/examples/index.html new file mode 100644 index 0000000..b16d87b --- /dev/null +++ b/v0.1.4/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

                      List of Examples

                      NameprovidesDocumentationComment
                      A Benchmark for Difference of Convexcontains a few simple functions
                      Bézier Curves and Minimizing their Accelerationtools Bézier curves and their acceleration📚
                      Solving Rosenbrock with Difference of ConvexDoC split of Rosenbrock📚uses a Rosenbrock based metric
                      Difference of Convex vs. Frank-Wolfeclosed-form sub solver
                      Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
                      Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
                      Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚
                      The Rayleigh Quotient$f$, $\operatorname{grad}f$ (A/I), $\operatorname{Hess}f$ (A/I), objective📚
                      Total Variation Minimization$f$, $\operatorname{prox}f$ (A/I), objective📚

                      Symbols:

                      • A Allocating variant
                      • I In-place variant
                      • 📚 link to documented functions in the documentation
                      diff --git a/v0.1.4/helpers/error_measures/index.html b/v0.1.4/helpers/error_measures/index.html new file mode 100644 index 0000000..df19832 --- /dev/null +++ b/v0.1.4/helpers/error_measures/index.html @@ -0,0 +1,2 @@ + +Error measures · ManoptExamples.jl
                      diff --git a/v0.1.4/index.html b/v0.1.4/index.html new file mode 100644 index 0000000..0a52ca5 --- /dev/null +++ b/v0.1.4/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

                      Welcome to ManoptExample.jl

                      This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

                      Each example usually consists of

                      • a cost function and additional objects, like the gradient or proximal maps, see objectives
                      • an example explaining how to use these, see examples

                      Helping functions that are used in one or more examples can be found in the section of functions in the menu.

                      diff --git a/v0.1.4/objectives/index.html b/v0.1.4/objectives/index.html new file mode 100644 index 0000000..2d47b20 --- /dev/null +++ b/v0.1.4/objectives/index.html @@ -0,0 +1,187 @@ + +Objectives · ManoptExamples.jl

                      List of Objectives defined for the Examples

                      Rayleigh Quotient on the Sphere

                      See the Rayleigh example (TODO) to see these in use.

                      ManoptExamples.RayleighQuotientCostType
                      RayleighQuotientCost

                      A functor representing the Rayleigh Quotient cost function.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either

                      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                      or extended into the embedding as

                      \[f(x) = x^{\mathrm{T}}Ax, \qquad x ∈ ℝ^n,\]

                      which is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of $𝕊^{n-1}$.

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientCost(A)

                      Create the Rayleigh cost function.

                      See also

                      RayleighQuotientGrad!!, RayleighQuotientHess!!

                      source
                      ManoptExamples.RayleighQuotientGrad!!Type
                      RayleighQuotientGrad!!

                      A functor representing the Rayleigh Quotient gradient function.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either

                      \[\operatorname{grad} f(p) = 2 Ap - 2 (p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1},\]

                      or taking the Euclidean gradient of the Rayleigh quotient on the sphere as

                      \[∇f(x) = 2Ax, \qquad x ∈ ℝ^n.\]

                      For details, see Example 3.62 of [Bou23].

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientGrad!!(A)

                      Create the Rayleigh quotient gradient function.

                      See also

                      RayleighQuotientCost, RayleighQuotientHess!!

                      source
                      ManoptExamples.RayleighQuotientHess!!Type
                      RayleighQuotientHess!!

                      A functor representing the Rayleigh Quotient Hessian.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either

                      \[\operatorname{Hess} f(p)[X] = 2 \bigl(AX - (p^{mathrm{T}}AX)p - (p^{\mathrm{T}}Ap)X\bigr),\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1}\]

                      or taking the Euclidean Hessian of the Rayleigh quotient on the sphere as

                      \[∇^2f(x)[V] = 2AV, \qquad x, V ∈ ℝ^n.\]

                      For details, see Example 5.27 of [Bou23].

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientHess!!(A)

                      Create the Rayleigh quotient Hessian function.

                      See also

                      RayleighQuotientCost, RayleighQuotientGrad!!

                      source

                      Bézier Curves

                      See the Bezier Curves example to see these in use.

                      ManoptExamples.BezierSegmentType
                      BezierSegment

                      A type to capture a Bezier segment. With $n$ points, a Bézier segment of degree $n-1$ is stored. On the Euclidean manifold, this yields a polynomial of degree $n-1$.

                      This type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.

                      Not that this can also be used to represent tangent vectors on the control points of a segment.

                      See also: de_Casteljau.

                      Constructor

                      BezierSegment(pts::AbstractVector)

                      Given an abstract vector of pts generate the corresponding Bézier segment.

                      source
                      ManoptExamples.L2_acceleration_BezierMethod
                      L2_acceleration_Bezier(M,B,pts,λ,d)

                      compute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.

                      \[\frac{λ}{2}\sum_{i=0}^{N} d_{\mathcal M}(d_i, c_B(i))^2+ +\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

                      where for this formula the pts along the curve are equispaced and denoted by $t_i$ and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by $p_i$, and to each $p_i$ corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      See also

                      grad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier

                      source
                      ManoptExamples.acceleration_BezierMethod
                      acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{P},
                      +    degrees::AbstractVector{<:Integer},
                      +    T::AbstractVector{<:AbstractFloat},
                      +) where {P}

                      compute the value of the discrete Acceleration of the composite Bezier curve

                      \[\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

                      where for this formula the pts along the curve are equispaced and denoted by $t_i$, $i=1,…,N$, and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      This acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      See also

                      grad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    T::AbstractVector,
                      +    X::AbstractVector,
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector,
                      +    X::AbstractVector,
                      +)

                      Evaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment},
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X
                      +)

                      evaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    b::BezierSegment,
                      +    t::AbstractVector,
                      +    X::AbstractVector,
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::BezierSegment,
                      +    b::BezierSegment,
                      +    t::AbstractVector,
                      +    X::AbstractVector,
                      +)

                      evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

                      See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::BezierSegment,
                      +    b::BezierSegment,
                      +    t,
                      +    η,
                      +)

                      evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t$∈[0,1]$ on the curve and a tangent vector $η∈T_{β(t)}\mathcal M$. This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.de_CasteljauMethod
                      de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function

                      return the Bézier curve $β(⋅;b_0,…,b_n): [0,1] → \mathcal M$ defined by the control points $b_0,…,b_n∈\mathcal M$, $n∈\mathbb N$, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let $γ_{a,b}(t)$ denote the shortest geodesic connecting $a,b∈\mathcal M$. Then the curve is defined by the recursion

                      \[\begin{aligned} + β(t;b_0,b_1) &= \gamma_{b_0,b_1}(t)\\ + β(t;b_0,…,b_n) &= \gamma_{β(t;b_0,…,b_{n-1}), β(t;b_1,…,b_n)}(t), +\end{aligned}\]

                      and P is the type of a point on the Manifold M.

                      de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function

                      Given a vector of Bézier segments, i.e. a vector of control points $B=\bigl( (b_{0,0},…,b_{n_0,0}),…,(b_{0,m},… b_{n_m,m}) \bigr)$, where the different segments might be of different degree(s) $n_0,…,n_m$. The resulting composite Bézier curve $c_B:[0,m] → \mathcal M$ consists of $m$ segments which are Bézier curves.

                      \[c_B(t) := + \begin{cases} + β(t; b_{0,0},…,b_{n_0,0}) & \text{ if } t ∈[0,1]\\ + β(t-i; b_{0,i},…,b_{n_i,i}) & \text{ if } + t∈(i,i+1], \quad i∈\{1,…,m-1\}. + \end{cases}\]

                      de_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)
                      +de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)
                      +de_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector
                      +de_Casteljau(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +) -> AbstractVector

                      Evaluate the Bézier curve at time t or at times t in T.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +    Ξ::AbstractVector{<:BezierSegment}
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Θ::AbstractVector{<:BezierSegment}
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +    Ξ::AbstractVector{<:BezierSegment}
                      +)

                      evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in $[0,N]$, and each depending the corresponding segment(s). Here, $N$ is the length of B. For the mutating variant the result is computed in Θ.

                      See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X::AbstractVector{<:BezierSegment}
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment}
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X::AbstractVector{<:BezierSegment}
                      +)

                      evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,N]$, which depends only on the corresponding segment. Here, $N$ is the length of B. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    b::BezierSegment,
                      +    T::AbstractVector,
                      +    X::BezierSegment,
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y,
                      +    b::BezierSegment,
                      +    T::AbstractVector,
                      +    X::BezierSegment,
                      +)

                      evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in $t∈[0,1]$. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y,
                      +    b::BezierSegment,
                      +    t,
                      +    X::BezierSegment
                      +)

                      evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,1]$. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.get_Bezier_degreeMethod
                      get_Bezier_degree(M::AbstractManifold, b::BezierSegment)

                      return the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.

                      source
                      ManoptExamples.get_Bezier_degreesMethod
                      get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})

                      return the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.

                      source
                      ManoptExamples.get_Bezier_inner_pointsMethod
                      get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )
                      +get_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)

                      returns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned

                      source
                      ManoptExamples.get_Bezier_junction_tangent_vectorsMethod
                      get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
                      +get_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)

                      returns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.

                      source
                      ManoptExamples.get_Bezier_junctionsFunction
                      get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
                      +get_Bezier_junctions(M::AbstractManifold, b::BezierSegment)

                      returns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.

                      source
                      ManoptExamples.get_Bezier_pointsFunction
                      get_Bezier_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    reduce::Symbol=:default
                      +)
                      +get_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)

                      returns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.

                      This method reduces the points depending on the optional reduce symbol

                      • :default – no reduction is performed
                      • :continuous – for a continuous function, the junction points are doubled at $b_{0,i}=b_{n_{i-1},i-1}$, so only $b_{0,i}$ is in the vector.
                      • :differentiable – for a differentiable function additionally $\log_{b_{0,i}}b_{1,i} = -\log_{b_{n_{i-1},i-1}}b_{n_{i-1}-1,i-1}$ holds. hence $b_{n_{i-1}-1,i-1}$ is omitted.

                      If only one segment is given, all points of b – i.e. b.pts is returned.

                      source
                      ManoptExamples.get_Bezier_segmentsMethod
                      get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])

                      returns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.

                      There are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let $c=(c_1,…,c_k)$ and $d=(d_1,…,d_m)$, where $m$ denotes the number of components the composite Bézier curve consists of. Then

                      • :default$k = m + \sum_{i=1}^m d_i$ since each component requires one point more than its degree. The points are then ordered in tuples, i.e.

                        \[B = \bigl[ [c_1,…,c_{d_1+1}], (c_{d_1+2},…,c_{d_1+d_2+2}],…, [c_{k-m+1+d_m},…,c_{k}] \bigr]\]

                      • :continuous$k = 1+ \sum_{i=1}{m} d_i$, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.

                        \[B = \bigl[ [c_1,…,c_{d_1+1}], [c_{d_1+1},…,c_{d_1+d_2+1}],…, [c_{k-1+d_m},…,b_{k}) \bigr]\]

                      • :differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence $k = 2 - m + \sum_{i=1}{m} d_i$ and at a junction point $b_n$ with its given prior point $c_{n-1}$, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as $b = \exp_{c_n}(-\log_{c_n} c_{n-1})$ such that the assumed differentiability holds
                      source
                      ManoptExamples.grad_L2_acceleration_BezierMethod
                      grad_L2_acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{P},
                      +    degrees::AbstractVector{<:Integer},
                      +    T::AbstractVector,
                      +    λ,
                      +    d::AbstractVector{P}
                      +) where {P}

                      compute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight $λ$ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in $[0,N]$), where $N$ is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting $λ=0$ yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.

                      Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      See also

                      grad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.

                      source
                      ManoptExamples.grad_acceleration_BezierMethod
                      grad_acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector,
                      +    degrees::AbstractVector{<:Integer}
                      +    T::AbstractVector
                      +)

                      compute the gradient of the discretized acceleration of a (composite) Bézier curve $c_B(t)$ on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in $[0,N]$, where $N$ is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set $λ=0$ therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.

                      See also

                      acceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.

                      source

                      Riemannian Mean

                      See the Riemannian mean example to see these in use.

                      ManoptExamples.RiemannianMeanCostType
                      RiemannianMeanCost{P}

                      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                      \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

                      where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

                      Constructor

                      RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

                      Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

                      See also

                      RiemannianMeanGradient!!, Riemannian_mean_objective

                      source
                      ManoptExamples.RiemannianMeanGradient!!Type
                      RiemannianMeanGradient!!{P} where P

                      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                      \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

                      where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

                      This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

                      Constructors

                      RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

                      Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

                      RiemannianMeanGradient!!(
                      +    M::AbstractManifold,
                      +    data::AbstractVector{P};
                      +    initial_vector::T=zero_vector(M, first(data)),
                      +) where {P,T}

                      Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

                      See also

                      RiemannianMeanCost, Riemannian_mean_objective

                      source
                      ManoptExamples.Riemannian_mean_objectiveMethod
                      Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
                      +Riemannian_mean_objective(M, data;
                      +initial_vector=zero_vector(M, first(data)),
                      +evaluation=AllocatingEvaluton()
                      +)

                      Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

                      See also

                      RiemannianMeanCost, RiemannianMeanGradient!!

                      Note

                      The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

                      source

                      Robust PCA

                      See the Robust PCA example to see these in use.

                      ManoptExamples.RobustPCACostType
                      RobustPCACost{D,F}

                      A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

                      \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

                      This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

                      \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

                      Note that this is a mutable struct so you can adapt the $ε$ later on.

                      Constructor

                      RobustPCACost(data::AbstractMatrix, ε=1.0)
                      +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

                      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

                      source
                      ManoptExamples.RobustPCAGrad!!Type
                      RobustPCAGrad!!{D,F}

                      A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

                      Note that this is a mutable struct so you can adapt the $ε$ later on.

                      Constructor

                      RobustPCAGrad!!(data, ε=1.0)
                      +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

                      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

                      source
                      ManoptExamples.robust_PCA_objectiveFunction
                      robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
                      +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

                      Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

                      See also

                      RobustPCACost, RobustPCAGrad!!

                      Note

                      Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.

                      source

                      Rosenbrock Function

                      See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.

                      ManoptExamples.RosenbrockCostType
                      RosenbrockCost

                      Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                      \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

                      which means that for the 2D case, the manifold $\mathcal M$ is ignored.

                      See also 📖 Rosenbrock (with slightly different parameter naming).

                      Constructor

                      f = Rosenbrock(a,b)

                      generates the struct/function of the Rosenbrock cost.

                      source
                      ManoptExamples.RosenbrockGradient!!Type
                      RosenbrockGradient

                      Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                      \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

                      i.e. also here the manifold is ignored.

                      Constructor

                      RosenbrockGradient(a,b)

                      Functors

                      grad_f!!(M,p)
                      +grad_f!!(M, X, p)

                      evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

                      source
                      ManoptExamples.RosenbrockMetricType
                      RosenbrockMetric <: AbstractMetric

                      A metric related to the Rosenbrock problem, where the metric at a point $p∈\mathbb R^2$ is given by

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_{1}^2 & -2p_{1} \\ + -2p_{1} & 1 +\end{pmatrix},\]

                      where the $\mathrm{Rb}$ stands for Rosenbrock

                      source
                      Base.expMethod
                      q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)
                      +exp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)

                      Compute the exponential map with respect to the RosenbrockMetric.

                      \[ q = \begin{pmatrix} p_1 + X_1 \\ p_2+X_2+X_1^2\end{pmatrix}\]

                      source
                      Base.logMethod
                      X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)
                      +log!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)

                      Compute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any $j ∈ \{1,…,m\}$

                      \[X = \begin{pmatrix} + q_1 - p_1 \\ + q_2 - p_2 + (q_1 - p_1)^2 +\end{pmatrix}\]

                      source
                      Manifolds.inverse_local_metricMethod
                      inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                      Return the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                      \[G^{-1}_p = +\begin{pmatrix} + 1 & 2p_1\\ + 2p_1 & 1+4p_1^2 \\ +\end{pmatrix}.\]

                      source
                      Manifolds.local_metricMethod
                      local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                      Return the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                      \[G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix}\]

                      source
                      ManifoldsBase.change_representerMethod
                      Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)
                      +change_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)

                      Given the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.

                      this function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.

                      source
                      ManifoldsBase.innerMethod
                      inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)

                      Compute the inner product on $\mathbb R^2$ with respect to the RosenbrockMetric, i.e. for $X,Y \in T_p\mathcal M$ we have

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1\\ + -2p_1 & 1 +\end{pmatrix},\]

                      source

                      Total Variation

                      See the Total Variation example to see these in use.

                      ManoptExamples.Intrinsic_infimal_convolution_TV12Method
                      Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

                      Compute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads

                      \[E(u,v) = + \frac{1}{2}\sum_{i ∈ \mathcal G} + d_{\mathcal M}\bigl(g(\frac{1}{2},v_i,w_i),f_i\bigr) + +\alpha\bigl( β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) \bigr).\]

                      for more details see [BFPS17, BFPS18].

                      See also

                      Total_Variation, second_order_Total_Variation

                      source
                      ManoptExamples.Total_VariationFunction
                      Total_Variation(M,x [,p=2,q=1])

                      Compute the $\operatorname{TV}^p$ functional for data xon the PowerManifold manifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i$ denote the forward neighbors, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I_i = \{i+e_j, j=1,…,k\}\cap \mathcal G$. The formula reads

                      \[E^q(x) = \sum_{i ∈ \mathcal G} + \bigl( \sum_{j ∈ \mathcal I_i} d^p_{\mathcal M}(x_i,x_j) \bigr)^{q/p},\]

                      see [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.

                      See also

                      grad_Total_Variation, prox_Total_Variation, second_order_Total_Variation

                      source
                      ManoptExamples.adjoint_differential_forward_logsMethod
                      Y = adjoint_differential_forward_logs(M, p, X)
                      +adjoint_differential_forward_logs!(M, Y, p, X)

                      Compute the adjoint differential of forward_logs $F$ occurring, in the power manifold array p, the differential of the function

                      $F_i(p) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j$

                      where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$ Let $n$ be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold $\mathcal M' = \mathcal M^n$. The adjoint differential can be computed in place of Y.

                      Input

                      • M – a PowerManifold manifold
                      • p – an array of points on a manifold
                      • X – a tangent vector to from the n-fold power of p, where n is the ndims of p

                      Output

                      Y – resulting tangent vector in $T_p\mathcal M$ representing the adjoint differentials of the logs.

                      source
                      ManoptExamples.differential_forward_logsMethod
                      Y = differential_forward_logs(M, p, X)
                      +differential_forward_logs!(M, Y, p, X)

                      compute the differential of forward_logs $F$ on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function

                      \[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j, \quad i ∈ \mathcal G,\]

                      where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

                      Input

                      • M – a PowerManifold manifold
                      • p – a point.
                      • X – a tangent vector.

                      Output

                      • Y – resulting tangent vector in $T_x\mathcal N$ representing the differentials of the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.
                      source
                      ManoptExamples.forward_logsMethod
                      Y = forward_logs(M,x)
                      +forward_logs!(M, Y, x)

                      compute the forward logs $F$ (generalizing forward differences) occurring, in the power manifold array, the function

                      \[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{x_i} x_j,\quad i ∈ \mathcal G,\]

                      where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$. This can also be done in place of ξ.

                      Input

                      • M – a PowerManifold manifold
                      • x – a point.

                      Output

                      • Y – resulting tangent vector in $T_x\mathcal M$ representing the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.
                      source
                      ManoptExamples.grad_Total_VariationFunction
                      X = grad_Total_Variation(M, λ, x[, p=1])
                      +grad_Total_Variation!(M, X, λ, x[, p=1])

                      Compute the (sub)gradient $\partial F$ of all forward differences occurring, in the power manifold array, i.e. of the function

                      \[F(x) = \sum_{i}\sum_{j ∈ \mathcal I_i} d^p(x_i,x_j)\]

                      where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

                      Input

                      • M – a PowerManifold manifold
                      • x – a point.

                      Output

                      • X – resulting tangent vector in $T_x\mathcal M$. The computation can also be done in place.
                      source
                      ManoptExamples.grad_Total_VariationMethod
                      X = grad_Total_Variation(M, (x,y)[, p=1])
                      +grad_Total_Variation!(M, X, (x,y)[, p=1])

                      compute the (sub) gradient of $\frac{1}{p}d^p_{\mathcal M}(x,y)$ with respect to both $x$ and $y$ (in place of X and Y).

                      source
                      ManoptExamples.grad_intrinsic_infimal_convolution_TV12Method
                      grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

                      compute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some $f ∈ \mathcal M$ on a PowerManifold manifold $\mathcal M$ this function computes the (sub)gradient of

                      \[E(u,v) = +\frac{1}{2}\sum_{i ∈ \mathcal G} d_{\mathcal M}(g(\frac{1}{2},v_i,w_i),f_i) ++ \alpha +\bigl( +β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) +\bigr),\]

                      where both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.

                      source
                      ManoptExamples.grad_second_order_Total_VariationFunction
                      Y = grad_second_order_Total_Variation(M, q[, p=1])
                      +grad_second_order_Total_Variation!(M, Y, q[, p=1])

                      computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1, q_2, q_3)$ with respect to all three components of $q∈\mathcal M^3$, where $d_2$ denotes the second order absolute difference using the mid point model, i.e. let

                      \[\mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};q_1,q_3) \text{ for some geodesic }g\bigr\}\]

                      denote the mid points between $q_1$ and $q_3$ on the manifold $\mathcal M$. Then the absolute second order difference is defined as

                      \[d_2(q_1,q_2,q_3) = \min_{c ∈ \mathcal C_{q_1,q_3}} d(c, q_2).\]

                      While the (sub)gradient with respect to $q_2$ is easy, the other two require the evaluation of an adjoint_Jacobi_field.

                      The derivation of this gradient can be found in [BBSW16].

                      source
                      ManoptExamples.grad_second_order_Total_VariationFunction
                      grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])

                      computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1,q_2,q_3)$ with respect to all $q_1,q_2,q_3$ occurring along any array dimension in the point q, where M is the corresponding PowerManifold.

                      source
                      ManoptExamples.project_collaborative_TVFunction
                      project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])
                      +project_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])

                      compute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function

                      \[F^q(x) = \sum_{i∈\mathcal G} + \Bigl( \sum_{j∈\mathcal I_i} + \sum_{k=1}^d \lVert X_{i,j}\rVert_x^p\Bigr)^\frac{q}{p},\]

                      where $\mathcal G$ is the set of indices for $x∈\mathcal M$ and $\mathcal I_i$ is the set of its forward neighbors. The computation can also be done in place of Θ.

                      This is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.

                      source
                      ManoptExamples.prox_Total_VariationFunction
                      ξ = prox_Total_Variation(M,λ,x [,p=1])

                      compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all forward differences occurring in the power manifold array, i.e. $\varphi(xi,xj) = d_{\mathcal M}^p(xi,xj)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • x – a point.

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place
                      source
                      ManoptExamples.prox_Total_VariationMethod
                      [y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])
                      +prox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])

                      Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $φ(x,y) = d_{\mathcal M}^p(x,y)$ with parameter λ. A derivation of this closed form solution is given in see [WDS14].

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • (x1,x2) – a tuple of two points,

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • (y1,y2) – resulting tuple of points of the $\operatorname{prox}_{λφ}($(x1,x2)$)$. The result can also be computed in place.
                      source
                      ManoptExamples.prox_parallel_TVFunction
                      y = prox_parallel_TV(M, λ, x [,p=1])
                      +prox_parallel_TV!(M, y, λ, x [,p=1])

                      compute the proximal maps $\operatorname{prox}_{λφ}$ of all forward differences occurring in the power manifold array, i.e. $φ(x_i,x_j) = d_{\mathcal M}^p(x_i,x_j)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

                      Input

                      • M – a PowerManifold manifold
                      • λ – a real value, parameter of the proximal map
                      • x – a point

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.

                      See also prox_Total_Variation

                      source
                      ManoptExamples.prox_second_order_Total_VariationMethod
                      (y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)
                      +prox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)

                      Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $\varphi(x_1,x_2,x_3) = d_{\mathcal M}^p(c(x_1,x_3),x_2)$ with parameter λ>0, where $c(x,z)$ denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.

                      Note that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.

                      Input

                      • M – a manifold

                      • λ – a real value, parameter of the proximal map

                      • (x1,x2,x3) – a tuple of three points

                      • p – (1) exponent of the distance of the TV term

                      Optional

                      kwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)

                      Output

                      • (y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.
                      source
                      ManoptExamples.prox_second_order_Total_VariationMethod
                      y = prox_second_order_Total_Variation(M, λ, x[, p=1])
                      +prox_second_order_Total_Variation!(M, y, λ, x[, p=1])

                      compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all centered second order differences occurring in the power manifold array, i.e. $\varphi(x_k,x_i,x_j) = d_2(x_k,x_i.x_j)$, where $k,j$ are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • x – a points.

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.
                      source
                      ManoptExamples.second_order_Total_VariationFunction
                      second_order_Total_Variation(M,x [,p=1])

                      compute the $\operatorname{TV}_2^p$ functional for data x on the PowerManifold manifoldmanifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i^{\pm}$ denote the forward and backward neighbors, respectively, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I^\pm_i = \{i\pm e_j, j=1,…,k\}\cap \mathcal I$. The formula then reads

                      \[E(x) = \sum_{i ∈ \mathcal I,\ j_1 ∈ \mathcal I^+_i,\ j_2 ∈ \mathcal I^-_i} +d^p_{\mathcal M}(c_i(x_{j_1},x_{j_2}), x_i),\]

                      where $c_i(⋅,⋅)$ denotes the mid point between its two arguments that is nearest to $x_i$, see [BBSW16] for a derivation.

                      In long function names, this might be shortened to TV2.

                      See also

                      grad_second_order_Total_Variation, prox_second_order_Total_Variation

                      source
                      ManoptExamples.second_order_Total_VariationMethod
                      second_order_Total_Variation(M,(x1,x2,x3) [,p=1])

                      Compute the $\operatorname{TV}_2^p$ functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by

                      \[ \mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};x_1,x_3) \text{ for some geodesic }g\bigr\}\]

                      the set of mid points between $x_1$ and $x_3$. Then the function reads

                      \[d_2^p(x_1,x_2,x_3) = \min_{c ∈ \mathcal C} d_{\mathcal M}(c,x_2),\]

                      see [BBSW16] for a derivation. In long function names, this might be shortened to TV2.

                      See also

                      grad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation

                      source

                      Literature

                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BFPS18]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
                      [BFPS17]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [Bou23]
                      [Cas59]
                      P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
                      [Cas63]
                      P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
                      [DMSC16]
                      J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.4/references.bib b/v0.1.4/references.bib new file mode 100644 index 0000000..6bb4d08 --- /dev/null +++ b/v0.1.4/references.bib @@ -0,0 +1,226 @@ +% +% --- A +% +@article{AxenBaranBergmannRzecki:2023, + AUTHOR = {Axen, Seth D. and Baran, Mateusz and Bergmann, Ronny and Rzecki, Krzysztof}, + DOI = {10.1145/3618296}, + EPRINT = {2021.08777}, + EPRINTTYPE = {arXiv}, + ISSN = {1557-7295}, + JOURNAL = {ACM Transactions on Mathematical Software}, + TITLE = {Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds}, + YEAR = {2023} +} + +% +% --- B +% +@article{Bacak:2014, + AUTHOR = {Bačák, M.}, + DOI = {10.1137/140953393}, + EPRINT = {1210.2145}, + EPRINTTYPE = {arXiv}, + JOURNAL = {SIAM Journal on Optimization}, + NUMBER = {3}, + PAGES = {1542--1566}, + TITLE = {Computing medians and means in Hadamard spaces}, + VOLUME = {24}, + YEAR = {2014} +} + +@article{BacakBergmannSteidlWeinmann:2016, + AUTHOR = {Bačák, Miroslav and Bergmann, Ronny and Steidl, Gabriele and Weinmann, Andreas}, + EPRINT = {1506.02409}, + EPRINTTYPE = {arXiv}, + YEAR = {2016}, + DOI = {10.1137/15M101988X}, + JOURNAL = {SIAM Journal on Scientific Computing}, + NUMBER = {1}, + PAGES = {A567--A597}, + TITLE = {A second order non-smooth variational model for restoring manifold-valued images}, + VOLUME = {38}, +} + +@article{BergmannFerreiraSantosSouza:2023, + AUTHOR = {Bergmann, R. and Ferreira, O. P. and Santos, E. M. and Souza, J. C. O.}, + EPRINT = {2112.05250}, + EPRINTTYPE = {arXiv}, + JOURNAL = {Preprint}, + TITLE = {The difference of convex algorithm on Hadamard manifolds}, + YEAR = {2023} +} + +@incollection{BergmannFitschenPerschSteidl:2017, + AUTHOR = {Bergmann, Ronny and Fitschen, Jan Henrik and Persch, Johannes and Steidl, Gabriele}, + EDITOR = {Lauze, François and Dong, Yiqiu and Dahl, Anders Bjorholm}, + LOCATION = {Cham}, + PUBLISHER = {Springer International Publishing}, + BOOKTITLE = {Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4--8, 2017, Proceedings}, + YEAR = {2017}, + DOI = {10.1007/978-3-319-58771-4_36}, + PAGES = {447--459}, + TITLE = {Infimal convolution coupling of first and second order differences on manifold-valued images} +} + +@article{BergmannFitschenPerschSteidl:2018, + AUTHOR = {Bergmann, Ronny and Fitschen, Jan Henrik and Persch, Johannes and Steidl, Gabriele}, + YEAR = {2018}, + DOI = {10.1007/s10851-018-0840-y}, + EPRINT = {1709.01343}, + EPRINTTYPE = {arXiv}, + JOURNAL = {Journal of Mathematical Imaging and Vision}, + NUMBER = {9}, + PAGES = {1459--1481}, + TITLE = {Priors with coupled first and second order differences for manifold-valued image processing}, + VOLUME = {60} +} + +@article{BergmannGousenbourger:2018, + AUTHOR = {Bergmann, Ronny and Gousenbourger, Pierre-Yves}, + DOI = {10.3389/fams.2018.00059}, + EPRINT = {1807.10090}, + EPRINTTYPE = {arXiv}, + JOURNAL = {Frontiers in Applied Mathematics and Statistics}, + TITLE = {A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve}, + VOLUME = {4}, + YEAR = {2018} +} + +@article{BergmannLausSteidlWeinmann:2014:1, + AUTHOR = {Bergmann, Ronny and Laus, Friederike and Steidl, Gabriele and Weinmann, Andreas}, + EPRINT = {1405.5349}, + EPRINTTYPE = {arXiv}, + DOI = {10.1137/140969993}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {4}, + PAGES = {2916--2953}, + TITLE = {Second order differences of cyclic data and applications in variational denoising}, + VOLUME = {7}, + YEAR = {2014} +} + +@article{BergmannPerschSteidl:2016, + AUTHOR = {Bergmann, Ronny and Persch, Johannes and Steidl, Gabriele}, + DOI = {10.1137/15M1052858}, + EPRINT = {1512.02814}, + EPRINTTYPE = {arXiv}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {4}, + PAGES = {901--937}, + TITLE = {A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds}, + VOLUME = {9}, + YEAR = {2016}, +} + +@book{Boumal:2023, + TITLE = {An Introduction to Optimization on Smooth Manifolds}, + AUTHOR = {Boumal, Nicolas}, + YEAR = {2023}, + MONTH = mar, + EDITION = {First}, + PUBLISHER = {Cambridge University Press}, + DOI = {10.1017/9781009166164}, + ABSTRACT = {Optimization on Riemannian manifolds-the result of smooth geometry and optimization merging into one elegant modern framework-spans many areas of science and engineering, including machine learning, computer vision, signal processing, dynamical systems and scientific computing. This text introduces the differential geometry and Riemannian geometry concepts that will help students and researchers in applied mathematics, computer science and engineering gain a firm mathematical grounding to use these tools confidently in their research. Its charts-last approach will prove more intuitive from an optimizer's viewpoint, and all definitions and theorems are motivated to build time-tested optimization algorithms. Starting from first principles, the text goes on to cover current research on topics including worst-case complexity and geodesic convexity. Readers will appreciate the tricks of the trade for conducting research and for numerical implementations sprinkled throughout the book.}, + ISBN = {978-1-00-916616-4}, + URL = {https://www.nicolasboumal.net/#book} +} + +@article{PopielNoakes:2007, + DOI = {10.1016/j.jat.2007.03.002}, + YEAR = {2007}, + MONTH = oct, + PUBLISHER = {Elsevier}, + VOLUME = {148}, + NUMBER = {2}, + PAGES = {111--127}, + AUTHOR = {Tomasz Popiel and Lyle Noakes}, + TITLE = {Bézier curves and $C^2$ interpolation in Riemannian manifolds}, + JOURNAL = {Journal of Approximation Theory} +} + +@techreport{deCasteljau:1959, + AUTHOR = {de Casteljau, Paul}, + INSTITUTION = {Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris.}, + TITLE = {Outillage methodes calcul}, + YEAR = {1959} +} + +@techreport{deCasteljau:1963, + AUTHOR = {de Casteljau, Paul}, + INSTITUTION = {Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris.}, + TITLE = {Courbes et surfaces à pôles}, + YEAR = {1963} +} + +@article{DuranMoelleSbertCremers:2016, + AUTHOR = {Duran, J. and Moeller, M. and Sbert, C. and Cremers, D.}, + DOI = {10.1137/15M102873X}, + EPRINT = {1508.01308}, + EPRINTTYPE = {arXiv}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {1}, + PAGES = {116-151}, + TITLE = {Collaborative Total Variation: A General Framework for Vectorial TV Models}, + VOLUME = {9}, + YEAR = {2016}, +} + +@article{LausNikolovaPerschSteidl:2017, + AUTHOR = {Laus, F. and Nikolova, M. and Persch, J. and Steidl, G.}, + YEAR = {2017}, + DOI = {10.1137/16M1087114}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {1}, + PAGES = {416--448}, + TITLE = {A nonlocal denoising algorithm for manifold-valued images using second order statistics}, + VOLUME = {10} +} + +@article{RudinOsherFatemi:1992, + AUTHOR = {Rudin, Leonid I. and Osher, Stanley and Fatemi, Emad}, + DOI = {10.1016/0167-2789(92)90242-f}, + ISSN = {0167-2789}, + JOURNAL = {Physica D: Nonlinear Phenomena}, + NUMBER = {1–4}, + PAGES = {259–268}, + TITLE = {Nonlinear total variation based noise removal algorithms}, + VOLUME = {60}, + YEAR = {1992} +} + +@article{SouzaOliveira:2015, + AUTHOR = {J. C. O. Souza and P. R. Oliveira}, + DOI = {10.1007/s10898-015-0282-7}, + JOURNAL = {Journal of Global Optimization}, + MONTH = feb, + NUMBER = {4}, + PAGES = {797--810}, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {63}, + TITLE = {A proximal point algorithm for DC fuctions on Hadamard manifolds}, + YEAR = {2015} +} + +@article{WeberSra:2022, + DOI = {10.1007/s10107-022-01840-5}, + YEAR = {2022}, + MONTH = jul, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {199}, + NUMBER = {1-2}, + PAGES = {525--556}, + AUTHOR = {Melanie Weber and Suvrit Sra}, + TITLE = {Riemannian Optimization via Frank-Wolfe Methods}, + JOURNAL = {Mathematical Programming} +} + +@article{WeinmannDemaretStorath:2014, + AUTHOR = {Weinmann, Andreas and Demaret, Laurent and Storath, Martin}, + DOI = {10.1137/130951075}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {4}, + PAGES = {2226--2257}, + TITLE = {Total variation regularization for manifold-valued data}, + VOLUME = {7}, + YEAR = {2014} +} diff --git a/v0.1.4/references/index.html b/v0.1.4/references/index.html new file mode 100644 index 0000000..3679e7e --- /dev/null +++ b/v0.1.4/references/index.html @@ -0,0 +1,2 @@ + +References · ManoptExamples.jl

                      Literature

                      [ABBR23]
                      S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
                      [Bac14]
                      M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [BFPS18]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
                      [BFPS17]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [BPS16]
                      R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
                      [Bou23]
                      [Cas59]
                      P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
                      [Cas63]
                      P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
                      [DMSC16]
                      J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
                      [LNPS17]
                      F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      [ROF92]
                      L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
                      [SO15]
                      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                      [WS22]
                      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.4/search_index.js b/v0.1.4/search_index.js new file mode 100644 index 0000000..b8dc3b5 --- /dev/null +++ b/v0.1.4/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Difference-of-Convex-Frank-Wolfe/#A-comparison-of-the-Difference-of-Convex-and-Frank-Wolfe-Algorithm","page":"Frank Wolfe comparison","title":"A comparison of the Difference of Convex and Frank Wolfe Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Ronny Bergmann 2023-11-06","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Introduction","page":"Frank Wolfe comparison","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing ManifoldsBase, Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices mathcal P(n) with the affine invariant metric. Let q_1ldotsq_m in mathcal P(n) be a set of points and mu_1ldotsmu_m be a set of weights, such that they sum to one. We consider then","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmax_pinmathcal C h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"h(p) =\nsum_j=1^m mu_j d^2(pq_i)\nquad text where \nd^2(pq_i) = operatornametrbigl(\n log^2(p^-frac12q_jp^-frac12)\nbig)\nqquadtextandqquad\nmathcal C = pin mathcal M bar Lpreceq p preceq bar U ","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"for a lower bound L and an upper bound U for the matrices in the positive definite sense A preceq B Leftrightarrow (B-A) is positive semi-definite","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"When every one of the weights mu_1 ldots mu_m are equal, this function h is known as the of the set q_1 dots q_m.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And for our example we set","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Random.seed!(42)\nn = 20\nm = 100\nM = SymmetricPositiveDefinite(n)\nq = [rand(M) for _ in 1:m];\nw = rand(m)\nw ./=sum(w)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use as lower and upper bound the arithmetic and geometric mean L and U, respectively.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )\nU = sum( wi * qi for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p0 = (L+U)/2","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can check that it is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Common-Functions","page":"Frank Wolfe comparison","title":"Common Functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Given p in mathcal M, X in T_pmathcal M on the symmetric positive definite matrices M, this method computes the closed form solution to","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_qin mathcal C langle X log_p qrangle\n = operatorname*argmin_qin mathcal C operatornametr(Slog(YqY))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"where mathcal C = q L preceq q preceq U , S = p^-12Xp^-12, and Y=p^-12.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The solution is given by Z=X^-1Qbigl( P^mathrmT-operatornamesgn(D)_+P+hatLbigr)Q^mathrmTX^-1,@ where S=QDQ^mathrmT is a diagonalization of S, hatU-hatL=P^mathrmTP with hatL=Q^mathrmTXLXQ and hatU=Q^mathrmTXUXQ, where -mboxsgn(D)_+ is the diagonal matrix","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatornamediagbigl(\n -operatornamesgn(d_11)_+ ldots -operatornamesgn(d_nn)_+\nbigr)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and D=(d_ij).","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@doc raw\"\"\"\n closed_form_solution!(M, q, L, U, p X)\n\nCompute the closeed form solution of the constraint sub problem in place of ``q``.\n\"\"\"\nfunction closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)\n # extract p^1/2 and p^{-1/2}\n (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)\n # Compute D & Q\n e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk = QDQ'\n D = Diagonal(1.0 .* (e2.values .< 0))\n Q = e2.vectors\n #println(p)\n Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q\n Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q\n P = cholesky(Hermitian(Uprime - Lprime))\n z = P.U' * D * P.U + Lprime\n copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-Difference-of-Convex-Formulation","page":"Frank Wolfe comparison","title":"The Difference of Convex Formulation","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use g(p) = iota_mathcal C(p) as the indicator funtion of the set mathcal C. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function is_pos_def(p; atol=5e-13)\n e = eigen(Symmetric(p))\n return all((e.values .+ atol) .> 0)\nend\nfunction g(p, L, U)\n return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf\nend\nh(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"So we can first check that p0 is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"g(p0,L,U) == 0.0","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"true","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Now setting","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We look for a maximum of h, where g is minimal, i.e. g(p) is zero or in other words p in mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The gradient of h can also be implemented in closed form as","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))\nfunction grad_h!(M, X, p, w, q)\n Y = copy(M, p, X)\n zero_vector!(M, X, p)\n for (wi, qi) in zip(w,q)\n log!(M, Y, p, qi)\n Y .*= - 2.0*wi\n X .+= Y\n end\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can further define the cost, which will just be +infty outside of mathcal C. We define","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_dc(M, p) = g(p, L, U) - h(M, p, w, q)\ngrad_h!(M, X, p) = grad_h!(M, X, p, w, q)\nfunction grad_f_dc!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Here we can omit the gradient of g in the definition of operatornamegrad f, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As the last step, we can provide the closed form solver for the DC sub problem given at iteration k by","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pin mathcal C\n biglangle -operatornamegrad h(p^(k)) exp^-1_p^(k)pbigrangle","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Which we con compute","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution!(M, q, p, X)\n closed_form_solution!(M, q, L, U, p, -X)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For safety, we might want to avoid ending up at the boundary of mathcal C. That is we reduce the distance we walk towards the solution q a bit.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution_safe!(M, q, p, X)\n p_last = copy(M,p) # since p=q might be in place\n closed_form_solution!(M, q, L, U, p, -X)\n q_orig = copy(M,q) # since we do the following in place of q\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n s = 1.0\n d = distance(M, p_last, q_orig);\n # if we are close to zero, we reduce faster.\n α = d < 1/(n^2) ? 0.66 : 0.9995;\n i=0\n while (a < 0) || (b < 0)\n s *= α\n shortest_geodesic!(M, q, p_last, q_orig, s)\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n #println(\"$i a: $a, b = $b with s=$s\")\n i=i+1\n if (i>100) # safety fallback\n #@warn \" $i steps where not enough $s ($α)\\n$a $b\\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs\"\n qe = eigen(q)\n if a < 0\n qe.values .+= min(1e-8, n*abs(min(a,b)))\n else\n qe.values .-= min(1e-8, n*abs(min(a,b)))\n end\n q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n return q\n end\n end\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-DoC-solver-run","page":"Frank Wolfe comparison","title":"The DoC solver run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s compare both methods when they have the same stopping criteria","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;\n gradient=grad_f_dc!,\n sub_problem=dc_sub_solution_safe!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(300) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 30, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(p): -0.77661458292831\n# 30 F(p): -0.78442486496540 |Δp|: 0.05520655655191 |grad f(p)|: 0.17699237 |Δgrad f(p)|: 0.17569106\n# 60 F(p): -0.78442319013514 |Δp|: 0.01172173294316 |grad f(p)|: 0.17697321 |Δgrad f(p)|: 0.02211809\nAt iteration 78 the change of the gradient (3.1520524323368916e-13) was less than 1.0e-9.\n 16.243844 seconds (16.86 M allocations: 2.325 GiB, 2.67% gc time, 49.72% compilation time)\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 78 iterations\n\n## Parameters\n* sub solver state:\n | InplaceEvaluation()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 300: not reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 30]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s extract the final point and look at its cost","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_dc = get_solver_result(state1_dc);\nf_dc(M, p1_dc)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844223312703434","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (6.29650307104728e-15, 0.06710268482236606)\n (2.6399491947503855e-6, 0.06680333533680119)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For the statistics we extract the recordings from the state","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Define-the-Frank-Wolfe-functions","page":"Frank Wolfe comparison","title":"Define the Frank-Wolfe functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For Frank wolfe, the cost is just defined as -h(p) but the minimisation is constraint to mathcal C, which is enfored by the oracle.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_fw(M, p) = -h(M, p, w, q)\nfunction grad_f_fw!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend\noracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-FW-Solver-Run","page":"Frank Wolfe comparison","title":"The FW Solver Run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Similarly we can run the Frank-Wolfe algorithm with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;\n sub_problem=oracle_fw!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(10^4) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), :Cost, (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 2*10^3, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial f(x): -0.776615\n# 2000 f(x): -0.784420 |Δp|: 0.04611942377555 |grad f(p)|: 0.17693408 |Δgrad f(p)|: 0.17555618\n# 4000 f(x): -0.784421 |Δp|: 0.00372201631993 |grad f(p)|: 0.17694619 |Δgrad f(p)|: 0.00749427\n# 6000 f(x): -0.784422 |Δp|: 0.00205683506781 |grad f(p)|: 0.17695204 |Δgrad f(p)|: 0.00414088\n# 8000 f(x): -0.784422 |Δp|: 0.00140675676252 |grad f(p)|: 0.17695565 |Δgrad f(p)|: 0.00283200\n# 10000 f(x): -0.784422 |Δp|: 0.00106177438607 |grad f(p)|: 0.17695815 |Δgrad f(p)|: 0.00213746\nThe algorithm reached its maximal number of iterations (10000).\n609.538654 seconds (55.97 M allocations: 93.630 GiB, 1.01% gc time, 0.10% compilation time)\n\n# Solver state for `Manopt.jl`s Frank Wolfe Method\nAfter 10000 iterations\n\n## Parameters\n* inverse retraction method: LogarithmicInverseRetraction()\n* retraction method: ExponentialRetraction()\n* sub solver state:\n | InplaceEvaluation()\n\n## Stepsize\nDecreasingStepsize(; length=2.0, factor=1.0, subtrahend=0.0, shift=2)\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 10000: reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"f(x): %f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 2000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we take a look at this result as well","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_fw = get_solver_result(state1_fw);\nf_dc(M, p1_fw)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844220281765242","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And its feasibility","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.912896446145126e-10, 0.06659173821660597)\n (3.2456549828225906e-5, 0.06713970236076447)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Statistics","page":"Frank Wolfe comparison","title":"Statistics","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We extract the recorded values","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"# DoC\niter1_dc = get_record(state1_dc, :Iteration, :Iteration)\npk_dc = get_record(state1_dc,:Iteration,:Iterate)\ncosts1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))\ndc_min = minimum(costs1_dc)\n# FW\niter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]\npk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]\ncosts1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x_k)-f^*$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-8, 10^-2),\n xaxis=:log,\n xlims=(1,10^4),\n)\nplot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label=\"Difference of Convex\")\nplot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label=\"Frank-Wolfe\")","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Literature","page":"Frank Wolfe comparison","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\n","category":"page"},{"location":"references/#Literature","page":"References","title":"Literature","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nM. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-of-the-Difference-of-Convex-Algorithms","page":"A Benchmark","title":"Benchmark of the Difference of Convex Algorithms","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Introduction","page":"A Benchmark","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where ghcolon mathcal M to mathbb R are geodesically convex function on the Riemannian manifold mathcal M.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#The-DC-Problem","page":"A Benchmark","title":"The DC Problem","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We start with defining the two convex functions gh and their gradients as well as the DC problem f and its gradient for the problem","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":" operatorname*argmin_pinmathcal M bigl( logbigr(det(p)bigr)bigr)^4 - bigl(log det(p) bigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where the critical points obtain a functional value of -frac14.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where mathcal M is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We first define the corresponding functions","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"g(M, p) = log(det(p))^4\nh(M, p) = log(det(p))^2\nf(M, p) = g(M, p) - h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and their gradients","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"grad_g(M, p) = 4 * (log(det(p)))^3 * p\ngrad_h(M, p) = 2 * log(det(p)) * p\ngrad_f(M, p) = grad_g(M, p) - grad_h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which we can use to verify that the gradients of g and h are correct. We use for that","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"n = 6\nM = SymmetricPositiveDefinite(n)\np0 = log(n) * Matrix{Float64}(I, n, n);\nX0 = 1 / n * Matrix{Float64}(I, n, n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"to tall both checks","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, g, grad_g, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, h, grad_h, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which both pass the test. We continue to define their inplace variants","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"function grad_g!(M, X, p)\n copyto!(M, X, p)\n X .*= 4 * (log(det(p)))^3\n return X\nend\nfunction grad_h!(M, X, p)\n copyto!(M, X, p)\n X .*= 2 * (log(det(p)))\n return X\nend\nfunction grad_f!(M, X, p)\n grad_g!(M, X, p)\n Y = copy(M, p, X)\n grad_h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And compare times for both algorithms, with a bit of debug output.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dca = difference_of_convex_algorithm(\n M,\n f,\n g,\n grad_h!,\n p0;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n (:GradientNorm, \" |grad_f(p)|: %1.9f\"),\n (:Change, \" |δp|: %1.9f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470\n# 5 f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127\n# 10 f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103\n# 15 f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011\nThe algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.\n 3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The cost is","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dca)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25000000000000006","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Similarly the DCPPA performs","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dcppa = difference_of_convex_proximal_point(\n M,\n grad_h!,\n p0;\n g=g,\n grad_g=grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n \" \",\n (:GradientNorm, \"|grad_f(p)|: %1.10f\"),\n (:Change, \"|δp|: %1.10f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470 \n# 5 f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692\n# 10 f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316\n# 15 f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968\n# 25 f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530\n# 30 f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048\n# 35 f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001\nThe algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.\n 1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dcppa)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-I:-Time-comparison","page":"A Benchmark","title":"Benchmark I: Time comparison","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()\ndcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()\nN_max=14\nN = 2:N_max","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and run a benchmark for both algorithms","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"for n in N\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I, n, n)\n bdca = @benchmark difference_of_convex_algorithm(\n $Mn,\n $f,\n $g,\n $grad_h!,\n $pn;\n grad_g=$grad_g!,\n gradient=$grad_f!,\n evaluation=InplaceEvaluation(),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dca_benchmarks[n] = bdca\n bdcppa = @benchmark difference_of_convex_proximal_point(\n $Mn,\n $grad_h!,\n $pn;\n g=$g,\n grad_g=$grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dcppa_benchmarks[n] = bdcppa\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]\ndca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]\ndcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Time (sec.)\")\nplot!(dims, dca_times; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims, dcppa_times; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-II:-Iterations-and-cost.","page":"A Benchmark","title":"Benchmark II: Iterations and cost.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"N2 = [5,10,20,40,80]\ndims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]\ndca_iterations = Dict{Int,Int}()\ndca_costs = Dict{Int,Vector{Float64}}()\ndcppa_iterations = Dict{Int,Int}()\ndcppa_costs = Dict{Int,Vector{Float64}}()","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time for n in N2\n println(n)\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I,n,n);\n @time dca_st = difference_of_convex_algorithm(\n Mn, f, g, grad_h!, pn;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation = InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dca_costs[n] = get_record(dca_st, :Iteration, :Cost)\n dca_iterations[n] = length(dca_costs[n])\n @time dcppa_st = difference_of_convex_proximal_point(\n Mn, grad_h!, pn;\n g=g,\n grad_g=grad_g!,\n λ = i -> 1/(2*n),\n cost = f,\n gradient= grad_f!,\n evaluation = InplaceEvaluation(),\n stepsize = ConstantStepsize(1.0),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)\n dcppa_iterations[n] = length(dcppa_costs[n])\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The iterations are like","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Iterations\")\nplot!(dims2, [values(dca_iterations)...]; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims2, [values(dcppa_iterations)...]; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And for the developtment of the cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where we can see that the DCA needs less iterations than the DCPPA.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Literature","page":"A Benchmark","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\n","category":"page"},{"location":"objectives/#List-of-Objectives-defined-for-the-Examples","page":"Objectives","title":"List of Objectives defined for the Examples","text":"","category":"section"},{"location":"objectives/#Rayleigh","page":"Objectives","title":"Rayleigh Quotient on the Sphere","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rayleigh example (TODO) to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RayleighQuotient.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RayleighQuotientCost","page":"Objectives","title":"ManoptExamples.RayleighQuotientCost","text":"RayleighQuotientCost\n\nA functor representing the Rayleigh Quotient cost function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either\n\nf(p) = p^mathrmTApqquad p 𝕊^n-1\n\nor extended into the embedding as\n\nf(x) = x^mathrmTAx qquad x ℝ^n\n\nwhich is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of 𝕊^n-1.\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientCost(A)\n\nCreate the Rayleigh cost function.\n\nSee also\n\nRayleighQuotientGrad!!, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientGrad!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientGrad!!","text":"RayleighQuotientGrad!!\n\nA functor representing the Rayleigh Quotient gradient function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either\n\noperatornamegrad f(p) = 2 Ap - 2 (p^mathrmTAp)*pqquad p 𝕊^n-1\n\nor taking the Euclidean gradient of the Rayleigh quotient on the sphere as\n\nf(x) = 2Ax qquad x ℝ^n\n\nFor details, see Example 3.62 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientGrad!!(A)\n\nCreate the Rayleigh quotient gradient function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientHess!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientHess!!","text":"RayleighQuotientHess!!\n\nA functor representing the Rayleigh Quotient Hessian.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either\n\noperatornameHess f(p)X = 2 bigl(AX - (p^mathrmTAX)p - (p^mathrmTAp)Xbigr)qquad p 𝕊^n-1 X in T_p𝕊^n-1\n\nor taking the Euclidean Hessian of the Rayleigh quotient on the sphere as\n\n^2f(x)V = 2AV qquad x V ℝ^n\n\nFor details, see Example 5.27 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientHess!!(A)\n\nCreate the Rayleigh quotient Hessian function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientGrad!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#BezierCurves","page":"Objectives","title":"Bézier Curves","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Bezier Curves example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/BezierCurves.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.BezierSegment","page":"Objectives","title":"ManoptExamples.BezierSegment","text":"BezierSegment\n\nA type to capture a Bezier segment. With n points, a Bézier segment of degree n-1 is stored. On the Euclidean manifold, this yields a polynomial of degree n-1.\n\nThis type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.\n\nNot that this can also be used to represent tangent vectors on the control points of a segment.\n\nSee also: de_Casteljau.\n\nConstructor\n\nBezierSegment(pts::AbstractVector)\n\nGiven an abstract vector of pts generate the corresponding Bézier segment.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}, AbstractFloat, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.L2_acceleration_Bezier","text":"L2_acceleration_Bezier(M,B,pts,λ,d)\n\ncompute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.\n\nfracλ2sum_i=0^N d_mathcal M(d_i c_B(i))^2+\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i and d_2 refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by p_i, and to each p_i corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}}} where P","page":"Objectives","title":"ManoptExamples.acceleration_Bezier","text":"acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector{<:AbstractFloat},\n) where {P}\n\ncompute the value of the discrete Acceleration of the composite Bezier curve\n\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i, i=1N, and d_2 refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nThis acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n T::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n T::AbstractVector,\n X::AbstractVector,\n)\n\nEvaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\n\nevaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t,\n η,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t01 on the curve and a tangent vector ηT_β(t)mathcal M. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.de_Casteljau-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any}}","page":"Objectives","title":"ManoptExamples.de_Casteljau","text":"de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function\n\nreturn the Bézier curve β(b_0b_n) 01 mathcal M defined by the control points b_0b_nmathcal M, nmathbb N, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let γ_ab(t) denote the shortest geodesic connecting abmathcal M. Then the curve is defined by the recursion\n\nbeginaligned\n β(tb_0b_1) = gamma_b_0b_1(t)\n β(tb_0b_n) = gamma_β(tb_0b_n-1) β(tb_1b_n)(t)\nendaligned\n\nand P is the type of a point on the Manifold M.\n\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function\n\nGiven a vector of Bézier segments, i.e. a vector of control points B=bigl( (b_00b_n_00)(b_0m b_n_mm) bigr), where the different segments might be of different degree(s) n_0n_m. The resulting composite Bézier curve c_B0m mathcal M consists of m segments which are Bézier curves.\n\nc_B(t) =\n begincases\n β(t b_00b_n_00) text if t 01\n β(t-i b_0ib_n_ii) text if \n t(ii+1 quad i1m-1\n endcases\n\nde_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)\nde_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector\nde_Casteljau(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n) -> AbstractVector\n\nEvaluate the Bézier curve at time t or at times t in T.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Θ::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in 0N, and each depending the corresponding segment(s). Here, N is the length of B. For the mutating variant the result is computed in Θ.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t0N, which depends only on the corresponding segment. Here, N is the length of B. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n t,\n X::BezierSegment\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degree-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.get_Bezier_degree","text":"get_Bezier_degree(M::AbstractManifold, b::BezierSegment)\n\nreturn the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degrees-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_degrees","text":"get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\n\nreturn the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_inner_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_inner_points","text":"get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )\nget_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)\n\nreturns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junction_tangent_vectors-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_junction_tangent_vectors","text":"get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)\n\nreturns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junctions","page":"Objectives","title":"ManoptExamples.get_Bezier_junctions","text":"get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junctions(M::AbstractManifold, b::BezierSegment)\n\nreturns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_points","page":"Objectives","title":"ManoptExamples.get_Bezier_points","text":"get_Bezier_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n reduce::Symbol=:default\n)\nget_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)\n\nreturns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.\n\nThis method reduces the points depending on the optional reduce symbol\n\n:default – no reduction is performed\n:continuous – for a continuous function, the junction points are doubled at b_0i=b_n_i-1i-1, so only b_0i is in the vector.\n:differentiable – for a differentiable function additionally log_b_0ib_1i = -log_b_n_i-1i-1b_n_i-1-1i-1 holds. hence b_n_i-1-1i-1 is omitted.\n\nIf only one segment is given, all points of b – i.e. b.pts is returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_segments-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any, Symbol}} where P","page":"Objectives","title":"ManoptExamples.get_Bezier_segments","text":"get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])\n\nreturns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.\n\nThere are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let c=(c_1c_k) and d=(d_1d_m), where m denotes the number of components the composite Bézier curve consists of. Then\n\n:default – k = m + sum_i=1^m d_i since each component requires one point more than its degree. The points are then ordered in tuples, i.e.\nB = bigl c_1c_d_1+1 (c_d_1+2c_d_1+d_2+2 c_k-m+1+d_mc_k bigr\n:continuous – k = 1+ sum_i=1m d_i, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.\nB = bigl c_1c_d_1+1 c_d_1+1c_d_1+d_2+1 c_k-1+d_mb_k) bigr\n:differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence k = 2 - m + sum_i=1m d_i and at a junction point b_n with its given prior point c_n-1, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as b = exp_c_n(-log_c_n c_n-1) such that the assumed differentiability holds\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector, Any, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.grad_L2_acceleration_Bezier","text":"grad_L2_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector,\n λ,\n d::AbstractVector{P}\n) where {P}\n\ncompute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight λ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in 0N), where N is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting λ=0 yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.\n\nNote that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_acceleration_Bezier-Tuple{ManifoldsBase.AbstractManifold, AbstractVector, AbstractVector{<:Integer}, AbstractVector}","page":"Objectives","title":"ManoptExamples.grad_acceleration_Bezier","text":"grad_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector,\n degrees::AbstractVector{<:Integer}\n T::AbstractVector\n)\n\ncompute the gradient of the discretized acceleration of a (composite) Bézier curve c_B(t) on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in 0N, where N is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set λ=0 therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.\n\nSee also\n\nacceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective-Tuple{AbstractVector}","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the inplace variant to be used, though that keyword is used to setup the objective.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also 📖 Rosenbrock (with slightly different parameter naming).\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\ngrad_f!!(M,p)\ngrad_f!!(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockMetric","page":"Objectives","title":"ManoptExamples.RosenbrockMetric","text":"RosenbrockMetric <: AbstractMetric\n\nA metric related to the Rosenbrock problem, where the metric at a point pmathbb R^2 is given by\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\nwhere the mathrmRb stands for Rosenbrock\n\n\n\n\n\n","category":"type"},{"location":"objectives/#Base.exp-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Number}","page":"Objectives","title":"Base.exp","text":"q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)\nexp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)\n\nCompute the exponential map with respect to the RosenbrockMetric.\n\n q = beginpmatrix p_1 + X_1 p_2+X_2+X_1^2endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Base.log-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any}","page":"Objectives","title":"Base.log","text":"X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)\nlog!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)\n\nCompute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any j 1m\n\nX = beginpmatrix\n q_1 - p_1 \n q_2 - p_2 + (q_1 - p_1)^2\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.inverse_local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.inverse_local_metric","text":"inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG^-1_p =\nbeginpmatrix\n 1 2p_1\n 2p_1 1+4p_1^2 \nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.local_metric","text":"local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.change_representer-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, ManifoldsBase.EuclideanMetric, Any, Any}","page":"Objectives","title":"ManifoldsBase.change_representer","text":"Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)\nchange_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)\n\nGiven the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.\n\nthis function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.inner-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Any}","page":"Objectives","title":"ManifoldsBase.inner","text":"inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)\n\nCompute the inner product on mathbb R^2 with respect to the RosenbrockMetric, i.e. for XY in T_pmathcal M we have\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1\n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Total-Variation","page":"Objectives","title":"Total Variation","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Total Variation example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/TotalVariation.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.Intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.Intrinsic_infimal_convolution_TV12","text":"Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\nCompute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads\n\nE(uv) =\n frac12sum_i mathcal G\n d_mathcal Mbigl(g(frac12v_iw_i)f_ibigr)\n +alphabigl( βmathrmTV(v) + (1-β)mathrmTV_2(w) bigr)\n\nfor more details see [BFPS17, BFPS18].\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation-NTuple{4, Any}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation","text":"L2_Total_Variation(M, p_data, α, p)\n\ncompute the ℓ^2-TV functional on the PowerManifold M for given (fixed) data p_data (on M), a nonnegative weight α, and evaluated at p (on M), i.e.\n\nE(p) = d_mathcal M^2(fp) + alpha operatornameTV(p)\n\nSee also\n\nTotal_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation_1_2-Tuple{ManifoldsBase.PowerManifold, Vararg{Any, 4}}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation_1_2","text":"L2_Total_Variation_1_2(M, f, α, β, x)\n\ncompute the ℓ^2-TV-TV2 functional on the PowerManifold manifold M for given (fixed) data f (on M), nonnegative weight α, β, and evaluated at x (on M), i.e.\n\nE(x) = d_mathcal M^2(fx) + alphaoperatornameTV(x)\n + βoperatornameTV_2(x)\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_second_order_Total_Variation-Tuple{ManifoldsBase.PowerManifold, Any, Any, Any}","page":"Objectives","title":"ManoptExamples.L2_second_order_Total_Variation","text":"L2_second_order_Total_Variation(M, f, β, x)\n\ncompute the ℓ^2-TV2 functional on the PowerManifold manifold M for given data f, nonnegative parameter β, and evaluated at x, i.e.\n\nE(x) = d_mathcal M^2(fx) + βoperatornameTV_2(x)\n\nas used in [BBSW16].\n\nSee also\n\nsecond_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Total_Variation","page":"Objectives","title":"ManoptExamples.Total_Variation","text":"Total_Variation(M,x [,p=2,q=1])\n\nCompute the operatornameTV^p functional for data xon the PowerManifold manifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i denote the forward neighbors, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I_i = i+e_j j=1kcap mathcal G. The formula reads\n\nE^q(x) = sum_i mathcal G\n bigl( sum_j mathcal I_i d^p_mathcal M(x_ix_j) bigr)^qp\n\nsee [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.\n\nSee also\n\ngrad_Total_Variation, prox_Total_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.adjoint_differential_forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.adjoint_differential_forward_logs","text":"Y = adjoint_differential_forward_logs(M, p, X)\nadjoint_differential_forward_logs!(M, Y, p, X)\n\nCompute the adjoint differential of forward_logs F occurring, in the power manifold array p, the differential of the function\n\nF_i(p) = sum_j mathcal I_i log_p_i p_j\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i Let n be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold mathcal M = mathcal M^n. The adjoint differential can be computed in place of Y.\n\nInput\n\nM – a PowerManifold manifold\np – an array of points on a manifold\nX – a tangent vector to from the n-fold power of p, where n is the ndims of p\n\nOutput\n\nY – resulting tangent vector in T_pmathcal M representing the adjoint differentials of the logs.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_forward_logs-Tuple{ManifoldsBase.PowerManifold, Any, Any}","page":"Objectives","title":"ManoptExamples.differential_forward_logs","text":"Y = differential_forward_logs(M, p, X)\ndifferential_forward_logs!(M, Y, p, X)\n\ncompute the differential of forward_logs F on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function\n\nF_i(x) = sum_j mathcal I_i log_p_i p_j quad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\np – a point.\nX – a tangent vector.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal N representing the differentials of the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.forward_logs","text":"Y = forward_logs(M,x)\nforward_logs!(M, Y, x)\n\ncompute the forward logs F (generalizing forward differences) occurring, in the power manifold array, the function\n\nF_i(x) = sum_j mathcal I_i log_x_i x_jquad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i. This can also be done in place of ξ.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal M representing the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, λ, x[, p=1])\ngrad_Total_Variation!(M, X, λ, x[, p=1])\n\nCompute the (sub)gradient partial F of all forward differences occurring, in the power manifold array, i.e. of the function\n\nF(x) = sum_isum_j mathcal I_i d^p(x_ix_j)\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nX – resulting tangent vector in T_xmathcal M. The computation can also be done in place.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}, Any}} where T","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, (x,y)[, p=1])\ngrad_Total_Variation!(M, X, (x,y)[, p=1])\n\ncompute the (sub) gradient of frac1pd^p_mathcal M(xy) with respect to both x and y (in place of X and Y).\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.grad_intrinsic_infimal_convolution_TV12","text":"grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\ncompute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some f mathcal M on a PowerManifold manifold mathcal M this function computes the (sub)gradient of\n\nE(uv) =\nfrac12sum_i mathcal G d_mathcal M(g(frac12v_iw_i)f_i)\n+ alpha\nbigl(\nβmathrmTV(v) + (1-β)mathrmTV_2(w)\nbigr)\n\nwhere both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"Y = grad_second_order_Total_Variation(M, q[, p=1])\ngrad_second_order_Total_Variation!(M, Y, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1 q_2 q_3) with respect to all three components of qmathcal M^3, where d_2 denotes the second order absolute difference using the mid point model, i.e. let\n\nmathcal C = bigl c mathcal M g(tfrac12q_1q_3) text for some geodesic gbigr\n\ndenote the mid points between q_1 and q_3 on the manifold mathcal M. Then the absolute second order difference is defined as\n\nd_2(q_1q_2q_3) = min_c mathcal C_q_1q_3 d(c q_2)\n\nWhile the (sub)gradient with respect to q_2 is easy, the other two require the evaluation of an adjoint_Jacobi_field.\n\nThe derivation of this gradient can be found in [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation-2","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1q_2q_3) with respect to all q_1q_2q_3 occurring along any array dimension in the point q, where M is the corresponding PowerManifold.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.project_collaborative_TV","page":"Objectives","title":"ManoptExamples.project_collaborative_TV","text":"project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])\nproject_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])\n\ncompute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function\n\nF^q(x) = sum_imathcal G\n Bigl( sum_jmathcal I_i\n sum_k=1^d lVert X_ijrVert_x^pBigr)^fracqp\n\nwhere mathcal G is the set of indices for xmathcal M and mathcal I_i is the set of its forward neighbors. The computation can also be done in place of Θ.\n\nThis is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"ξ = prox_Total_Variation(M,λ,x [,p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all forward differences occurring in the power manifold array, i.e. varphi(xixj) = d_mathcal M^p(xixj) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a point.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}, Int64}} where T","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"[y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])\nprox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])\n\nCompute the proximal map operatornameprox_λvarphi of φ(xy) = d_mathcal M^p(xy) with parameter λ. A derivation of this closed form solution is given in see [WDS14].\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\n(x1,x2) – a tuple of two points,\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\n(y1,y2) – resulting tuple of points of the operatornameprox_λφ((x1,x2)). The result can also be computed in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.prox_parallel_TV","page":"Objectives","title":"ManoptExamples.prox_parallel_TV","text":"y = prox_parallel_TV(M, λ, x [,p=1])\nprox_parallel_TV!(M, y, λ, x [,p=1])\n\ncompute the proximal maps operatornameprox_λφ of all forward differences occurring in the power manifold array, i.e. φ(x_ix_j) = d_mathcal M^p(x_ix_j) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a PowerManifold manifold\nλ – a real value, parameter of the proximal map\nx – a point\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.\n\nSee also prox_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Any, Tuple{T, T, T}}, Tuple{ManifoldsBase.AbstractManifold, Any, Tuple{T, T, T}, Int64}} where T","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"(y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)\nprox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)\n\nCompute the proximal map operatornameprox_λvarphi of varphi(x_1x_2x_3) = d_mathcal M^p(c(x_1x_3)x_2) with parameter λ>0, where c(xz) denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.\n\nNote that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.\n\nInput\n\nM – a manifold\nλ – a real value, parameter of the proximal map\n(x1,x2,x3) – a tuple of three points\np – (1) exponent of the distance of the TV term\n\nOptional\n\nkwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)\n\nOutput\n\n(y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation-Union{Tuple{T}, Tuple{N}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any, Int64}} where {N, T}","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"y = prox_second_order_Total_Variation(M, λ, x[, p=1])\nprox_second_order_Total_Variation!(M, y, λ, x[, p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all centered second order differences occurring in the power manifold array, i.e. varphi(x_kx_ix_j) = d_2(x_kx_ix_j), where kj are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a points.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,x [,p=1])\n\ncompute the operatornameTV_2^p functional for data x on the PowerManifold manifoldmanifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i^pm denote the forward and backward neighbors, respectively, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I^pm_i = ipm e_j j=1kcap mathcal I. The formula then reads\n\nE(x) = sum_i mathcal I j_1 mathcal I^+_i j_2 mathcal I^-_i\nd^p_mathcal M(c_i(x_j_1x_j_2) x_i)\n\nwhere c_i() denotes the mid point between its two arguments that is nearest to x_i, see [BBSW16] for a derivation.\n\nIn long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation-Union{Tuple{T}, Tuple{MT}, Tuple{MT, Tuple{T, T, T}}, Tuple{MT, Tuple{T, T, T}, Any}} where {MT<:ManifoldsBase.AbstractManifold, T}","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,(x1,x2,x3) [,p=1])\n\nCompute the operatornameTV_2^p functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by\n\n mathcal C = bigl c mathcal M g(tfrac12x_1x_3) text for some geodesic gbigr\n\nthe set of mid points between x_1 and x_3. Then the function reads\n\nd_2^p(x_1x_2x_3) = min_c mathcal C d_mathcal M(cx_2)\n\nsee [BBSW16] for a derivation. In long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Literature","page":"Objectives","title":"Literature","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/#List-of-Examples","page":"Overview","title":"List of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation Comment\nA Benchmark for Difference of Convex contains a few simple functions \nBézier Curves and Minimizing their Acceleration tools Bézier curves and their acceleration 📚 \nSolving Rosenbrock with Difference of Convex DoC split of Rosenbrock 📚 uses a Rosenbrock based metric\nDifference of Convex vs. Frank-Wolfe closed-form sub solver\nRiemannian Mean f, operatornamegradf (A/I), objective 📚 \nRobust PCA f, operatornamegradf (A/I), objective 📚 \nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚 \nThe Rayleigh Quotient f, operatornamegradf (A/I), operatornameHessf (A/I), objective 📚 \nTotal Variation Minimization f, operatornameproxf (A/I), objective 📚 ","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Solving-Rosenbrock-with-the-Difference-of-Convex-Algorithm","page":"Rosenbrock Metric","title":"Solving Rosenbrock with the Difference of Convex Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Introduction","page":"Rosenbrock Metric","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Both the Rosenbrock problem","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":" operatorname*argmin_xinmathbb R^2 abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where ab0 and usually b=1 and a gg b, we know the minimizer x^* = (bb^2)^mathrmT, and also the (Euclidean) gradient","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"nabla f(x) =\n beginpmatrix\n 4a(x_1^2-x_2) -2a(x_1^2-x_2)\n endpmatrix\n +\n beginpmatrix\n 2(x_1-b) 0\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Furthermore, the RosenbrockMetric can be used on mathbb R^2, that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"XY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"The Euclidean Gradient\nThe Riemannian gradient descent with respect to the RosenbrockMetric\nThe Euclidean Difference of Convex Algorithm\nThe Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Where we obtain a difference of convex problem by writing","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f(x) = abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2\n = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 - bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"g(x) = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 quadtext and quad h(x) = bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nimport Manopt: set_manopt_parameter!\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\ngreen = paul_tol[\"mutedgreen\"]\nsand = paul_tol[\"mutedsand\"]\nteal = paul_tol[\"mutedteal\"]\ngrey = paul_tol[\"mutedgrey\"]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"To emphasize the effect, we choose a quite large value of a.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"a = 2*10^5\nb = 1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and use the starting point and a direction to check gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"p0 = [0.1, 0.2]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Euclidean Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Euclidean gradient we can just use the same approach as in the Rosenbrock example","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M = ℝ^2\nf = ManoptExamples.RosenbrockCost(M; a=a, b=b)\n∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"define a common debug vector","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"debug_vec = [\n (:Iteration, \"# %-8d \"),\n (:Cost, \"F(x): %1.4e\"),\n \" \",\n (:Change, \"|δp|: %1.4e | \"),\n (:GradientNorm, \"|grad f|: %1.6e\"),\n :Stop,\n \"\\n\",\n ]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and call the gradient descent algorithm","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^7],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03\n# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04\n# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06\n# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08\n# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 53073227 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Riemannian Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Riemannian case, we define","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and the gradient is now adopted to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_f!(M, X, p)\n ∇f!!(M, X, p)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_f(M, p)\n X = zero_vector(M, p)\n return grad_f!(M, X, p)\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^6],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 1000000 F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04\n# 2000000 F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 2443750 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Euclidean Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the convex case, we have to first introduce the two parts of the cost.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;\nf2(M, p; a=100, b=1) = (p[1] - b[1])^2;\ng(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)\nh(M, p; a=100, b=1) = f2(M, p; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and their (Euclidan) gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function ∇h!(M, X, p; a=100, b=1)\n X[1] = 2*(p[1]-b)\n X[2] = 0\n return X\nend\nfunction ∇h(M, p; a=100, b=1)\n X = zero(p)\n ∇h!(M, X, p; a=a, b=b)\n return X\nend\nfunction ∇g!(M, X, p; a=100, b=1)\n X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)\n X[2] = -2*a*(p[1]^2-p[2])\n return X\nend\nfunction ∇g(M, p; a=100, b=1)\n X = zero(p)\n ∇g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and we define for convenience","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docE_g(M, p) = g(M, p; a=a, b=b)\ndocE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)\ndocE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)\ndocE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)\nfunction docE_∇f!(M, X, p)\n Y = zero_vector(M, p)\n docE_∇g!(M, X, p)\n docE_∇h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we call the difference of convex algorithm on Eucldiean space mathbb R^2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"E_doc_state = difference_of_convex_algorithm(\n M, docE_f, docE_g, docE_∇h!, p0;\n gradient=docE_∇f!,\n grad_g = docE_∇g!,\n debug=[debug_vec..., 10^4],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_hess=nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000 F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04\n# 20000 F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 26549 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Riemannian Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"We first have to again defined the gradients with respect to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_h!(M, X, p; a=100, b=1)\n ∇h!(M, X, p; a=a, b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_h(M, p; a=100, b=1)\n X = zero(p)\n grad_h!(M, X, p; a=a, b=b)\n return X\nend\nfunction grad_g!(M, X, p; a=100, b=1)\n ∇g!(M, X, p; a=a,b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_g(M, p; a=100, b=1)\n X = zero(p)\n grad_g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For X in partial h(p^(k)) the sunproblem top determine p^(k+1) reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatorname*argmin_pinmathcal M g(p) - langle X log_p^(k)prangle","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with X = operatornamegrad h(p^(k)) that","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"phi(p) = g(p) - langle X log_p^(k)prangle\n= abigl( p_1^2-p_2bigr)^2\n + 2bigl(p_1-bbigr)^2 - 2(p^(k)_1-b)p_1 + 2(p^(k)_1-b)p^(k)_1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"its Euclidean gradient reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatornamegradphi(p) =\n nabla varphi(p)\n = beginpmatrix\n 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^(k)_1-b)\n -2a(p_1^2-p_2)\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where we can again employ the gradient conversion from before to obtain the Riemannian gradient.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"mutable struct SubGrad{P,T,V}\n pk::P\n Xk::T\n a::V\n b::V\nend\nfunction (ϕ::SubGrad)(M, p)\n X = zero_vector(M, p)\n ϕ(M, X, p)\n return X\nend\nfunction (ϕ::SubGrad)(M, X, p)\n X .= [\n 4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),\n -2 * ϕ.a * (p[1]^2 - p[2]),\n ]\n riemannian_gradient!(M, X, p, X) # convert\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And in orer to update the subsolvers gradient correctly, we have to overwrite","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)\nset_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we again introduce for ease of use","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docR_g(M, p) = g(M, p; a=a, b=b)\ndocR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)\ndocR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)\ndocR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)\nfunction docR_grad_f!(M, X, p)\n Y = zero_vector(M, p)\n docR_grad_g!(M, X, p)\n docR_grad_h!(M, Y, p)\n X .-= Y\n return X\nend\ndocR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_doc_state = difference_of_convex_algorithm(\n M_rb, docR_f, docR_g, docR_grad_h!, p0;\n gradient=docR_grad_f!,\n grad_g = docR_grad_g!,\n debug=[debug_vec..., 10^6],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_grad=docR_sub_grad,\n sub_hess = nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 1235 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Comparison-in-Iterations","page":"Rosenbrock Metric","title":"Comparison in Iterations","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x)$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-16, 5*1e5),\n xaxis=:log,\n xlims=(1,10^8),\n)\nscatter!(fig, [1,], [f(M,p0),], label=raw\"$f(p_0)$\", markercolor=grey)\negi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries\negc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries\nplot!(fig, egi, egc, color=teal, label=\"Euclidean GD\")\n#\nrgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries\nrgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries\nplot!(fig, rgi, rgc, color=indigo, label=\"Riemannian GD\")\n#\nedi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries\nedc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries\nplot!(fig, edi, edc, color=sand, label=\"Euclidean DoC\")\n#\nrdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries\nrdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries\nplot!(fig, rdi, rdc, color=green, label=\"Riemannian DoC\")","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Literature","page":"Rosenbrock Metric","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\n","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/Changelog.md\"","category":"page"},{"location":"changelog/#Changelog","page":"Changelog","title":"Changelog","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"All notable changes to this Julia package will be documented in this file.","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.","category":"page"},{"location":"changelog/#[0.1.3]-–-11/12/2023","page":"Changelog","title":"[0.1.3] – 11/12/2023","text":"","category":"section"},{"location":"changelog/#Added","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Total variation Minimization cost, proxes, and an example\nBézier curve cost, gradients, and an example.","category":"page"},{"location":"changelog/#[0.1.3]-–-16/09/2023","page":"Changelog","title":"[0.1.3] – 16/09/2023","text":"","category":"section"},{"location":"changelog/#Added-2","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rayleigh Quotient functions added\nan example illustrating Euclidean gradient/HEssian conversion\nAdd Literature with DocumenterCitations","category":"page"},{"location":"changelog/#[0.1.2]-–-13/06/2023","page":"Changelog","title":"[0.1.2] – 13/06/2023","text":"","category":"section"},{"location":"changelog/#Added-3","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Update examples to use Quarto\nAdd DC examples","category":"page"},{"location":"changelog/#[0.1.1]-–-01/03/2023","page":"Changelog","title":"[0.1.1] – 01/03/2023","text":"","category":"section"},{"location":"changelog/#Added-4","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rosenbrock function and examples","category":"page"},{"location":"changelog/#[0.1.0]-–-18/02/2023","page":"Changelog","title":"[0.1.0] – 18/02/2023","text":"","category":"section"},{"location":"changelog/#Added-5","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested\nSetup Documentation to provide one example Quarto file for every example objective to illustrate how to use them","category":"page"},{"location":"examples/Bezier-curves/#Minimizing-the-Acceleration-of-Bézier-Curves-on-the-Sphere","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using Manifolds, Manopt, ManoptExamples","category":"page"},{"location":"examples/Bezier-curves/#Introduction","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Introduction","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"function bezier(M::AbstractManifold, t, pts::NTuple)\n p = bezier(M, t, pts[1:(end - 1)])\n q = bezier(M, t, pts[2:end])\n return shortest_geodesic(M, p, q, t)\nend\nfunction bezier(M::AbstractManifold, t, pts::NTuple{2})\n return shortest_geodesic(M, pts[1], pts[2], t)\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using ManoptExamples:\n artificial_S2_composite_Bezier_curve,\n BezierSegment,\n de_Casteljau,\n get_Bezier_degrees,\n get_Bezier_inner_points,\n get_Bezier_junctions,\n get_Bezier_junction_tangent_vectors,\n get_Bezier_points,\n get_Bezier_segments,\n grad_L2_acceleration_Bezier,\n L2_acceleration_Bezier","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"This notebook reproduces the example form Section 5.2 in [BG18].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The following image illustrates how the de-Casteljau algorithm works for one segment.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: A Bezier segment and illustration of the de-Casteljau algorithm)","category":"page"},{"location":"examples/Bezier-curves/#Approximating-data-by-a-curve-with-minimal-accelartion","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Approximating data by a curve with minimal accelartion","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We first load our example data","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"M = Sphere(2)\nB = artificial_S2_composite_Bezier_curve()\ndata_points = get_Bezier_junctions(M, B)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The original curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We continue to recude the points, since we “know” sme points due to the C^1 property: the second to last control point of the first segment b_02, the joint junction point connecting both segments b_03=b_10 and the second control point b_11 of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We can use this reduced form as the variable to optimize and the one from the data as our initial point.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"pB = get_Bezier_points(M, B, :differentiable)\nN = PowerManifold(M, NestedPowerRepresentation(), length(pB))","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the λ=10","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient\nλ = 10.0\nfunction f(M, pB)\n return L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend\nfunction grad_f(M, pB)\n return grad_L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"grad_f (generic function with 1 method)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Then we can optimize","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"x0 = pB\npB_opt = gradient_descent(\n N,\n f,\n grad_f,\n x0;\n stepsize=ArmijoLinesearch(;\n initial_stepsize=1.0,\n retraction_method=ExponentialRetraction(),\n contraction_factor=0.5,\n sufficient_decrease=0.001,\n ),\n stopping_criterion=StopWhenChangeLess(1e-5) |\n StopWhenGradientNormLess(1e-7) |\n StopAfterIteration(300),\n debug=[\n :Iteration,\n \" | \",\n :Cost,\n \" | \",\n DebugGradientNorm(),\n \" | \",\n DebugStepsize(),\n \" | \",\n :Change,\n \"\\n\",\n 25,\n :Stop,\n ],\n);","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Initial | f(x): 10.647244 | | | \n# 25 | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281\n# 50 | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780\n# 75 | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590\n# 100 | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745\nThe algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we can again look at the result","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The result looks as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The resulting curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\n","category":"page"},{"location":"data/#Data-sets","page":"Data","title":"Data sets","text":"","category":"section"},{"location":"data/#Signals-on-manifolds","page":"Data","title":"Signals on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_signals.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.Lemniscate-Tuple{Number}","page":"Data","title":"ManoptExamples.Lemniscate","text":"Lemniscate(t::Float; kwargs...)\nLemniscate(n::integer; interval=[0.0, 2π], kwargs...)\n\ngenerate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.\n\nTo be precise on the manifold M we use the tangent space at p and generate the curve\n\nγ(t) fracasin^2(t) + 1 beginpmatrix cos(t) cos(t)sin(t) endpmatrix\n\nin the plane spanned by X and Y in the tangent space. Note that this curve is 2π-periodic and a is the half-width of the curve.\n\nTo reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.\n\nTHe second variant generates n points equispaced in ìnterval` and calls the first variant.\n\nKeywords\n\nmanifold - (Sphere(2)) the manifold to build the lemniscate on\np - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate\na – (π/2.0) half-width of the Lemniscate\nX – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.\nY – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_signal","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal([pts=500])\n\ngenerate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to -pipi). This is data for an example from Bergmann et. al., SIAM J Imag Sci, 2014.\n\nOptional\n\npts – (500) number of points to sample the function\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S1_signal-Tuple{Real}","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal(x)\n\nevaluate the example signal f(x) x 01, of phase-valued data introduces in Sec. 5.1 of Bergmann et. al., SIAM J Imag Sci, 2014 for values outside that interval, this Signal is missing.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_slope_signal","page":"Data","title":"ManoptExamples.artificial_S1_slope_signal","text":"artificial_S1_slope_signal([pts=500, slope=4.])\n\nCreates a Signal of (phase-valued) data represented on the Circle with increasing slope.\n\nOptional\n\npts – (500) number of points to sample the function.\nslope – (4.0) initial slope that gets increased afterwards\n\nThis data set was introduced for the numerical examples in Bergmann et. al., SIAM J Imag Sci, 2014\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_composite_Bezier_curve-Tuple{}","page":"Data","title":"ManoptExamples.artificial_S2_composite_Bezier_curve","text":"artificial_S2_composite_Bezier_curve()\n\nGenerate a composite Bézier curve on the Sphere mathbb S^2 that was used in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\nIt consists of 4 egments connecting the points\n\nmathbf d_0 = beginpmatrix 001endpmatrixquad\nmathbf d_1 = beginpmatrix 0-10endpmatrixquad\nmathbf d_2 = beginpmatrix -100endpmatrixtext and \nmathbf d_3 = beginpmatrix 00-1endpmatrix\n\nwhere instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be C^1.\n\nWe define\n\nX_0 = fracπ8sqrt2beginpmatrix1-10endpmatrixquad\nX_1 = fracπ4sqrt2beginpmatrix101endpmatrixquad\nX_2 = fracπ4sqrt2beginpmatrix01-1endpmatrixtext and \nX_3 = fracπ8sqrt2beginpmatrix-110endpmatrix\n\nwhere we defined each X_i in T_d_imathbb S^2. We defined three BezierSegments\n\nof cubic Bézier curves as follows\n\nbeginalign*\nb_00 = d_0 quad b_10 = exp_d_0X_0 quad b_20 = exp_d_1X_1 quad b_30 = d_1\nb_01 = d_1 quad b_11 = exp_d_1(-X_1) quad b_21 = exp_d_2X_2 quad b_31 = d_2\nb_02 = d_2 quad b_11 = exp_d_2(-X_2) quad b_22 = exp_d_3X_3 quad b_32 = d_3\nendalign*\n\n\n\n\n\n","category":"method"},{"location":"data/#images-on-manifolds","page":"Data","title":"images on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_images.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.artificialIn_SAR_image-Tuple{Integer}","page":"Data","title":"ManoptExamples.artificialIn_SAR_image","text":"artificialIn_SAR_image([pts=500])\n\ngenerate an artificial InSAR image, i.e. phase valued data, of size pts x pts points.\n\nThis data set was introduced for the numerical examples in Bergmann et. al., SIAM J Imag Sci, 2014.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S2_rotation_image","page":"Data","title":"ManoptExamples.artificial_S2_rotation_image","text":"artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])\n\nCreate an image with a rotation on each axis as a parametrization.\n\nOptional Parameters\n\npts – (64) number of pixels along one dimension\nrotations – ((.5,.5)) number of total rotations performed on the axes.\n\nThis dataset was used in the numerical example of Section 5.1 of Bačák et al., SIAM J Sci Comput, 2016.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_image","page":"Data","title":"ManoptExamples.artificial_S2_whirl_image","text":"artificial_S2_whirl_image([pts::Int=64])\n\nGenerate an artificial image of data on the 2 sphere,\n\nArguments\n\npts – (64) size of the image in pts×pts pixel.\n\nThis example dataset was used in the numerical example in Section 5.5 of Laus et al., SIAM J Imag Sci., 2017\n\nIt is based on artificial_S2_rotation_image extended by small whirl patches.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_patch","page":"Data","title":"ManoptExamples.artificial_S2_whirl_patch","text":"artificial_S2_whirl_patch([pts=5])\n\ncreate a whirl within the pts×pts patch of Sphere(@ref)(2)-valued image data.\n\nThese patches are used within artificial_S2_whirl_image.\n\nOptional Parameters\n\npts – (5) size of the patch. If the number is odd, the center is the north pole.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image","page":"Data","title":"ManoptExamples.artificial_SPD_image","text":"artificial_SPD_image([pts=64, stepsize=1.5])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.\n\nThis dataset was used in the numerical example of Section 5.2 of Bačák et al., SIAM J Sci Comput, 2016.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image2","page":"Data","title":"ManoptExamples.artificial_SPD_image2","text":"artificial_SPD_image2([pts=64, fraction=.66])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.\n\nThis data set was introduced in the numerical examples of Section of Bergmann, Presch, Steidl, SIAM J Imag Sci, 2016\n\n\n\n\n\n","category":"function"},{"location":"data/#Literature","page":"Data","title":"Literature","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\n","category":"page"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny BergmannLaura Weigl 2023-07-02","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139397\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.430690947905521","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412961981726742","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Total-Variation/#Total-Variation-Minimization","page":"Total Variation","title":"Total Variation Minimization","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Total-Variation/#Introduction","page":"Total Variation","title":"Introduction","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.","category":"page"},{"location":"examples/Total-Variation/#The-manifold-valued-ROF-model","page":"Total Variation","title":"The manifold-valued ROF model","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold s = (s_i)_i=1^N in mathbb M^n of length n in mathbb N, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term D(ps) to “stay close to” s and a regularizer R(p). For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"operatorname*argmin_pinmathcal M^n\nf(p)\nqquad\nf(p) = D(ps) + α R(p) = sum_i=1^n d_mathcal M^2(s_ip_i) + αsum_i=1^n-1 d_mathcal M(p_ip_i+1)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"where α 0 is a weight parameter.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost f(p) to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any p_i=p_i+1. So we have to use another technique.","category":"page"},{"location":"examples/Total-Variation/#THe-Cyclic-Proximal-Point-algorithm","page":"Total Variation","title":"THe Cyclic Proximal Point algorithm","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the the Cyclic Proximal Point Algorithm [Bac14].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.","category":"page"},{"location":"examples/Total-Variation/#The-Optimsation","page":"Total Variation","title":"The Optimsation","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Manifolds, Manopt, ManoptExamples, ManifoldDiff\nusing ManifoldDiff: prox_distance\nn = 500 #Signal length\nσ = 0.2 # amount of noise\nα = 0.5# in the TV model","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We define a few colors","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Colors, NamedColors, ColorSchemes, Plots, Random\ndata_color = RGBA{Float64}(colorant\"black\")\nlight_color = RGBA{Float64}(colorant\"brightgrey\")\nrecon_color = RGBA{Float64}(colorant\"vibrantorange\")\nnoisy_color = RGBA{Float64}(colorant\"vibrantteal\")","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Random.seed!(23)\nM = Circle()\nN = PowerManifold(M, n)\ndata = ManoptExamples.artificial_S1_signal(n)\ns = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]\nt = range(0.0, 1.0; length=n)\nscene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=noisy_color,\n markerstrokecolor=noisy_color,\n lab=\"noisy\",\n)\nyticks!(\n [-π, -π / 2, 0, π / 2, π],\n [raw\"$-\\pi$\", raw\"$-\\frac{\\pi}{2}$\", raw\"$0$\", raw\"$\\frac{\\pi}{2}$\", raw\"$\\pi$\"],\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Defining cost and the proximal maps, which are actually 3 proxes to be precise.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)\nproxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_TV(N, α * λ, p))","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We run the algorithm","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"o = cyclic_proximal_point(\n N,\n f,\n proxes_f,\n s;\n λ=i -> π / (2 * i),\n debug=[\n :Iteration,\n \" | \",\n DebugProximalParameter(),\n \" | \",\n :Cost,\n \" | \",\n :Change,\n \"\\n\",\n 1000,\n :Stop,\n ],\n record=[:Iteration, :Cost, :Change, :Iterate],\n return_state=true,\n);","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Initial | | f(x): 59.187445 | \n# 1000 | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283\n# 2000 | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678\n# 3000 | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907\n# 4000 | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957\n# 5000 | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175\nThe algorithm reached its maximal number of iterations (5000).","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can see that the cost reduces nicely. Let’s extract the result an the recorded values","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"recon = get_solver_result(o)\nrecord = get_record(o)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We get","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"scene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=light_color,\n markerstrokecolor=light_color,\n lab=\"noisy\",\n)\nscatter!(\n scene,\n t,\n recon;\n markersize=2,\n markercolor=recon_color,\n markerstrokecolor=recon_color,\n lab=\"reconstruction\",\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”","category":"page"},{"location":"examples/Total-Variation/#Outlook","page":"Total Variation","title":"Outlook","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the operatornameTV_2 yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Another extension for both first and second order TV is to apply this for manifold-valued images S = (S_ij)_ij=1^mn in mathcal M^mn, where the distances in the regularizer are then used in both the first dimension i and the second dimension j in the data.","category":"page"},{"location":"examples/Total-Variation/#Technical-Details","page":"Total Variation","title":"Technical Details","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This version of the example was generated with the following package versions.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Pkg.status()","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`\n [6e4b80f9] BenchmarkTools v1.4.0\n [35d6a980] ColorSchemes v3.24.0\n [5ae59095] Colors v0.12.10\n [7073ff75] IJulia v1.24.2\n [8ac3fa9e] LRUCache v1.6.0\n [af67fdf4] ManifoldDiff v0.3.9\n [1cead3c2] Manifolds v0.9.8\n [3362f125] ManifoldsBase v0.15.4\n [0fc0a36d] Manopt v0.4.43\n [5b8d5e80] ManoptExamples v0.1.4 `..`\n [51fcb6bd] NamedColors v0.2.2\n [91a5bcdd] Plots v1.39.0","category":"page"},{"location":"examples/Total-Variation/#Literature","page":"Total Variation","title":"Literature","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 2023-01-03","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field=ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 44 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector trnasport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |grad f| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"2.359559352025148e-14","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 2023-07-02","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get Started: Optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get Started: Optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do inplace-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393613136017\n 0.006531541407458413\n 0.7267799052788726","category":"page"},{"location":"examples/RayleighQuotient/#The-Rayleigh-Quotient","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Ronny Bergmann 2024-03-09","category":"page"},{"location":"examples/RayleighQuotient/#Introduction","page":"The Rayleigh Quotient","title":"Introduction","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For a symmetric matrix A in mathbb R^ntimes n we consider the 📖 Rayleigh Quotient","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"operatorname*argmin_x in mathbb R^n backslash 0\nfracx^mathrmTAxlVert x rVert^2","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"On the sphere we can omit the denominator and obtain","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f(p) = p^mathrmTApqquad p 𝕊^n-1","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"which by itself we can again continue in the embedding as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"tilde f(x) = x^mathrmTAxqquad x in mathbb R^n","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This cost has the nice feature that at the minimizer p^*inmathbb S^n-1 the function falue f(p^*) is the smalles eigenvalue of A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For the embedded function tilde f the gradient and Hessian can be computed with classical methods as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\ntilde f(x) = 2Ax qquad x ℝ^n\n\n^2tilde f(x)V = 2AV qquad x V ℝ^n\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold mathcal M = mathbb S^n-1 are given by","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\noperatornamegrad f(p) = 2Ap - 2(p^mathrmTAp)*pqquad p 𝕊^n-1\n\noperatornameHess f(p)X = 2AX - 2(p^mathrmTAX)p - 2(p^mathrmTAp)Xqquad p 𝕊^n-1 X in T_p𝕊^n-1\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first generate an example martrx A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random\nRandom.seed!(42)\nn = 500\nA = Symmetric(randn(n,n))","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And the manifolds","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"M = Sphere(n-1)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Sphere(499, ℝ)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"E = get_embedding(M)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean(500; field=ℝ)","category":"page"},{"location":"examples/RayleighQuotient/#Setup-the-corresponding-functions","page":"The Rayleigh Quotient","title":"Setup the corresponding functions","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute f is called with M as their first argument and tilde f if called with E.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We instantiate","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f = ManoptExamples.RayleighQuotientCost(A)\ngrad_f = ManoptExamples.RayleighQuotientGrad!!(A)\nHess_f = ManoptExamples.RayleighQuotientHess!!(A)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"p0 = [1.0, zeros(n-1)...]\nX = zero_vector(M, p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"we can both call","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Y = grad_f(M,p0) # Allocates memory\ngrad_f(M,X,p0) # Computes in place of X and returns the result in X.\nnorm(M, p0, X-Y)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"0.0","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"λ = min(eigvals(A)...)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"-44.8386050469405","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-on-gradient-information","page":"The Rayleigh Quotient","title":"A Solver based on gradient information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient nabla tilde f. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n return_state=true,\n)\nq1 = get_solver_result(s)\ns","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 50 f(x): -44.206244|grad f(p)|:2.3878466243532688\n# 100 f(x): -44.546883|grad f(p)|:2.2561253654599445\n# 150 f(x): -44.765220|grad f(p)|:1.3051578932969594\n# 200 f(x): -44.824730|grad f(p)|:0.575815360373987\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n [(:Iteration, \"# %-6d\"), (:Cost, \"f(x): %f\"), (:GradientNorm, \"|grad f(p)|:%s\"), \"\\n\", 50]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q2 = gradient_descent(M, f, grad_f, p0;\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n)\n#Test that both are the same\nisapprox(M, q1,q2)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 50 f(x): -44.206244|grad f(p)|:2.3878466243532728\n# 100 f(x): -44.546883|grad f(p)|:2.2561253654599707\n# 150 f(x): -44.765220|grad f(p)|:1.305157893296953\n# 200 f(x): -44.824730|grad f(p)|:0.5758153603739836\n\ntrue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We can also benchmark both","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 19 samples with 1 evaluation.\n Range (min … max): 265.570 ms … 284.588 ms ┊ GC (min … max): 7.90% … 7.34%\n Time (median): 268.441 ms ┊ GC (median): 7.96%\n Time (mean ± σ): 270.099 ms ± 4.764 ms ┊ GC (mean ± σ): 7.93% ± 0.26%\n\n ▃ █▃ █ \n ▇▁▁▁█▇██▁▇▇▁█▁▁▇▇▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▇▁▁▁▁▇▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▇ ▁\n 266 ms Histogram: frequency by time 285 ms <\n\n Memory estimate: 1.13 GiB, allocs estimate: 3853.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 162 samples with 1 evaluation.\n Range (min … max): 30.175 ms … 37.465 ms ┊ GC (min … max): 0.00% … 0.00%\n Time (median): 30.600 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 31.001 ms ± 901.457 μs ┊ GC (mean ± σ): 1.10% ± 1.75%\n\n ▅▇█▃▅▆█▃ ▁ ▆ \n ▅█████████▆▄▄▁▁▁▃▁▃▁▁▁▁▁▃▁▁▁▁▃▃▆▄███▇▅▆▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃ ▃\n 30.2 ms Histogram: frequency by time 33.3 ms <\n\n Memory estimate: 12.02 MiB, allocs estimate: 3246.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see, that the conversion costs a bit of performance, but if the Euclidean gradient is easier to compute, this might still be ok.","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-(also)-on-(approximate)-Hessian-information","page":"The Rayleigh Quotient","title":"A Solver based (also) on (approximate) Hessian information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To also involve the Hessian, we consider the trust regions solver with three cases:","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean, approximating the Hessian\nEuclidean, providing the Hessian\nRiemannian, providing the Hessian but also using in-place evaluations.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -44.054570|grad f(p)|:9.520440806961885\n# 20 f(x): -44.512159|grad f(p)|:3.8960976303377146\n# 30 f(x): -44.750745|grad f(p)|:4.0172063476264075\n# 40 f(x): -44.921406|grad f(p)|:4.0629541064444235\n# 50 f(x): -44.944986|grad f(p)|:1.5625926334092841\n# 60 f(x): -44.962671|grad f(p)|:1.4844829786311928\n# 70 f(x): -44.981071|grad f(p)|:1.406186078892307\n# 80 f(x): -44.998912|grad f(p)|:1.333230383118243\n# 90 f(x): -45.016067|grad f(p)|:1.2712292976953228\n# 100 f(x): -45.033852|grad f(p)|:1.2245396895601803\n# 110 f(x): -45.054112|grad f(p)|:1.1949140426096447\n# 120 f(x): -45.077761|grad f(p)|:1.181336063241073\n# 130 f(x): -45.104051|grad f(p)|:1.1807084432424522\n# 140 f(x): -45.131158|grad f(p)|:1.1891034869646029\n# 150 f(x): -45.157245|grad f(p)|:1.2028717827098632\n# 160 f(x): -45.181092|grad f(p)|:1.2191967547483598\n# 170 f(x): -45.202141|grad f(p)|:1.2361671256155067\n# 180 f(x): -45.220310|grad f(p)|:1.252614027690994\n# 190 f(x): -45.235779|grad f(p)|:1.2678969023508213\n# 200 f(x): -45.248841|grad f(p)|:1.2817199840828324\n# 210 f(x): -45.256727|grad f(p)|:1.2916659158016648\n# 220 f(x): -45.256727|grad f(p)|:1.2916659158016648\n# 230 f(x): -45.256727|grad f(p)|:1.2916659157663253\n# 240 f(x): -45.256727|grad f(p)|:1.2916659156249692\n# 250 f(x): -45.256727|grad f(p)|:1.291665915483601\n# 260 f(x): -45.256727|grad f(p)|:1.2916659153422445\n# 270 f(x): -45.256727|grad f(p)|:1.291665915200879\n# 280 f(x): -45.256727|grad f(p)|:1.2916659150595229\n# 290 f(x): -45.256727|grad f(p)|:1.2916659149181455\n# 300 f(x): -45.256727|grad f(p)|:1.291665914776787\n# 310 f(x): -45.256727|grad f(p)|:1.2916659146354228\n# 320 f(x): -45.256727|grad f(p)|:1.2916659144940739\n# 330 f(x): -45.256727|grad f(p)|:1.2916659143526876\n# 340 f(x): -45.256727|grad f(p)|:1.2916659142113394\n# 350 f(x): -45.256727|grad f(p)|:1.2916659140699758\n# 360 f(x): -45.256727|grad f(p)|:1.2916659139286075\n# 370 f(x): -45.256727|grad f(p)|:1.2916659137872586\n# 380 f(x): -45.256727|grad f(p)|:1.2916659136458828\n# 390 f(x): -45.256727|grad f(p)|:1.2916659135045347\n# 400 f(x): -45.256727|grad f(p)|:1.2916659133631683\n# 410 f(x): -45.256727|grad f(p)|:1.2916659132218014\n# 420 f(x): -45.256727|grad f(p)|:1.291665913080452\n# 430 f(x): -45.256727|grad f(p)|:1.2916659129390704\n# 440 f(x): -45.256727|grad f(p)|:1.2916659127977244\n# 450 f(x): -45.256727|grad f(p)|:1.2916659126563357\n# 460 f(x): -45.256727|grad f(p)|:1.2916659125149934\n# 470 f(x): -45.256727|grad f(p)|:1.291665912373618\n# 480 f(x): -45.256727|grad f(p)|:1.2916659122322556\n# 490 f(x): -45.256727|grad f(p)|:1.2916659120908875\n# 500 f(x): -45.256727|grad f(p)|:1.2916659119495382\n# 510 f(x): -45.256727|grad f(p)|:1.2916659118081695\n# 520 f(x): -45.256727|grad f(p)|:1.2916659116667941\n# 530 f(x): -45.256727|grad f(p)|:1.2916659115254383\n# 540 f(x): -45.256727|grad f(p)|:1.291665911384073\n# 550 f(x): -45.256727|grad f(p)|:1.291665911242725\n# 560 f(x): -45.256727|grad f(p)|:1.2916659111013584\n# 570 f(x): -45.256727|grad f(p)|:1.2916659109599946\n# 580 f(x): -45.256727|grad f(p)|:1.2916659108186235\n# 590 f(x): -45.256727|grad f(p)|:1.2916659106772588\n# 600 f(x): -45.256727|grad f(p)|:1.291665910535912\n# 610 f(x): -45.256727|grad f(p)|:1.2916659103945327\n# 620 f(x): -45.256727|grad f(p)|:1.291665910253165\n# 630 f(x): -45.256727|grad f(p)|:1.2916659101118186\n# 640 f(x): -45.256727|grad f(p)|:1.2916659099704497\n# 650 f(x): -45.256727|grad f(p)|:1.291665909829113\n# 660 f(x): -45.256727|grad f(p)|:1.29166590968772\n# 670 f(x): -45.256727|grad f(p)|:1.2916659095463716\n# 680 f(x): -45.256727|grad f(p)|:1.291665909404996\n# 690 f(x): -45.256727|grad f(p)|:1.2916659092636467\n# 700 f(x): -45.256727|grad f(p)|:1.2916659091222746\n# 710 f(x): -45.256727|grad f(p)|:1.2916659089809122\n# 720 f(x): -45.256727|grad f(p)|:1.2916659088395555\n# 730 f(x): -45.256727|grad f(p)|:1.2916659086982\n# 740 f(x): -45.256727|grad f(p)|:1.2916659085568292\n# 750 f(x): -45.256727|grad f(p)|:1.2916659084154538\n# 760 f(x): -45.256727|grad f(p)|:1.2916659082740989\n# 770 f(x): -45.256727|grad f(p)|:1.2916659081327297\n# 780 f(x): -45.256727|grad f(p)|:1.2916659079913815\n# 790 f(x): -45.256727|grad f(p)|:1.291665907850015\n# 800 f(x): -45.256727|grad f(p)|:1.291665907708641\n# 810 f(x): -45.256727|grad f(p)|:1.2916659075672852\n# 820 f(x): -45.256727|grad f(p)|:1.2916659074259267\n# 830 f(x): -45.256727|grad f(p)|:1.2916659072845595\n# 840 f(x): -45.256727|grad f(p)|:1.2916659071431842\n# 850 f(x): -45.256727|grad f(p)|:1.2916659070018381\n# 860 f(x): -45.256727|grad f(p)|:1.2916659068604721\n# 870 f(x): -45.256727|grad f(p)|:1.2916659067191119\n# 880 f(x): -45.256727|grad f(p)|:1.2916659065777438\n# 890 f(x): -45.256727|grad f(p)|:1.29166590643638\n# 900 f(x): -45.256727|grad f(p)|:1.2916659062950224\n# 910 f(x): -45.256727|grad f(p)|:1.291665906153663\n# 920 f(x): -45.256727|grad f(p)|:1.2916659060122988\n# 930 f(x): -45.256727|grad f(p)|:1.2916659058709288\n# 940 f(x): -45.256727|grad f(p)|:1.2916659057295612\n# 950 f(x): -45.256727|grad f(p)|:1.2916659055882171\n# 960 f(x): -45.256727|grad f(p)|:1.2916659054468413\n# 970 f(x): -45.256727|grad f(p)|:1.2916659053054909\n# 980 f(x): -45.256727|grad f(p)|:1.291665905164106\n# 990 f(x): -45.256727|grad f(p)|:1.2916659050227592\n# 1000 f(x): -45.256727|grad f(p)|:1.2916659048813917","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -44.836478|grad f(p)|:1.681699351968465","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;\n evaluation=InplaceEvaluation(),\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.363357\n# 10 f(x): -44.836478|grad f(p)|:1.681699351968463","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $p0;\n objective_type=:Euclidean,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 9 samples with 1 evaluation.\n Range (min … max): 594.171 ms … 618.063 ms ┊ GC (min … max): 8.40% … 8.11%\n Time (median): 599.492 ms ┊ GC (median): 8.37%\n Time (mean ± σ): 600.660 ms ± 7.276 ms ┊ GC (mean ± σ): 8.40% ± 0.16%\n\n █ ██ █ █ █ █ █ █ \n █▁██▁▁▁▁█▁▁▁▁█▁█▁▁▁▁█▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 594 ms Histogram: frequency by time 618 ms <\n\n Memory estimate: 1.97 GiB, allocs estimate: 62496.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n objective_type=:Euclidean\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 203 samples with 1 evaluation.\n Range (min … max): 18.204 ms … 33.191 ms ┊ GC (min … max): 6.49% … 6.59%\n Time (median): 25.342 ms ┊ GC (median): 8.72%\n Time (mean ± σ): 24.617 ms ± 2.267 ms ┊ GC (mean ± σ): 8.51% ± 2.03%\n\n ▂ ▆█▆ \n █▄▄▁▄▁▄▄▁▄█▇▁▄▁▁▄▆▄▁▁▄▆▁▁▄▁▁▄▄▄████▆▁▁▄▄▁▁▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▄▄ ▆\n 18.2 ms Histogram: log(frequency) by time 30.9 ms <\n\n Memory estimate: 43.63 MiB, allocs estimate: 5471.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 424 samples with 1 evaluation.\n Range (min … max): 11.032 ms … 17.260 ms ┊ GC (min … max): 0.00% … 0.00%\n Time (median): 11.284 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 11.791 ms ± 870.710 μs ┊ GC (mean ± σ): 3.86% ± 5.39%\n\n ▁▇▇█ ▁ \n ▃██████▅▃▄▃▂▁▂▁▁▁▁▁▁▂▁▂▁▁▂▂▂▂▂▁▁▁▂▁▃▄▅▇▆▅▄▆▃▄▂▃▂▂▁▂▁▁▁▁▁▁▁▂▂ ▃\n 11 ms Histogram: frequency by time 13.8 ms <\n\n Memory estimate: 13.15 MiB, allocs estimate: 5448.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q1, q) for q ∈ [q2,q3] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 7.359460685640475e-16\n 0.048053815279360104","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q3, q) for q ∈ [q4,q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 0.08270031469111411\n 0.08270031469111411","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Which we can also see in the final cost, comparing it to the Eigenvalue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"5-element Vector{Float64}:\n 0.013874911807420176\n 0.013874911807405965\n -0.41812208889417946\n 3.552713678800501e-14\n 3.552713678800501e-14","category":"page"},{"location":"examples/RayleighQuotient/#Summary","page":"The Rayleigh Quotient","title":"Summary","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.","category":"page"},{"location":"examples/RayleighQuotient/#Literature","page":"The Rayleigh Quotient","title":"Literature","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"N. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\n","category":"page"},{"location":"helpers/error_measures/#Error-measures","page":"Error measures","title":"Error measures","text":"","category":"section"},{"location":"helpers/error_measures/","page":"Error measures","title":"Error measures","text":"Modules = [ManoptExamples]\nPages = [\"ErrorMeasures.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"helpers/error_measures/#ManoptExamples.mean_average_error-Tuple{ManifoldsBase.AbstractManifold, Any, Any}","page":"Error measures","title":"ManoptExamples.mean_average_error","text":"mean_average_error(M,x,y)\n\nCompute the (mean) squared error between the two points x and y on the PowerManifold manifold M.\n\n\n\n\n\n","category":"method"},{"location":"helpers/error_measures/#ManoptExamples.mean_squared_error-Union{Tuple{mT}, Tuple{mT, Any, Any}} where mT<:ManifoldsBase.AbstractManifold","page":"Error measures","title":"ManoptExamples.mean_squared_error","text":"mean_squared_error(M, p, q)\n\nCompute the (mean) squared error between the two points p and q on the (power) manifold M.\n\n\n\n\n\n","category":"method"},{"location":"#Welcome-to-ManoptExample.jl","page":"Home","title":"Welcome to ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"ManoptExamples.ManoptExamples","category":"page"},{"location":"#ManoptExamples.ManoptExamples","page":"Home","title":"ManoptExamples.ManoptExamples","text":"🏔️⛷️ ManoptExamples.jl – A collection of research and tutorial example problems for Manopt.jl\n\n📚 Documentation: juliamanifolds.github.io/ManoptExamples.jl\n📦 Repository: github.com/JuliaManifolds/ManoptExamples.jl\n💬 Discussions: github.com/JuliaManifolds/ManoptExamples.jl/discussions\n🎯 Issues: github.com/JuliaManifolds/ManoptExamples.jl/issues\n\n\n\n\n\n","category":"module"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/v0.1.4/siteinfo.js b/v0.1.4/siteinfo.js new file mode 100644 index 0000000..1a82889 --- /dev/null +++ b/v0.1.4/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.4"; diff --git a/v0.1.5/.documenter-siteinfo.json b/v0.1.5/.documenter-siteinfo.json new file mode 100644 index 0000000..13d244e --- /dev/null +++ b/v0.1.5/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.1","generation_timestamp":"2024-02-15T15:15:16","documenter_version":"1.2.1"}} \ No newline at end of file diff --git a/v0.1.5/assets/documenter.js b/v0.1.5/assets/documenter.js new file mode 100644 index 0000000..f531160 --- /dev/null +++ b/v0.1.5/assets/documenter.js @@ -0,0 +1,889 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', + 'minisearch': 'https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let timer = 0; +var isExpanded = true; + +$(document).on("click", ".docstring header", function () { + let articleToggleTitle = "Expand docstring"; + + debounce(() => { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function () { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'minisearch'], function($, minisearch) { + +// In general, most search related things will have "search" as a prefix. +// To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +let results = []; +let timer = undefined; + +let data = documenterSearchIndex["docs"].map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; +}); + +// list below is the lunr 2.1.3 list minus the intersect with names(Base) +// (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) +// ideally we'd just filter the original list but it's not available as a variable +const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", +]); + +let index = new minisearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with search results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + boost: { title: 100 }, + fuzzy: 2, + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + } + + return word ?? null; + }, + tokenize: (string) => string.split(/[\s\-\.]+/), + }, +}); + +index.addAll(data); + +let filters = [...new Set(data.map((x) => x.category))]; +var modal_filters = make_modal_body_filters(filters); +var filter_results = []; + +$(document).on("keyup", ".documenter-search-input", function (event) { + // Adding a debounce to prevent disruptions from super-speed typing! + debounce(() => update_search(filter_results), 300); +}); + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + $(this).removeClass("search-filter-selected"); + } else { + $(this).addClass("search-filter-selected"); + } + + // Adding a debounce to prevent disruptions from crazy clicking! + debounce(() => get_filters(), 300); +}); + +/** + * A debounce function, takes a function and an optional timeout in milliseconds + * + * @function callback + * @param {number} timeout + */ +function debounce(callback, timeout = 300) { + clearTimeout(timer); + timer = setTimeout(callback, timeout); +} + +/** + * Make/Update the search component + * + * @param {string[]} selected_filters + */ +function update_search(selected_filters = []) { + let initial_search_body = ` +
                      Type something to get started!
                      + `; + + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + results = index.search(querystring, { + filter: (result) => { + // Filtering results + if (selected_filters.length === 0) { + return result.score >= 1; + } else { + return ( + result.score >= 1 && selected_filters.includes(result.category) + ); + } + }, + }); + + let search_result_container = ``; + let search_divider = `
                      `; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + results.forEach(function (result) { + if (result.location) { + // Checking for duplication of results for the same page + if (!links.includes(result.location)) { + search_results += make_search_result(result, querystring); + count++; + } + + links.push(result.location); + } + }); + + let result_count = `
                      ${count} result(s)
                      `; + + search_result_container = ` +
                      + ${modal_filters} + ${search_divider} + ${result_count} +
                      + ${search_results} +
                      +
                      + `; + } else { + search_result_container = ` +
                      + ${modal_filters} + ${search_divider} +
                      0 result(s)
                      +
                      +
                      No result found!
                      + `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + filter_results = []; + modal_filters = make_modal_body_filters(filters, filter_results); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(initial_search_body); + } +} + +/** + * Make the modal filter html + * + * @param {string[]} filters + * @param {string[]} selected_filters + * @returns string + */ +function make_modal_body_filters(filters, selected_filters = []) { + let str = ``; + + filters.forEach((val) => { + if (selected_filters.includes(val)) { + str += `${val}`; + } else { + str += `${val}`; + } + }); + + let filter_html = ` +
                      + Filters: + ${str} +
                      + `; + + return filter_html; +} + +/** + * Make the result component given a minisearch result data object and the value of the search input as queryString. + * To view the result object structure, refer: https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ +function make_search_result(result, querystring) { + let search_divider = `
                      `; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + + let textindex = new RegExp(`\\b${querystring}\\b`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`\\b${querystring}\\b`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
                      +
                      ${result.title}
                      +
                      ${result.category}
                      +
                      +

                      + ${display_result} +

                      +
                      + ${display_link} +
                      +
                      + ${search_divider} + `; + + return result_div; +} + +/** + * Get selected filters, remake the filter html and lastly update the search modal + */ +function get_filters() { + let ele = $(".search-filters .search-filter-selected").get(); + filter_results = ele.map((x) => $(x).text().toLowerCase()); + modal_filters = make_modal_body_filters(filters, filter_results); + update_search(filter_results); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let search_modal_header = ` + +`; + +let initial_search_body = ` +
                      Type something to get started!
                      +`; + +let search_modal_footer = ` +
                      + + Ctrl + + / to search + + esc to close +
                      +`; + +$(document.body).append( + ` + + ` +); + +document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); +}); + +document.querySelector(".close-search-modal").addEventListener("click", () => { + closeModal(); +}); + +$(document).on("click", ".search-result-link", function () { + closeModal(); +}); + +document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; +}); + +// Functions to open and close a modal +function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); +} + +function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
                      Type something to get started!
                      + `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); +} + +document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "" + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "" + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/v0.1.5/assets/themes/documenter-dark.css b/v0.1.5/assets/themes/documenter-dark.css new file mode 100644 index 0000000..9f5449f --- /dev/null +++ b/v0.1.5/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-info-light{color:#ebf7ff !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#b9e2fe !important}.has-background-info-light{background-color:#ebf7ff !important}.has-text-info-dark{color:#0e9dfb !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#40b1fc !important}.has-background-info-dark{background-color:#0e9dfb !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-success-light{color:#ebfff3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#b8ffd6 !important}.has-background-success-light{background-color:#ebfff3 !important}.has-text-success-dark{color:#00eb64 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#1fff7e !important}.has-background-success-dark{background-color:#00eb64 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-warning-light{color:#fffaeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#ffedb8 !important}.has-background-warning-light{background-color:#fffaeb !important}.has-text-warning-dark{color:#d19c00 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffbf05 !important}.has-background-warning-dark{background-color:#d19c00 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-danger-light{color:#fdeeec !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fac3bd !important}.has-background-danger-light{background-color:#fdeeec !important}.has-text-danger-dark{color:#ec311d !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f05c4c !important}.has-background-danger-dark{background-color:#ec311d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:#024c7d;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#def2fe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#d2edfe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:#008438;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#deffec;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#d1ffe5;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:#ad8100;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fff7de;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fff3d1;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#fce3e0;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#fcd8d5;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#ebf7ff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#0e9dfb}html.theme--documenter-dark .message.is-success{background-color:#ebfff3}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#00eb64}html.theme--documenter-dark .message.is-warning{background-color:#fffaeb}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#d19c00}html.theme--documenter-dark .message.is-danger{background-color:#fdeeec}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#ec311d}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#024c7d;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#024c7d}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#024c7d}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#008438;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#008438}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#008438}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#ad8100;color:#fff}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ad8100}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#ad8100}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#9e1b0d}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#9e1b0d}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#024c7d !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#008438 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#ad8100 !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#9e1b0d !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;overflow:auto}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:whitesmoke;background-color:#33415580;border-radius:0.6rem}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/v0.1.5/assets/themes/documenter-light.css b/v0.1.5/assets/themes/documenter-light.css new file mode 100644 index 0000000..2f168c7 --- /dev/null +++ b/v0.1.5/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-info-light{color:#ecf7fe !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#bde2fa !important}.has-background-info-light{background-color:#ecf7fe !important}.has-text-info-dark{color:#0e72b4 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#1190e3 !important}.has-background-info-dark{background-color:#0e72b4 !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-success-light{color:#eefcf3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c2f4d4 !important}.has-background-success-light{background-color:#eefcf3 !important}.has-text-success-dark{color:#198f43 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#21bb57 !important}.has-background-success-dark{background-color:#198f43 !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#947600 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#c79f00 !important}.has-background-warning-dark{background-color:#947600 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-danger-light{color:#ffeceb !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#ffbbb8 !important}.has-background-danger-light{background-color:#ffeceb !important}.has-text-danger-dark{color:#f50c00 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#ff3429 !important}.has-background-danger-dark{background-color:#f50c00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:#209cee;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e0f1fd;border-color:transparent;color:#0e72b4}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#d4ecfc;border-color:transparent;color:#0e72b4}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:#22c35b;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#eefcf3;color:#198f43}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e3faeb;border-color:transparent;color:#198f43}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#d8f8e3;border-color:transparent;color:#198f43}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:#ffdd57;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:#da0b00;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#ffe0de;border-color:transparent;color:#f50c00}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#ffd3d1;border-color:transparent;color:#f50c00}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-success.is-light{background-color:#eefcf3;color:#198f43}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#da0b00;color:#fff}.notification.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ecf7fe;color:#0e72b4}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#eefcf3;color:#198f43}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#947600}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#ffeceb;color:#f50c00}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#ecf7fe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#0e72b4}.message.is-success{background-color:#eefcf3}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#198f43}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#ffeceb}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#f50c00}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#209cee;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#209cee}.panel.is-info .panel-block.is-active .panel-icon{color:#209cee}.panel.is-success .panel-heading{background-color:#22c35b;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#22c35b}.panel.is-success .panel-block.is-active .panel-icon{color:#22c35b}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#da0b00;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#da0b00}.panel.is-danger .panel-block.is-active .panel-icon{color:#da0b00}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#209cee !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#22c35b !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#ffdd57 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#da0b00 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;overflow:auto}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/v0.1.5/assets/themeswap.js b/v0.1.5/assets/themeswap.js new file mode 100644 index 0000000..9f5eebe --- /dev/null +++ b/v0.1.5/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/v0.1.5/assets/warner.js b/v0.1.5/assets/warner.js new file mode 100644 index 0000000..3f6f5d0 --- /dev/null +++ b/v0.1.5/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
                      Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/v0.1.5/changelog/index.html b/v0.1.5/changelog/index.html new file mode 100644 index 0000000..0022ef5 --- /dev/null +++ b/v0.1.5/changelog/index.html @@ -0,0 +1,2 @@ + +Changelog · ManoptExamples.jl

                      Changelog

                      All notable changes to this Julia package will be documented in this file.

                      The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

                      [0.1.3] – 11/12/2023

                      Added

                      • Total variation Minimization cost, proxes, and an example
                      • Bézier curve cost, gradients, and an example.

                      [0.1.3] – 16/09/2023

                      Added

                      • Rayleigh Quotient functions added
                      • an example illustrating Euclidean gradient/HEssian conversion
                      • Add Literature with DocumenterCitations

                      [0.1.2] – 13/06/2023

                      Added

                      • Update examples to use Quarto
                      • Add DC examples

                      [0.1.1] – 01/03/2023

                      Added

                      • Rosenbrock function and examples

                      [0.1.0] – 18/02/2023

                      Added

                      • Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested
                      • Setup Documentation to provide one example Quarto file for every example objective to illustrate how to use them
                      diff --git a/v0.1.5/contributing/index.html b/v0.1.5/contributing/index.html new file mode 100644 index 0000000..11076c6 --- /dev/null +++ b/v0.1.5/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

                      Contributing to Manopt.jl

                      First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

                      The following is a set of guidelines to ManoptExamples.jl.

                      Table of Contents

                      I just have a question

                      The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

                      How can I file an issue?

                      If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

                      How can I contribute?

                      Add an objective

                      The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

                      If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

                      If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

                      • cost functions are always of the form cost_ and a fitting name
                      • gradient functions are always of the gradient_ and a fitting name, followed by an !

                      for in-place gradients and by !! if it is a struct that can provide both.

                      It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

                      Add an example

                      If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

                      Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

                      Code style

                      We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

                      We also follow a few internal conventions:

                      • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
                      • within a file the structs should come first and functions second. The only exception are constructors for the structs
                      • within both blocks an alphabetical order is preferable.
                      • The above implies that the mutating variant of a function follows the non-mutating variant.
                      • There should be no dangling = signs.
                      • Always add a newline between things of different types (struct/method/const).
                      • Always add a newline between methods for different functions (including in-place/non-mutating variants).
                      • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
                      • All import/using/include should be in the main module file.
                      • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
                      • the Quarto Markdown files are excluded from this formatting.
                      diff --git a/v0.1.5/data/index.html b/v0.1.5/data/index.html new file mode 100644 index 0000000..a841668 --- /dev/null +++ b/v0.1.5/data/index.html @@ -0,0 +1,13 @@ + +Data · ManoptExamples.jl

                      Data sets

                      Signals on manifolds

                      ManoptExamples.LemniscateMethod
                      Lemniscate(t::Float; kwargs...)
                      +Lemniscate(n::integer; interval=[0.0, 2π], kwargs...)

                      generate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.

                      To be precise on the manifold M we use the tangent space at p and generate the curve

                      \[γ(t) \frac{a}{}\sin^2(t) + 1 \begin{pmatrix} \cos(t) \\ \cos(t)\sin(t) \end{pmatrix}\]

                      in the plane spanned by X and Y in the tangent space. Note that this curve is $2π$-periodic and a is the half-width of the curve.

                      To reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.

                      THe second variant generates n points equispaced in ìnterval` and calls the first variant.

                      Keywords

                      • manifold - (Sphere(2)) the manifold to build the lemniscate on
                      • p - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate
                      • a – (π/2.0) half-width of the Lemniscate
                      • X – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.
                      • Y – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.
                      source
                      ManoptExamples.artificial_S1_signalFunction
                      artificial_S1_signal([pts=500])

                      generate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to ``[BLSW14].

                      Optional

                      • pts: (500) number of points to sample the function
                      source
                      ManoptExamples.artificial_S1_signalMethod
                      artificial_S1_signal(x)

                      evaluate the example signal $f(x), x ∈ [0,1]$, of phase-valued data introduces in Sec. 5.1 of [BLSW14] for values outside that interval, this Signal is missing.

                      source
                      ManoptExamples.artificial_S1_slope_signalFunction
                      artificial_S1_slope_signal([pts=500, slope=4.])

                      Creates a Signal of (phase-valued) data represented on the Circle with increasing slope.

                      Optional

                      • pts: (500) number of points to sample the function.
                      • slope: (4.0) initial slope that gets increased afterwards

                      This data set was introduced for the numerical examples in [BLSW14]

                      source
                      ManoptExamples.artificial_S2_composite_Bezier_curveMethod
                      artificial_S2_composite_Bezier_curve()

                      Generate a composite Bézier curve on the [BG18].

                      It consists of 4 egments connecting the points

                      \[\mathbf d_0 = \begin{pmatrix} 0\\0\\1\end{pmatrix},\quad +\mathbf d_1 = \begin{pmatrix} 0\\-1\\0\end{pmatrix},\quad +\mathbf d_2 = \begin{pmatrix} -1\\0\\0\end{pmatrix},\text{ and } +\mathbf d_3 = \begin{pmatrix} 0\\0\\-1\end{pmatrix}.\]

                      where instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be $C^1$.

                      We define

                      \[X_0 = \frac{π}{8\sqrt{2}}\begin{pmatrix}1\\-1\\0\end{pmatrix},\quad +X_1 = \frac{π}{4\sqrt{2}}\begin{pmatrix}1\\0\\1\end{pmatrix},\quad +X_2 = \frac{π}{4\sqrt{2}}\begin{pmatrix}0\\1\\-1\end{pmatrix},\text{ and } +X_3 = \frac{π}{8\sqrt{2}}\begin{pmatrix}-1\\1\\0\end{pmatrix},\]

                      where we defined each $X_i \in T_{d_i}\mathbb S^2$. We defined three BezierSegments

                      of cubic Bézier curves as follows

                      \[\begin{align*} +b_{0,0} &= d_0, \quad & b_{1,0} &= \exp_{d_0}X_0, \quad & b_{2,0} &= \exp_{d_1}X_1, \quad & b_{3,0} &= d_1\\ +b_{0,1} &= d_1, \quad & b_{1,1} &= \exp_{d_1}(-X_1), \quad & b_{2,1} &= \exp_{d_2}X_2, \quad & b_{3,1} &= d_2\\ +b_{0,2} &= d_2, \quad & b_{1,1} &= \exp_{d_2}(-X_2), \quad & b_{2,2} &= \exp_{d_3}X_3, \quad & b_{3,2} &= d_3. +\end{align*}\]

                      source

                      images on manifolds

                      ManoptExamples.artificial_S2_rotation_imageFunction
                      artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])

                      Create an image with a rotation on each axis as a parametrization.

                      Optional Parameters

                      • pts: (64) number of pixels along one dimension
                      • rotations: ((.5,.5)) number of total rotations performed on the axes.

                      This dataset was used in the numerical example of Section 5.1 of [BBSW16].

                      source
                      ManoptExamples.artificial_SPD_imageFunction
                      artificial_SPD_image([pts=64, stepsize=1.5])

                      create an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.

                      This dataset was used in the numerical example of Section 5.2 of [BBSW16].

                      source
                      ManoptExamples.artificial_SPD_image2Function
                      artificial_SPD_image2([pts=64, fraction=.66])

                      create an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.

                      This data set was introduced in the numerical examples of Section of [BPS16]

                      source

                      Literature

                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [BPS16]
                      R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
                      [LNPS17]
                      F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
                      diff --git a/v0.1.5/examples/Bezier-curves/index.html b/v0.1.5/examples/Bezier-curves/index.html new file mode 100644 index 0000000..0451d28 --- /dev/null +++ b/v0.1.5/examples/Bezier-curves/index.html @@ -0,0 +1,68 @@ + +Minimizing the Acceleration of Bézier Curves on the Sphere · ManoptExamples.jl

                      Minimizing the Acceleration of Bézier Curves on the Sphere

                      Ronny Bergmann 2023-06-06

                      using Manifolds, Manopt, ManoptExamples

                      Introduction

                      Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as

                      function bezier(M::AbstractManifold, t, pts::NTuple)
                      +    p = bezier(M, t, pts[1:(end - 1)])
                      +    q = bezier(M, t, pts[2:end])
                      +    return shortest_geodesic(M, p, q, t)
                      +end
                      +function bezier(M::AbstractManifold, t, pts::NTuple{2})
                      +    return shortest_geodesic(M, pts[1], pts[2], t)
                      +end

                      which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.

                      In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].

                      using ManoptExamples:
                      +    artificial_S2_composite_Bezier_curve,
                      +    BezierSegment,
                      +    de_Casteljau,
                      +    get_Bezier_degrees,
                      +    get_Bezier_inner_points,
                      +    get_Bezier_junctions,
                      +    get_Bezier_junction_tangent_vectors,
                      +    get_Bezier_points,
                      +    get_Bezier_segments,
                      +    grad_L2_acceleration_Bezier,
                      +    L2_acceleration_Bezier

                      This notebook reproduces the example form Section 5.2 in [BG18].

                      The following image illustrates how the de-Casteljau algorithm works for one segment.

                      A Bezier segment and illustration of the de-Casteljau algorithm

                      Approximating data by a curve with minimal accelartion

                      We first load our example data

                      M = Sphere(2)
                      +B = artificial_S2_composite_Bezier_curve()
                      +data_points = get_Bezier_junctions(M, B)

                      Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.

                      The original curve

                      We continue to recude the points, since we “know” sme points due to the $C^1$ property: the second to last control point of the first segment $b_{0,2}$, the joint junction point connecting both segments $b_{0,3}=b_{1,0}$ and the second control point $b_{1,1}$ of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.

                      We can use this reduced form as the variable to optimize and the one from the data as our initial point.

                      pB = get_Bezier_points(M, B, :differentiable)
                      +N = PowerManifold(M, NestedPowerRepresentation(), length(pB))
                      PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)

                      And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the $λ=10$

                      curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient
                      +λ = 10.0
                      +function f(M, pB)
                      +    return L2_acceleration_Bezier(
                      +        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
                      +    )
                      +end
                      +function grad_f(M, pB)
                      +    return grad_L2_acceleration_Bezier(
                      +        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
                      +    )
                      +end
                      grad_f (generic function with 1 method)

                      Then we can optimize

                      x0 = pB
                      +pB_opt = gradient_descent(
                      +    N,
                      +    f,
                      +    grad_f,
                      +    x0;
                      +    stepsize=ArmijoLinesearch(N;
                      +        initial_stepsize=1.0,
                      +        retraction_method=ExponentialRetraction(),
                      +        contraction_factor=0.5,
                      +        sufficient_decrease=0.001,
                      +    ),
                      +    stopping_criterion=StopWhenChangeLess(1e-5) |
                      +                       StopWhenGradientNormLess(1e-7) |
                      +                       StopAfterIteration(300),
                      +    debug=[
                      +        :Iteration,
                      +        " | ",
                      +        :Cost,
                      +        " | ",
                      +        DebugGradientNorm(),
                      +        " | ",
                      +        DebugStepsize(),
                      +        " | ",
                      +        :Change,
                      +        "\n",
                      +        25,
                      +        :Stop,
                      +    ],
                      +);
                      Initial  | f(x): 10.647244 |  |  | 
                      +# 25     | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281
                      +# 50     | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780
                      +# 75     | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590
                      +# 100    | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745
                      +The algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.

                      And we can again look at the result

                      The result looks as

                      The resulting curve

                      where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.

                      [ABBR23]
                      S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      diff --git a/v0.1.5/examples/Difference-of-Convex-Benchmark/index.html b/v0.1.5/examples/Difference-of-Convex-Benchmark/index.html new file mode 100644 index 0000000..eb37167 --- /dev/null +++ b/v0.1.5/examples/Difference-of-Convex-Benchmark/index.html @@ -0,0 +1,165 @@ + +A Benchmark · ManoptExamples.jl

                      Benchmark of the Difference of Convex Algorithms

                      Ronny Bergmann 2023-06-06

                      Introduction

                      In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.

                      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ \ g(p) - h(p)\]

                      where $g,h\colon \mathcal M \to \mathbb R$ are geodesically convex function on the Riemannian manifold $\mathcal M$.

                      using LinearAlgebra, Random, Statistics, BenchmarkTools
                      +using Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots
                      +Random.seed!(42)

                      and we load a few nice colors

                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +teal = paul_tol["mutedteal"]

                      The DC Problem

                      We start with defining the two convex functions $g,h$ and their gradients as well as the DC problem $f$ and its gradient for the problem

                      \[ \operatorname*{arg\,min}_{p\in\mathcal M}\ \ \bigl( \log\bigr(\det(p)\bigr)\bigr)^4 - \bigl(\log \det(p) \bigr)^2.\]

                      where the critical points obtain a functional value of $-\frac{1}{4}$.

                      where $\mathcal M$ is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.

                      We first define the corresponding functions

                      g(M, p) = log(det(p))^4
                      +h(M, p) = log(det(p))^2
                      +f(M, p) = g(M, p) - h(M, p)

                      and their gradients

                      grad_g(M, p) = 4 * (log(det(p)))^3 * p
                      +grad_h(M, p) = 2 * log(det(p)) * p
                      +grad_f(M, p) = grad_g(M, p) - grad_h(M, p)

                      which we can use to verify that the gradients of $g$ and $h$ are correct. We use for that

                      n = 6
                      +M = SymmetricPositiveDefinite(n)
                      +p0 = log(n) * Matrix{Float64}(I, n, n);
                      +X0 = 1 / n * Matrix{Float64}(I, n, n);

                      to tall both checks

                      check_gradient(M, g, grad_g, p0, X0; plot=true)

                      and

                      check_gradient(M, h, grad_h, p0, X0; plot=true)

                      which both pass the test. We continue to define their inplace variants

                      function grad_g!(M, X, p)
                      +    copyto!(M, X, p)
                      +    X .*= 4 * (log(det(p)))^3
                      +    return X
                      +end
                      +function grad_h!(M, X, p)
                      +    copyto!(M, X, p)
                      +    X .*= 2 * (log(det(p)))
                      +    return X
                      +end
                      +function grad_f!(M, X, p)
                      +    grad_g!(M, X, p)
                      +    Y = copy(M, p, X)
                      +    grad_h!(M, Y, p)
                      +    X .-= Y
                      +    return X
                      +end

                      And compare times for both algorithms, with a bit of debug output.

                      @time p_min_dca = difference_of_convex_algorithm(
                      +    M,
                      +    f,
                      +    g,
                      +    grad_h!,
                      +    p0;
                      +    grad_g=grad_g!,
                      +    gradient=grad_f!,
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[
                      +        :Iteration,
                      +        (:Cost, "f(p): %1.9f"),
                      +        (:GradientNorm, " |grad_f(p)|: %1.9f"),
                      +        (:Change, " |δp|: %1.9f"),
                      +        :Stop,
                      +        5,
                      +        "\n",
                      +    ],
                      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +);
                      Initial f(p): 137.679053470
                      +# 5     f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127
                      +# 10    f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103
                      +# 15    f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574
                      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011
                      +The algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.
                      +  3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)

                      The cost is

                      f(M, p_min_dca)
                      -0.25000000000000006

                      Similarly the DCPPA performs

                      @time p_min_dcppa = difference_of_convex_proximal_point(
                      +    M,
                      +    grad_h!,
                      +    p0;
                      +    g=g,
                      +    grad_g=grad_g!,
                      +    λ=i -> 1 / (2 * n),
                      +    cost=f,
                      +    gradient=grad_f!,
                      +    debug=[
                      +        :Iteration,
                      +        (:Cost, "f(p): %1.9f"),
                      +        " ",
                      +        (:GradientNorm, "|grad_f(p)|: %1.10f"),
                      +        (:Change, "|δp|: %1.10f"),
                      +        :Stop,
                      +        5,
                      +        "\n",
                      +    ],
                      +    evaluation=InplaceEvaluation(),
                      +    stepsize=ConstantStepsize(1.0),
                      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +);
                      Initial f(p): 137.679053470 
                      +# 5     f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692
                      +# 10    f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316
                      +# 15    f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676
                      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968
                      +# 25    f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530
                      +# 30    f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048
                      +# 35    f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001
                      +The algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.
                      +  1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)

                      It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost

                      f(M, p_min_dcppa)
                      -0.25

                      Benchmark I: Time comparison

                      We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test

                      dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()
                      +dcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()
                      +N_max=14
                      +N = 2:N_max

                      and run a benchmark for both algorithms

                      for n in N
                      +    Mn = SymmetricPositiveDefinite(n)
                      +    pn = log(n) * Matrix{Float64}(I, n, n)
                      +    bdca = @benchmark difference_of_convex_algorithm(
                      +        $Mn,
                      +        $f,
                      +        $g,
                      +        $grad_h!,
                      +        $pn;
                      +        grad_g=$grad_g!,
                      +        gradient=$grad_f!,
                      +        evaluation=InplaceEvaluation(),
                      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +    )
                      +    dca_benchmarks[n] = bdca
                      +    bdcppa = @benchmark difference_of_convex_proximal_point(
                      +        $Mn,
                      +        $grad_h!,
                      +        $pn;
                      +        g=$g,
                      +        grad_g=$grad_g!,
                      +        λ=i -> 1 / (2 * n),
                      +        cost=f,
                      +        gradient=grad_f!,
                      +        evaluation=InplaceEvaluation(),
                      +        stepsize=ConstantStepsize(1.0),
                      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +    )
                      +    dcppa_benchmarks[n] = bdcppa
                      +end

                      Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds

                      dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]
                      +dca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]
                      +dcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]
                      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Time (sec.)")
                      +plot!(dims, dca_times; label="DCA", color=indigo, linewidth=2)
                      +plot!(dims, dcppa_times; label="DCPPA", color=teal, linewidth=2)

                      Benchmark II: Iterations and cost.

                      As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.

                      N2 = [5,10,20,40,80]
                      +dims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]
                      +dca_iterations = Dict{Int,Int}()
                      +dca_costs = Dict{Int,Vector{Float64}}()
                      +dcppa_iterations = Dict{Int,Int}()
                      +dcppa_costs = Dict{Int,Vector{Float64}}()
                      @time for n in N2
                      +    println(n)
                      +    Mn = SymmetricPositiveDefinite(n)
                      +    pn = log(n) * Matrix{Float64}(I,n,n);
                      +    @time dca_st = difference_of_convex_algorithm(
                      +        Mn, f, g, grad_h!, pn;
                      +        grad_g=grad_g!,
                      +        gradient=grad_f!,
                      +        evaluation = InplaceEvaluation(),
                      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +        record = [:Iteration, :Cost],
                      +        return_state = true,
                      +    );
                      +    dca_costs[n] = get_record(dca_st, :Iteration, :Cost)
                      +    dca_iterations[n] = length(dca_costs[n])
                      +    @time dcppa_st = difference_of_convex_proximal_point(
                      +        Mn, grad_h!, pn;
                      +        g=g,
                      +        grad_g=grad_g!,
                      +        λ = i -> 1/(2*n),
                      +        cost = f,
                      +        gradient= grad_f!,
                      +        evaluation = InplaceEvaluation(),
                      +        stepsize = ConstantStepsize(1.0),
                      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +        record = [:Iteration, :Cost],
                      +        return_state = true,
                      +    );
                      +    dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)
                      +    dcppa_iterations[n] = length(dcppa_costs[n])
                      +end

                      The iterations are like

                      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Iterations")
                      +plot!(dims2, [values(dca_iterations)...]; label="DCA", color=indigo, linewidth=2)
                      +plot!(dims2, [values(dcppa_iterations)...]; label="DCPPA", color=teal, linewidth=2)

                      And for the developtment of the cost

                      where we can see that the DCA needs less iterations than the DCPPA.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [SO15]
                      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                      diff --git a/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg b/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg new file mode 100644 index 0000000..ca2e758 --- /dev/null +++ b/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg b/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg new file mode 100644 index 0000000..7baeb82 --- /dev/null +++ b/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg b/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..2131b9f --- /dev/null +++ b/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg b/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg new file mode 100644 index 0000000..d51a3c6 --- /dev/null +++ b/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg b/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..3c244f5 --- /dev/null +++ b/v0.1.5/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/Difference-of-Convex-Frank-Wolfe/index.html b/v0.1.5/examples/Difference-of-Convex-Frank-Wolfe/index.html new file mode 100644 index 0000000..1542349 --- /dev/null +++ b/v0.1.5/examples/Difference-of-Convex-Frank-Wolfe/index.html @@ -0,0 +1,214 @@ + +Frank Wolfe comparison · ManoptExamples.jl

                      A comparison of the Difference of Convex and Frank Wolfe Algorithm

                      Ronny Bergmann 2023-11-06

                      Introduction

                      In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.

                      using LinearAlgebra, Random, Statistics, BenchmarkTools
                      +using ManifoldsBase, Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots

                      and we load a few nice colors

                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +teal = paul_tol["mutedteal"]

                      We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices $\mathcal P(n)$ with the affine invariant metric. Let $q_1,\ldots,q_m \in \mathcal P(n)$ be a set of points and $\mu_1,\ldots,\mu_m$ be a set of weights, such that they sum to one. We consider then

                      \[\operatorname*{arg\,max}_{p\in\mathcal C}\ \ h(p)\]

                      with

                      \[h(p) = +\sum_{j=1}^m \mu_j d^2(p,q_i), +\quad \text{ where } +d^2(p,q_i) = \operatorname{tr}\bigl( + \log^2(p^{-\frac{1}{2}}q_jp^{-\frac{1}{2}}) +\big) +\qquad\text{and}\qquad +\mathcal C = \{ p\in {\mathcal M}\ |\ \bar L\preceq p \preceq \bar U \},\]

                      for a lower bound $L$ and an upper bound $U$ for the matrices in the positive definite sense $A \preceq B \Leftrightarrow (B-A)$ is positive semi-definite

                      When every one of the weights ${\mu}_1, \ldots {\mu}_m$ are equal, this function $h$ is known as the of the set $\{q_1, \dots, q_m\}$.

                      And for our example we set

                      Random.seed!(42)
                      +n = 20
                      +m = 100
                      +M = SymmetricPositiveDefinite(n)
                      +q = [rand(M) for _ in 1:m];
                      +w = rand(m)
                      +w ./=sum(w)

                      We use as lower and upper bound the arithmetic and geometric mean $L$ and $U$, respectively.

                      L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )
                      +U = sum( wi * qi for (wi, qi) in zip(w,q) )

                      As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use

                      p0 = (L+U)/2

                      And we can check that it is feasible

                      Common Functions

                      Given $p \in \mathcal M$, $X \in T_p\mathcal M$ on the symmetric positive definite matrices M, this method computes the closed form solution to

                      \[\operatorname*{arg\,min}_{q\in {\mathcal C}}\ \langle X, \log_p q\rangle + = \operatorname*{arg\,min}_{q\in {\mathcal C}}\ \operatorname{tr}(S\log(YqY))\]

                      where $\mathcal C = \{ q | L \preceq q \preceq U \}$, $S = p^{-1/2}Xp^{-1/2}$, and $Y=p^{-1/2}$.

                      The solution is given by $Z=X^{-1}Q\bigl( P^{\mathrm{T}}[-\operatorname{sgn}(D)]_{+}P+\hat{L}\bigr)Q^{\mathrm{T}}X^{-1}$,@ where $S=QDQ^{\mathrm{T}}$ is a diagonalization of $S$, $\hat{U}-\hat{L}=P^{\mathrm{T}}P$ with $\hat{L}=Q^{\mathrm{T}}XLXQ$ and $\hat{U}=Q^{\mathrm{T}}XUXQ$, where $[-\mbox{sgn}(D)]_{+}$ is the diagonal matrix

                      \[\operatorname{diag}\bigl( + [-\operatorname{sgn}(d_{11})]_{+}, \ldots, [-\operatorname{sgn}(d_{nn})]_{+} +\bigr)\]

                      and $D=(d_{ij})$.

                      @doc raw"""
                      +    closed_form_solution!(M, q, L, U, p X)
                      +
                      +Compute the closeed form solution of the constraint sub problem in place of ``q``.
                      +"""
                      +function closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)
                      +    # extract p^1/2 and p^{-1/2}
                      +    (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)
                      +    # Compute D & Q
                      +    e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk  = QDQ'
                      +    D = Diagonal(1.0 .* (e2.values .< 0))
                      +    Q = e2.vectors
                      +    #println(p)
                      +    Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q
                      +    Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q
                      +    P = cholesky(Hermitian(Uprime - Lprime))
                      +    z = P.U' * D * P.U + Lprime
                      +    copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)
                      +    return q
                      +end

                      The Difference of Convex Formulation

                      We use $g(p) = \iota_{\mathcal C}(p)$ as the indicator funtion of the set $\mathcal C$. We use

                      function is_pos_def(p; atol=5e-13)
                      +    e = eigen(Symmetric(p))
                      +    return all((e.values .+ atol) .> 0)
                      +end
                      +function g(p, L, U)
                      +    return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf
                      +end
                      +h(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )

                      So we can first check that p0 is feasible

                      g(p0,L,U) == 0.0
                      true

                      Now setting

                      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ g(p) - h(p)\]

                      We look for a maximum of $h$, where $g$ is minimal, i.e. $g(p)$ is zero or in other words $p \in \mathcal C$.

                      The gradient of $h$ can also be implemented in closed form as

                      grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))
                      +function grad_h!(M, X, p, w, q)
                      +    Y = copy(M, p, X)
                      +    zero_vector!(M, X, p)
                      +    for (wi, qi) in zip(w,q)
                      +        log!(M, Y, p, qi)
                      +        Y .*= - 2.0*wi
                      +        X .+= Y
                      +    end
                      +    return X
                      +end

                      And we can further define the cost, which will just be $+\infty$ outside of $\mathcal C$. We define

                      f_dc(M, p) = g(p, L, U) - h(M, p, w, q)
                      +grad_h!(M, X, p) = grad_h!(M, X, p, w, q)
                      +function grad_f_dc!(M,X, p)
                      +    grad_h!(M, X, p, w, q)
                      +    X .*= -1.0
                      +    return X
                      +end

                      Here we can omit the gradient of $g$ in the definition of $\operatorname{grad} f$, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of $\mathcal C$.

                      As the last step, we can provide the closed form solver for the DC sub problem given at iteration $k$ by

                      \[\operatorname*{arg\,min}_{p\in \mathcal C}\ + \big\langle -\operatorname{grad} h(p^{(k)}), \exp^{-1}_{p^{(k)}}p\big\rangle.\]

                      Which we con compute

                      function dc_sub_solution!(M, q, p, X)
                      +    closed_form_solution!(M, q, L, U, p, -X)
                      +    return q
                      +end

                      For safety, we might want to avoid ending up at the boundary of $\mathcal C$. That is we reduce the distance we walk towards the solution $q$ a bit.

                      function dc_sub_solution_safe!(M, q, p, X)
                      +    p_last = copy(M,p) # since p=q might be in place
                      +    closed_form_solution!(M, q, L, U, p, -X)
                      +    q_orig = copy(M,q) # since we do the following in place of q
                      +    a = minimum(real.(eigen(q-L).values))
                      +    b = minimum(real.(eigen(U-q).values))
                      +    s = 1.0
                      +    d = distance(M, p_last, q_orig);
                      +    # if we are close to zero, we reduce faster.
                      +    α = d < 1/(n^2) ? 0.66 : 0.9995;
                      +    i=0
                      +    while (a < 0) || (b < 0)
                      +        s *= α
                      +        shortest_geodesic!(M, q, p_last, q_orig, s)
                      +        a = minimum(real.(eigen(q-L).values))
                      +        b = minimum(real.(eigen(U-q).values))
                      +        #println("$i a: $a, b = $b with s=$s")
                      +        i=i+1
                      +        if (i>100) # safety fallback
                      +            #@warn " $i steps where not enough $s ($α)\n$a $b\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs"
                      +            qe = eigen(q)
                      +            if a < 0
                      +                qe.values .+= min(1e-8, n*abs(min(a,b)))
                      +            else
                      +                qe.values .-= min(1e-8, n*abs(min(a,b)))
                      +            end
                      +            q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'
                      +            a = minimum(real.(eigen(q-L).values))
                      +            b = minimum(real.(eigen(U-q).values))
                      +            return q
                      +        end
                      +    end
                      +    return q
                      +end

                      The DoC solver run

                      Let’s compare both methods when they have the same stopping criteria

                      @time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;
                      +    gradient=grad_f_dc!,
                      +    sub_problem=dc_sub_solution_safe!,
                      +    evaluation=InplaceEvaluation(),
                      +    stopping_criterion = StopAfterIteration(300) |
                      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                      +    debug = [
                      +        (:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "),
                      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                      +        30, :Stop, "\n"],
                      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                      +    return_state=true,
                      +)
                      Initial F(p): -0.77661458292831
                      +At iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.
                      + 15.450011 seconds (16.08 M allocations: 1.597 GiB, 3.16% gc time, 91.75% compilation time)
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 23 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | InplaceEvaluation()
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 300:  not reached
                      +    |Δp| < 1.0e-14: not reached
                      +    |Δgrad f| < 1.0e-9: reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 30]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                      Let’s extract the final point and look at its cost

                      p1_dc = get_solver_result(state1_dc);
                      +f_dc(M, p1_dc)
                      -0.784425242474807

                      As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.

                      [ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]
                      2-element Vector{Tuple{Float64, Float64}}:
                      + (1.1886583723800445e-12, 0.06669240322431051)
                      + (1.3411042178831775e-5, 0.0671353506908023)

                      For the statistics we extract the recordings from the state

                      Define the Frank-Wolfe functions

                      For Frank wolfe, the cost is just defined as $-h(p)$ but the minimisation is constraint to $\mathcal C$, which is enfored by the oracle.

                      f_fw(M, p) = -h(M, p, w, q)
                      +function grad_f_fw!(M,X, p)
                      +    grad_h!(M, X, p, w, q)
                      +    X .*= -1.0
                      +    return X
                      +end
                      +oracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)

                      The FW Solver Run

                      Similarly we can run the Frank-Wolfe algorithm with

                      @time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;
                      +    sub_problem=oracle_fw!,
                      +    evaluation=InplaceEvaluation(),
                      +    stopping_criterion = StopAfterIteration(10^4) |
                      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                      +    debug = [
                      +        (:Iteration, "# %-8d "), :Cost, (:Change, " |Δp|: %0.14f "),
                      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                      +        2*10^3, :Stop, "\n"],
                      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                      +    return_state=true,
                      +)
                      Initial f(x): -0.776615
                      +# 2000     f(x): -0.784420 |Δp|: 0.04611942377596  |grad f(p)|: 0.17693408  |Δgrad f(p)|: 0.17555618
                      +# 4000     f(x): -0.784421 |Δp|: 0.00372201632005  |grad f(p)|: 0.17694619  |Δgrad f(p)|: 0.00749427
                      +# 6000     f(x): -0.784422 |Δp|: 0.00205683506784  |grad f(p)|: 0.17695204  |Δgrad f(p)|: 0.00414088
                      +# 8000     f(x): -0.784422 |Δp|: 0.00140675676260  |grad f(p)|: 0.17695565  |Δgrad f(p)|: 0.00283200
                      +# 10000    f(x): -0.784422 |Δp|: 0.00106177438611  |grad f(p)|: 0.17695815  |Δgrad f(p)|: 0.00213746
                      +The algorithm reached its maximal number of iterations (10000).
                      +153.031877 seconds (55.53 M allocations: 94.003 GiB, 2.07% gc time, 0.51% compilation time)
                      +
                      +# Solver state for `Manopt.jl`s Frank Wolfe Method
                      +After 10000 iterations
                      +
                      +## Parameters
                      +* inverse retraction method: LogarithmicInverseRetraction()
                      +* retraction method: ExponentialRetraction()
                      +* sub solver state:
                      +    | InplaceEvaluation()
                      +
                      +## Stepsize
                      +DecreasingStepsize(; length=2.0,  factor=1.0,  subtrahend=0.0,  shift=2)
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 10000:    reached
                      +    |Δp| < 1.0e-14: not reached
                      +    |Δgrad f| < 1.0e-9: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "f(x): %f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 2000]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                      And we take a look at this result as well

                      p1_fw = get_solver_result(state1_fw);
                      +f_dc(M, p1_fw)
                      -0.7844220281765162

                      And its feasibility

                      [extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]
                      2-element Vector{Tuple{Float64, Float64}}:
                      + (4.904818928410655e-10, 0.06659173821656107)
                      + (3.245654983213335e-5, 0.06713970236096602)

                      Statistics

                      We extract the recorded values

                      # DoC
                      +iter1_dc = get_record(state1_dc, :Iteration, :Iteration)
                      +pk_dc = get_record(state1_dc,:Iteration,:Iterate)
                      +costs1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))
                      +dc_min = minimum(costs1_dc)
                      +# FW
                      +iter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]
                      +pk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]
                      +costs1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))

                      And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.

                      fig = plot(;
                      +    legend=:topright,
                      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x_k)-f^*$ (log. scale)",
                      +    yaxis=:log,
                      +    ylims=(1e-8, 10^-2),
                      +    xaxis=:log,
                      +    xlims=(1,10^4),
                      +)
                      +plot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label="Difference of Convex")
                      +plot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label="Frank-Wolfe")

                      This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.

                      On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [WS22]
                      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                      diff --git a/v0.1.5/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg b/v0.1.5/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg new file mode 100644 index 0000000..92a2f26 --- /dev/null +++ b/v0.1.5/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/Difference-of-Convex-Rosenbrock/index.html b/v0.1.5/examples/Difference-of-Convex-Rosenbrock/index.html new file mode 100644 index 0000000..66d5f9a --- /dev/null +++ b/v0.1.5/examples/Difference-of-Convex-Rosenbrock/index.html @@ -0,0 +1,333 @@ + +Rosenbrock Metric · ManoptExamples.jl

                      Solving Rosenbrock with the Difference of Convex Algorithm

                      Ronny Bergmann 2023-06-06

                      Introduction

                      This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.

                      Both the Rosenbrock problem

                      \[ \operatorname*{argmin}_{x\in ℝ^2} a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2,\]

                      where $a,b>0$ and usually $b=1$ and $a \gg b$, we know the minimizer $x^* = (b,b^2)^\mathrm{T}$, and also the (Euclidean) gradient

                      \[\nabla f(x) = + \begin{pmatrix} + 4a(x_1^2-x_2)\\ -2a(x_1^2-x_2) + \end{pmatrix} + + + \begin{pmatrix} + 2(x_1-b)\\ 0 + \end{pmatrix}.\]

                      They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.

                      Furthermore, the RosenbrockMetric can be used on $ℝ^2$, that is

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix},\]

                      In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.

                      1. The Euclidean Gradient
                      2. The Riemannian gradient descent with respect to the RosenbrockMetric
                      3. The Euclidean Difference of Convex Algorithm
                      4. The Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric

                      Where we obtain a difference of convex problem by writing

                      \[f(x) = a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2 + = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 - \bigl(x_1-b\bigr)^2\]

                      that is

                      \[g(x) = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 \quad\text{ and }\quad h(x) = \bigl(x_1-b\bigr)^2\]

                      using LinearAlgebra, Random, Statistics
                      +using Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots
                      +import Manopt: set_manopt_parameter!
                      +Random.seed!(42)
                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +green = paul_tol["mutedgreen"]
                      +sand = paul_tol["mutedsand"]
                      +teal = paul_tol["mutedteal"]
                      +grey = paul_tol["mutedgrey"]

                      To emphasize the effect, we choose a quite large value of a.

                      a = 2*10^5
                      +b = 1

                      and use the starting point and a direction to check gradients

                      p0 = [0.1, 0.2]

                      The Euclidean Gradient Descent.

                      For the Euclidean gradient we can just use the same approach as in the Rosenbrock example

                      M = ℝ^2
                      +f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                      +∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)

                      define a common debug vector

                      debug_vec = [
                      +        (:Iteration, "# %-8d "),
                      +        (:Cost, "F(x): %1.4e"),
                      +        " ",
                      +        (:Change, "|δp|: %1.4e | "),
                      +        (:GradientNorm, "|grad f|: %1.6e"),
                      +        :Stop,
                      +        "\n",
                      +    ]

                      and call the gradient descent algorithm

                      Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[debug_vec...,10^7],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    record=[:Iteration, :Cost],
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03
                      +# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04
                      +# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06
                      +# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08
                      +# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 53073227 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000000]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Riemannian Gradient Descent.

                      For the Riemannian case, we define

                      M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())
                      MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())

                      and the gradient is now adopted to the new metric

                      function grad_f!(M, X, p)
                      +    ∇f!!(M, X, p)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_f(M, p)
                      +    X = zero_vector(M, p)
                      +    return grad_f!(M, X, p)
                      +end
                      R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[debug_vec...,10^6],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    record=[:Iteration, :Cost],
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 1000000  F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04
                      +# 2000000  F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 2443750 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Euclidean Difference of Convex

                      For the convex case, we have to first introduce the two parts of the cost.

                      f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;
                      +f2(M, p; a=100, b=1) = (p[1] - b[1])^2;
                      +g(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)
                      +h(M, p; a=100, b=1) = f2(M, p; a=a, b=b)

                      and their (Euclidan) gradients

                      function ∇h!(M, X, p; a=100, b=1)
                      +    X[1] = 2*(p[1]-b)
                      +    X[2] = 0
                      +    return X
                      +end
                      +function ∇h(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    ∇h!(M, X, p; a=a, b=b)
                      +    return X
                      +end
                      +function ∇g!(M, X, p; a=100, b=1)
                      +    X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)
                      +    X[2] = -2*a*(p[1]^2-p[2])
                      +    return X
                      +end
                      +function ∇g(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    ∇g!(M, X, p; a=a, b=b)
                      +    return X
                      +end

                      and we define for convenience

                      docE_g(M, p) = g(M, p; a=a, b=b)
                      +docE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)
                      +docE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)
                      +docE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)
                      +function docE_∇f!(M, X, p)
                      +  Y = zero_vector(M, p)
                      +  docE_∇g!(M, X, p)
                      +  docE_∇h!(M, Y, p)
                      +  X .-= Y
                      +  return X
                      +end

                      Then we call the difference of convex algorithm on Eucldiean space $ℝ^2$.

                      E_doc_state = difference_of_convex_algorithm(
                      +    M, docE_f, docE_g, docE_∇h!, p0;
                      +    gradient=docE_∇f!,
                      +    grad_g = docE_∇g!,
                      +    debug=[debug_vec..., 10^4],
                      +    evaluation=InplaceEvaluation(),
                      +    record=[:Iteration, :Cost],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    sub_hess=nothing, # Use gradient descent
                      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 10000    F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04
                      +# 20000    F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 26549 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | # Solver state for `Manopt.jl`s Gradient Descent
                      +    | After 2000 iterations
                      +    | 
                      +    | ## Parameters
                      +    | * retraction method: ExponentialRetraction()
                      +    | 
                      +    | ## Stepsize
                      +    | ArmijoLinesearch() with keyword parameters
                      +    |   * initial_stepsize    = 1.0
                      +    |   * retraction_method   = ExponentialRetraction()
                      +    |   * contraction_factor  = 0.95
                      +    |   * sufficient_decrease = 0.1
                      +    | 
                      +    | ## Stopping Criterion
                      +    | Stop When _one_ of the following are fulfilled:
                      +    |     Max Iteration 2000:   reached
                      +    |     |grad f| < 1.0e-16: not reached
                      +    | Overall: reached
                      +    | This indicates convergence: No
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Riemannian Difference of Convex

                      We first have to again defined the gradients with respect to the new metric

                      function grad_h!(M, X, p; a=100, b=1)
                      +    ∇h!(M, X, p; a=a, b=b)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_h(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    grad_h!(M, X, p; a=a, b=b)
                      +    return X
                      +end
                      +function grad_g!(M, X, p; a=100, b=1)
                      +    ∇g!(M, X, p; a=a,b=b)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_g(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    grad_g!(M, X, p; a=a, b=b)
                      +    return X
                      +end

                      While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For $X \in ∂h(p^{(k)})$ the sunproblem top determine $p^{(k+1)}$ reads

                      \[\operatorname*{argmin}_{p\in\mathcal M} g(p) - \langle X, \log_{p^{(k)}}p\rangle\]

                      for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with $X = \operatorname{grad} h(p^{(k)})$ that

                      \[\phi(p) = g(p) - \langle X, \log_{p^{(k)}}p\rangle += a\bigl( p_{1}^2-p_{2}\bigr)^2 + + 2\bigl(p_{1}-b\bigr)^2 - 2(p^{(k)}_1-b)p_1 + 2(p^{(k)}_1-b)p^{(k)}_1,\]

                      its Euclidean gradient reads

                      \[\operatorname{grad}\phi(p) = + \nabla \varphi(p) + = \begin{pmatrix} + 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^{(k)}_1-b)\\ + -2a(p_1^2-p_2) + \end{pmatrix}\]

                      where we can again employ the gradient conversion from before to obtain the Riemannian gradient.

                      mutable struct SubGrad{P,T,V}
                      +    pk::P
                      +    Xk::T
                      +    a::V
                      +    b::V
                      +end
                      +function (ϕ::SubGrad)(M, p)
                      +    X = zero_vector(M, p)
                      +    ϕ(M, X, p)
                      +    return X
                      +end
                      +function (ϕ::SubGrad)(M, X, p)
                      +    X .= [
                      +        4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),
                      +        -2 * ϕ.a * (p[1]^2 - p[2]),
                      +    ]
                      +    riemannian_gradient!(M, X, p, X) # convert
                      +    return X
                      +end

                      And in orer to update the subsolvers gradient correctly, we have to overwrite

                      set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)
                      +set_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)

                      And we again introduce for ease of use

                      docR_g(M, p) = g(M, p; a=a, b=b)
                      +docR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)
                      +docR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)
                      +docR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)
                      +function docR_grad_f!(M, X, p)
                      +    Y = zero_vector(M, p)
                      +    docR_grad_g!(M, X, p)
                      +    docR_grad_h!(M, Y, p)
                      +    X .-= Y
                      +    return X
                      +end
                      +docR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)

                      Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.

                      R_doc_state = difference_of_convex_algorithm(
                      +    M_rb, docR_f, docR_g, docR_grad_h!, p0;
                      +    gradient=docR_grad_f!,
                      +    grad_g = docR_grad_g!,
                      +    debug=[debug_vec..., 10^6],
                      +    evaluation=InplaceEvaluation(),
                      +    record=[:Iteration, :Cost],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    sub_grad=docR_sub_grad,
                      +    sub_hess = nothing, # Use gradient descent
                      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 1235 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | # Solver state for `Manopt.jl`s Gradient Descent
                      +    | After 2000 iterations
                      +    | 
                      +    | ## Parameters
                      +    | * retraction method: ExponentialRetraction()
                      +    | 
                      +    | ## Stepsize
                      +    | ArmijoLinesearch() with keyword parameters
                      +    |   * initial_stepsize    = 1.0
                      +    |   * retraction_method   = ExponentialRetraction()
                      +    |   * contraction_factor  = 0.95
                      +    |   * sufficient_decrease = 0.1
                      +    | 
                      +    | ## Stopping Criterion
                      +    | Stop When _one_ of the following are fulfilled:
                      +    |     Max Iteration 2000:   reached
                      +    |     |grad f| < 1.0e-16: not reached
                      +    | Overall: reached
                      +    | This indicates convergence: No
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Stop = :Stop
                      +    :All = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      Comparison in Iterations

                      fig = plot(;
                      +    legend=:topright,
                      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x)$ (log. scale)",
                      +    yaxis=:log,
                      +    ylims=(1e-16, 5*1e5),
                      +    xaxis=:log,
                      +    xlims=(1,10^8),
                      +)
                      +scatter!(fig, [1,], [f(M,p0),], label=raw"$f(p_0)$", markercolor=grey)
                      +egi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries
                      +egc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries
                      +plot!(fig, egi, egc, color=teal, label="Euclidean GD")
                      +#
                      +rgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries
                      +rgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries
                      +plot!(fig, rgi, rgc, color=indigo, label="Riemannian GD")
                      +#
                      +edi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries
                      +edc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries
                      +plot!(fig, edi, edc, color=sand, label="Euclidean DoC")
                      +#
                      +rdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries
                      +rdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries
                      +plot!(fig, rdi, rdc, color=green, label="Riemannian DoC")

                      And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      diff --git a/v0.1.5/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg b/v0.1.5/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..63d64a0 --- /dev/null +++ b/v0.1.5/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/RayleighQuotient/index.html b/v0.1.5/examples/RayleighQuotient/index.html new file mode 100644 index 0000000..0623f3d --- /dev/null +++ b/v0.1.5/examples/RayleighQuotient/index.html @@ -0,0 +1,234 @@ + +The Rayleigh Quotient · ManoptExamples.jl

                      The Rayleigh Quotient

                      Ronny Bergmann 2024-03-09

                      Introduction

                      This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.

                      For a symmetric matrix $A \in \mathbb R^{n\times n}$ we consider the 📖 Rayleigh Quotient

                      \[\operatorname*{arg\,min}_{x \in \mathbb R^n \backslash \{0\}} +\frac{x^{\mathrm{T}}Ax}{\lVert x \rVert^2}.\]

                      On the sphere we can omit the denominator and obtain

                      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                      which by itself we can again continue in the embedding as

                      \[\tilde f(x) = x^{\mathrm{T}}Ax,\qquad x \in \mathbb R^n.\]

                      This cost has the nice feature that at the minimizer $p^*\in\mathbb S^{n-1}$ the function falue $f(p^*)$ is the smalles eigenvalue of $A$.

                      For the embedded function $\tilde f$ the gradient and Hessian can be computed with classical methods as

                      \[\begin{align*} +∇\tilde f(x) &= 2Ax, \qquad x ∈ ℝ^n, +\\ +∇^2\tilde f(x)[V] &= 2AV, \qquad x, V ∈ ℝ^n. +\end{align*}\]

                      Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold $\mathcal M = \mathbb S^{n-1}$ are given by

                      \[\begin{align*} +\operatorname{grad} f(p) &= 2Ap - 2(p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1}, +\\ +\operatorname{Hess} f(p)[X] &= 2AX - 2(p^{\mathrm{T}}AX)p - 2(p^{\mathrm{T}}Ap)X,\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1} +\end{align*}\]

                      Let’s first generate an example martrx $A$.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random
                      +Random.seed!(42)
                      +n = 500
                      +A = Symmetric(randn(n, n) / n)

                      And the manifolds

                      M = Sphere(n-1)
                      Sphere(499, ℝ)
                      E = get_embedding(M)
                      Euclidean(500; field=ℝ)

                      Setup the corresponding functions

                      Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute $f$ is called with M as their first argument and $\tilde f$ if called with E.

                      We instantiate

                      f = ManoptExamples.RayleighQuotientCost(A)
                      +grad_f = ManoptExamples.RayleighQuotientGrad!!(A)
                      +Hess_f = ManoptExamples.RayleighQuotientHess!!(A)

                      the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory

                      p0 = [1.0, zeros(n-1)...]
                      +X = zero_vector(M, p0)

                      we can both call

                      Y = grad_f(M, p0)  # Allocates memory
                      +grad_f(M, X, p0)    # Computes in place of X and returns the result in X.
                      +norm(M, p0, X-Y)
                      0.0

                      Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.

                      First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute

                      λ = min(eigvals(A)...)
                      -0.08967721009388108

                      A Solver based on gradient information

                      Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient $\nabla \tilde f$. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].

                      But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent

                      s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                      +    return_state=true,
                      +)
                      +q1 = get_solver_result(s)
                      +s
                      Initial f(x): -0.000727
                      +# 50    f(x): -0.088415|grad f(p)|:0.004530500043902619
                      +# 100   f(x): -0.089097|grad f(p)|:0.004589417101266096
                      +# 150   f(x): -0.089530|grad f(p)|:0.0026028331895358247
                      +# 200   f(x): -0.089650|grad f(p)|:0.0012359084298719039
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 200 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 200:  reached
                      +    |grad f| < 1.0e-8: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    [(:Iteration, "# %-6d"), (:Cost, "f(x): %f"), (:GradientNorm, "|grad f(p)|:%s"), "\n", 50]

                      From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.

                      And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.

                      q2 = gradient_descent(M, f, grad_f, p0;
                      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                      +)
                      +#Test that both are the same
                      +isapprox(M, q1,q2)
                      Initial f(x): -0.000727
                      +# 50    f(x): -0.088415|grad f(p)|:0.004530500043902567
                      +# 100   f(x): -0.089097|grad f(p)|:0.004589417101266063
                      +# 150   f(x): -0.089530|grad f(p)|:0.002602833189535808
                      +# 200   f(x): -0.089650|grad f(p)|:0.0012359084298719097
                      +
                      +true

                      We can also benchmark both

                      @benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)
                      BenchmarkTools.Trial: 22 samples with 1 evaluation.
                      + Range (min … max):  229.160 ms … 245.938 ms  ┊ GC (min … max): 3.34% … 3.21%
                      + Time  (median):     231.621 ms               ┊ GC (median):    3.36%
                      + Time  (mean ± σ):   233.776 ms ±   4.944 ms  ┊ GC (mean ± σ):  3.34% ± 0.07%
                      +
                      +      ▁   █     ▁                                                
                      +  ▆▆▆▁█▆▆▆█▆▁▁▁▁█▁▁▁▁▁▆▆▆▁▁▆▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▆▁▁▁▁▁▁▆▆ ▁
                      +  229 ms           Histogram: frequency by time          246 ms <
                      +
                      + Memory estimate: 1.13 GiB, allocs estimate: 3613.
                      @benchmark gradient_descent($M, $f, $grad_f, $p0)
                      BenchmarkTools.Trial: 163 samples with 1 evaluation.
                      + Range (min … max):  30.021 ms …  37.070 ms  ┊ GC (min … max): 0.00% … 3.43%
                      + Time  (median):     30.398 ms               ┊ GC (median):    0.00%
                      + Time  (mean ± σ):   30.734 ms ± 938.400 μs  ┊ GC (mean ± σ):  0.60% ± 1.01%
                      +
                      +    ▂▁█ ▂                                                       
                      +  ▃▆█████▆▄▁▁▂▁▁▃▂▃▅▄▇▄▄▃▂▁▁▁▁▁▁▁▁▂▁▁▁▁▂▁▁▂▁▁▁▁▁▁▁▁▂▁▂▁▁▁▁▁▁▁▂ ▂
                      +  30 ms           Histogram: frequency by time           34 ms <
                      +
                      + Memory estimate: 11.38 MiB, allocs estimate: 3006.

                      From these results we see, that the conversion from the Euclidean to the Riemannian gradient does require a small amount of effort and hence reduces the performance slighly. Still, if the Euclidean Gradient is easier to compute or already available, this is in terms of coding the faster way. Finally this is a tradeoff between derivation and implementation efforts for the Riemannian gradient and a slight performance reduction when using the Euclidean one.

                      A Solver based (also) on (approximate) Hessian information

                      To also involve the Hessian, we consider the trust regions solver with three cases:

                      1. Euclidean, approximating the Hessian
                      2. Euclidean, providing the Hessian
                      3. Riemannian, providing the Hessian but also using in-place evaluations.
                      q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.088106|grad f(p)|:0.01903913659588686
                      +# 20    f(x): -0.089023|grad f(p)|:0.007792334296299116
                      +# 30    f(x): -0.089501|grad f(p)|:0.008034300330026467
                      +# 40    f(x): -0.089842|grad f(p)|:0.008125526728200166
                      +# 50    f(x): -0.089890|grad f(p)|:0.0031244752821335416
                      +# 60    f(x): -0.089925|grad f(p)|:0.0029682862637714163
                      +# 70    f(x): -0.089962|grad f(p)|:0.002811722437216778
                      +# 80    f(x): -0.089997|grad f(p)|:0.0026658493010157363
                      +# 90    f(x): -0.090032|grad f(p)|:0.0025418974797659266
                      +# 100   f(x): -0.090067|grad f(p)|:0.0024485809550738955
                      +# 110   f(x): -0.090108|grad f(p)|:0.0023894008071780747
                      +# 120   f(x): -0.090155|grad f(p)|:0.002362317662908117
                      +# 130   f(x): -0.090208|grad f(p)|:0.0023611301647631484
                      +# 140   f(x): -0.090262|grad f(p)|:0.00237797866404072
                      +# 150   f(x): -0.090314|grad f(p)|:0.002405563029627607
                      +# 160   f(x): -0.090362|grad f(p)|:0.002438250821406204
                      +# 170   f(x): -0.090404|grad f(p)|:0.002472221074327323
                      +# 180   f(x): -0.090441|grad f(p)|:0.0025051377726827166
                      +# 190   f(x): -0.090472|grad f(p)|:0.002535721310831389
                      +# 200   f(x): -0.090498|grad f(p)|:0.0025633813700434637
                      +# 210   f(x): -0.090513|grad f(p)|:0.0025832821804127513
                      +# 220   f(x): -0.090513|grad f(p)|:0.0025832821804127513
                      +# 230   f(x): -0.090513|grad f(p)|:0.0025832821792817493
                      +# 240   f(x): -0.090513|grad f(p)|:0.0025832821770197098
                      +# 250   f(x): -0.090513|grad f(p)|:0.0025832821747576924
                      +# 260   f(x): -0.090513|grad f(p)|:0.002583282172495683
                      +# 270   f(x): -0.090513|grad f(p)|:0.0025832821702336567
                      +# 280   f(x): -0.090513|grad f(p)|:0.002583282167971658
                      +# 290   f(x): -0.090513|grad f(p)|:0.002583282165709656
                      +# 300   f(x): -0.090513|grad f(p)|:0.002583282163447637
                      +# 310   f(x): -0.090513|grad f(p)|:0.0025832821611855928
                      +# 320   f(x): -0.090513|grad f(p)|:0.0025832821589235814
                      +# 330   f(x): -0.090513|grad f(p)|:0.002583282156661572
                      +# 340   f(x): -0.090513|grad f(p)|:0.0025832821543995727
                      +# 350   f(x): -0.090513|grad f(p)|:0.002583282152137569
                      +# 360   f(x): -0.090513|grad f(p)|:0.0025832821498755487
                      +# 370   f(x): -0.090513|grad f(p)|:0.0025832821476135036
                      +# 380   f(x): -0.090513|grad f(p)|:0.0025832821453515035
                      +# 390   f(x): -0.090513|grad f(p)|:0.0025832821430894675
                      +# 400   f(x): -0.090513|grad f(p)|:0.0025832821408274405
                      +# 410   f(x): -0.090513|grad f(p)|:0.002583282138565445
                      +# 420   f(x): -0.090513|grad f(p)|:0.002583282136303441
                      +# 430   f(x): -0.090513|grad f(p)|:0.00258328213404143
                      +# 440   f(x): -0.090513|grad f(p)|:0.002583282131779385
                      +# 450   f(x): -0.090513|grad f(p)|:0.0025832821295174104
                      +# 460   f(x): -0.090513|grad f(p)|:0.002583282127255372
                      +# 470   f(x): -0.090513|grad f(p)|:0.002583282124993372
                      +# 480   f(x): -0.090513|grad f(p)|:0.0025832821227313313
                      +# 490   f(x): -0.090513|grad f(p)|:0.0025832821204693065
                      +# 500   f(x): -0.090513|grad f(p)|:0.002583282118207321
                      +# 510   f(x): -0.090513|grad f(p)|:0.0025832821159453034
                      +# 520   f(x): -0.090513|grad f(p)|:0.0025832821136832665
                      +# 530   f(x): -0.090513|grad f(p)|:0.0025832821114212673
                      +# 540   f(x): -0.090513|grad f(p)|:0.002583282109159243
                      +# 550   f(x): -0.090513|grad f(p)|:0.002583282106897217
                      +# 560   f(x): -0.090513|grad f(p)|:0.002583282104635213
                      +# 570   f(x): -0.090513|grad f(p)|:0.0025832821023731955
                      +# 580   f(x): -0.090513|grad f(p)|:0.0025832821001112094
                      +# 590   f(x): -0.090513|grad f(p)|:0.002583282097849167
                      +# 600   f(x): -0.090513|grad f(p)|:0.0025832820955871503
                      +# 610   f(x): -0.090513|grad f(p)|:0.0025832820933251325
                      +# 620   f(x): -0.090513|grad f(p)|:0.002583282091063122
                      +# 630   f(x): -0.090513|grad f(p)|:0.0025832820888010873
                      +# 640   f(x): -0.090513|grad f(p)|:0.0025832820865390785
                      +# 650   f(x): -0.090513|grad f(p)|:0.0025832820842770442
                      +# 660   f(x): -0.090513|grad f(p)|:0.0025832820820150576
                      +# 670   f(x): -0.090513|grad f(p)|:0.0025832820797530767
                      +# 680   f(x): -0.090513|grad f(p)|:0.0025832820774910523
                      +# 690   f(x): -0.090513|grad f(p)|:0.0025832820752290362
                      +# 700   f(x): -0.090513|grad f(p)|:0.002583282072966992
                      +# 710   f(x): -0.090513|grad f(p)|:0.002583282070704973
                      +# 720   f(x): -0.090513|grad f(p)|:0.0025832820684429532
                      +# 730   f(x): -0.090513|grad f(p)|:0.002583282066180946
                      +# 740   f(x): -0.090513|grad f(p)|:0.0025832820639189306
                      +# 750   f(x): -0.090513|grad f(p)|:0.0025832820616569214
                      +# 760   f(x): -0.090513|grad f(p)|:0.00258328205939488
                      +# 770   f(x): -0.090513|grad f(p)|:0.002583282057132884
                      +# 780   f(x): -0.090513|grad f(p)|:0.0025832820548708406
                      +# 790   f(x): -0.090513|grad f(p)|:0.002583282052608873
                      +# 800   f(x): -0.090513|grad f(p)|:0.002583282050346837
                      +# 810   f(x): -0.090513|grad f(p)|:0.0025832820480848214
                      +# 820   f(x): -0.090513|grad f(p)|:0.0025832820458228205
                      +# 830   f(x): -0.090513|grad f(p)|:0.0025832820435608087
                      +# 840   f(x): -0.090513|grad f(p)|:0.0025832820412987944
                      +# 850   f(x): -0.090513|grad f(p)|:0.0025832820390367726
                      +# 860   f(x): -0.090513|grad f(p)|:0.002583282036774768
                      +# 870   f(x): -0.090513|grad f(p)|:0.002583282034512706
                      +# 880   f(x): -0.090513|grad f(p)|:0.002583282032250709
                      +# 890   f(x): -0.090513|grad f(p)|:0.0025832820299886896
                      +# 900   f(x): -0.090513|grad f(p)|:0.002583282027726701
                      +# 910   f(x): -0.090513|grad f(p)|:0.002583282025464682
                      +# 920   f(x): -0.090513|grad f(p)|:0.0025832820232026517
                      +# 930   f(x): -0.090513|grad f(p)|:0.002583282020940619
                      +# 940   f(x): -0.090513|grad f(p)|:0.0025832820186786334
                      +# 950   f(x): -0.090513|grad f(p)|:0.002583282016416595
                      +# 960   f(x): -0.090513|grad f(p)|:0.0025832820141545986
                      +# 970   f(x): -0.090513|grad f(p)|:0.0025832820118925717
                      +# 980   f(x): -0.090513|grad f(p)|:0.0025832820096305525
                      +# 990   f(x): -0.090513|grad f(p)|:0.002583282007368543
                      +# 1000  f(x): -0.090513|grad f(p)|:0.0025832820051065217

                      To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.

                      q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.089673|grad f(p)|:0.0033633987039373655
                      q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.089673|grad f(p)|:0.00336339870393737

                      Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.

                      @benchmark trust_regions($M, $f, $grad_f, $p0;
                      +  objective_type=:Euclidean,
                      +  evaluation=InplaceEvaluation(),
                      +)
                      BenchmarkTools.Trial: 10 samples with 1 evaluation.
                      + Range (min … max):  524.011 ms … 580.548 ms  ┊ GC (min … max): 3.08% … 2.83%
                      + Time  (median):     528.580 ms               ┊ GC (median):    3.09%
                      + Time  (mean ± σ):   534.851 ms ±  16.889 ms  ┊ GC (mean ± σ):  3.03% ± 0.08%
                      +
                      +  █▁ ▁▁▁    ▁  ▁  ▁                                           ▁  
                      +  ██▁███▁▁▁▁█▁▁█▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
                      +  524 ms           Histogram: frequency by time          581 ms <
                      +
                      + Memory estimate: 1.97 GiB, allocs estimate: 60518.
                      @benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;
                      +  evaluation=InplaceEvaluation(),
                      +  objective_type=:Euclidean
                      +)
                      BenchmarkTools.Trial: 318 samples with 1 evaluation.
                      + Range (min … max):  13.355 ms … 24.112 ms  ┊ GC (min … max): 0.00% … 2.28%
                      + Time  (median):     15.604 ms              ┊ GC (median):    3.27%
                      + Time  (mean ± σ):   15.739 ms ±  1.344 ms  ┊ GC (mean ± σ):  4.22% ± 3.12%
                      +
                      +              ▃▆▃   ▄█                                         
                      +  ▆▅▁▁▁▁▁▁▄▇▆▆███▅▄▄██▇▃▂▂▆▇▅▃▁▄▆▆▄▂▂▁▁▅▄▃▂▂▁▁▂▂▁▂▂▂▁▁▁▁▁▁▁▁▂ ▃
                      +  13.4 ms         Histogram: frequency by time        20.5 ms <
                      +
                      + Memory estimate: 37.53 MiB, allocs estimate: 4527.
                      @benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;
                      +    evaluation=InplaceEvaluation(),
                      +)
                      BenchmarkTools.Trial: 539 samples with 1 evaluation.
                      + Range (min … max):  8.857 ms …  15.185 ms  ┊ GC (min … max): 0.00% … 4.68%
                      + Time  (median):     9.021 ms               ┊ GC (median):    0.00%
                      + Time  (mean ± σ):   9.276 ms ± 572.408 μs  ┊ GC (mean ± σ):  1.70% ± 2.78%
                      +
                      +   ▄█▇▅▁                                                       
                      +  ▅██████▅▆▄▃▂▁▁▃▁▂▁▂▂▁▁▂▁▂▃▃▄▄▅▅▆▃▃▄▃▃▃▃▂▃▂▂▂▂▁▁▁▁▂▁▂▂▁▁▁▁▂▂ ▃
                      +  8.86 ms         Histogram: frequency by time        10.7 ms <
                      +
                      + Memory estimate: 10.86 MiB, allocs estimate: 4506.

                      We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.

                      Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.

                      [distance(M, q1, q) for q ∈ [q2,q3] ]
                      2-element Vector{Float64}:
                      + 4.471485799821605e-15
                      + 0.048047538209352994
                      [distance(M, q3, q) for q ∈ [q4,q5] ]
                      2-element Vector{Float64}:
                      + 0.08269488012454579
                      + 0.08269488012454579

                      Which we can also see in the final cost, comparing it to the Eigenvalue

                      [f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]
                      5-element Vector{Float64}:
                      +  2.76900562450888e-5
                      +  2.769005624428389e-5
                      + -0.000836208332542443
                      +  3.191891195797325e-16
                      +  3.191891195797325e-16

                      Summary

                      We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.

                      Literature

                      diff --git a/v0.1.5/examples/Riemannian-mean/index.html b/v0.1.5/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..4f53b28 --- /dev/null +++ b/v0.1.5/examples/Riemannian-mean/index.html @@ -0,0 +1,33 @@ + +Riemannian Mean · ManoptExamples.jl

                      The Riemannian Center of Mass (mean)

                      Ronny Bergmann 2023-07-02

                      Preliminary Notes

                      Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

                      For this first example, the objective is a very common one, for example also used in the Get started: optimize! tutorial of Manopt.jl.

                      The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

                      There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

                      For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,

                      Loading packages and defining data

                      Loading the necessary packages and defining a data set on a manifold

                      using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
                      +Random.seed!(42)
                      +M = Sphere(2)
                      +n = 100
                      +σ = π / 8
                      +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
                      +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

                      Variant 1: Using the functions

                      We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get started: optimize!.

                      f = ManoptExamples.RiemannianMeanCost(data)
                      +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

                      Then we can for example directly call a gradient descent as

                      x1 = gradient_descent(M, f, grad_f, first(data))
                      3-element Vector{Float64}:
                      + 0.6868392794567202
                      + 0.006531600696673591
                      + 0.7267799821044285

                      Variant 2: Using the objective

                      A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do in-place-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

                      rmo = ManoptExamples.Riemannian_mean_objective(
                      +    M, data,
                      +    evaluation=InplaceEvaluation(),
                      +)

                      Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

                      rmp = DefaultManoptProblem(M, rmo)

                      This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

                      s1 = GradientDescentState(M, copy(M, first(data)))
                      +solve!(rmp, s1)
                      +x2 = get_solver_result(s1)
                      3-element Vector{Float64}:
                      + 0.6868392794567202
                      + 0.006531600696673591
                      + 0.7267799821044285

                      but we can easily use a conjugate gradient instead

                      s2 = ConjugateGradientDescentState(
                      +    M,
                      +    copy(M, first(data)),
                      +    StopAfterIteration(100),
                      +    ArmijoLinesearch(M),
                      +    FletcherReevesCoefficient(),
                      +)
                      +solve!(rmp, s2)
                      +x3 = get_solver_result(s2)
                      3-element Vector{Float64}:
                      + 0.6868393613136017
                      + 0.006531541407458413
                      + 0.7267799052788726
                      diff --git a/v0.1.5/examples/Robust-PCA/index.html b/v0.1.5/examples/Robust-PCA/index.html new file mode 100644 index 0000000..36ce580 --- /dev/null +++ b/v0.1.5/examples/Robust-PCA/index.html @@ -0,0 +1,64 @@ + +Robust PCA · ManoptExamples.jl

                      The Robust PCA computed on the Grassmann manifold

                      Ronny BergmannLaura Weigl 2023-07-02

                      For this example we first load the necessary packages.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using LinearAlgebra, Random, Statistics
                      +using Manifolds, Manopt, ManoptExamples
                      +using Plots
                      +Random.seed!(42)

                      Computing a Robust PCA

                      For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

                      We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

                      \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

                      The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

                      \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

                      where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

                      The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

                      First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

                      n = 40
                      +d = 2
                      +outliers = 15
                      +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
                      +# Outliers:
                      +permute = shuffle(1:size(data, 2))'
                      +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
                      +# We are looking for a line here so we set
                      +m = 1

                      We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

                      M = Grassmann(d,m);

                      For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

                      Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

                      Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

                      The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

                      We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

                      ε = 1.0
                      +iterations = 6
                      +reduction = 0.5
                      +U, S, V = svd(data);
                      +p0 = U[:, 1:m]
                      2×1 Matrix{Float64}:
                      + -0.7494248652139397
                      +  0.6620893983436593

                      Let’s generate the cost and gradient we aim to use here

                      f = ManoptExamples.RobustPCACost(M, data, ε)
                      +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
                      ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

                      and check the initial cost

                      f(M, p0)
                      9.430690947905521

                      Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

                      q = copy(M, p0)
                      +εi = ε
                      +for i in 1:iterations
                      +    f.ε = εi
                      +    grad_f.ε = εi
                      +    global q = trust_regions(
                      +        M,
                      +        f,
                      +        grad_f,
                      +        ApproxHessianFiniteDifference(
                      +            M, q, f;
                      +            vector_transport_method=ProjectionTransport(),
                      +            retraction_method=PolarRetraction(),
                      +        ),
                      +        q;
                      +        (project!)=project!,
                      +    )
                      +    global εi *= reduction
                      +end

                      When finally setting ε we can investigate the final cost

                      f.ε = 0.0
                      +f(M, q)
                      9.412961981726742

                      Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

                      fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
                      +plot!(
                      +    fig,
                      +    q[1] * [-1, 1] * 100,
                      +    q[2] * [-1, 1] * 100;
                      +    linecolor=:red,
                      +    linewidth=2,
                      +    label="Robust PCA",
                      +);
                      +plot!(
                      +    fig,
                      +    p0[1] * [-1, 1] * 100,
                      +    p0[2] * [-1, 1] * 100;
                      +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
                      +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
                      +    linewidth=2,
                      +    linecolor=:black,
                      +    label="Standard SVD",
                      +)

                      Figure 1: The result of the robust PCA vs. SVD

                      diff --git a/v0.1.5/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.5/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..68d4fd1 --- /dev/null +++ b/v0.1.5/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/Rosenbrock/index.html b/v0.1.5/examples/Rosenbrock/index.html new file mode 100644 index 0000000..cd74592 --- /dev/null +++ b/v0.1.5/examples/Rosenbrock/index.html @@ -0,0 +1,57 @@ + +Rosenbrock · ManoptExamples.jl

                      The Rosenbrock Function

                      Ronny Bergmann 2023-01-03

                      After loading the necessary packages

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using Manifolds, Manopt, ManoptExamples
                      +using Plots

                      We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).

                      a = 100.0
                      +b = 1.0
                      +p0 = [1/10, 2/10]

                      which is defined on $\mathbb R^2$, so we need

                      M = ℝ^2
                      Euclidean(2; field=ℝ)

                      and can then generate both the cost and the gradient

                      f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                      +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
                      ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

                      For comparison, we look at the initial cost

                      f(M, p0)
                      4.42

                      And to illustrate, we run two small solvers with their default settings as a comparison.

                      Gradient Descent

                      We start with the gradient descent solver.

                      Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

                      gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
                      # Solver state for `Manopt.jl`s Gradient Descent
                      +After 200 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 200:  reached
                      +    |grad f| < 1.0e-8: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

                      gd_x = get_record(gd_state, :Iteration, :Iteration)
                      +gd_y =  get_record(gd_state, :Iteration, :Cost)
                      +f(M, get_solver_result(gd_state))
                      0.10562873187751265

                      Quasi Newton

                      We can improve this using the quasi Newton algorithm

                      qn_state = quasi_Newton(M, f, grad_f, p0;
                      +    record = [:Iteration, :Cost], return_state=true
                      +)
                      # Solver state for `Manopt.jl`s Quasi Newton Method
                      +After 26 iterations
                      +
                      +## Parameters
                      +* direction update:        limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.
                      +* retraction method:       ExponentialRetraction()
                      +* vector transport method: ParallelTransport()
                      +
                      +## Stepsize
                      +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
                      +  * retraction_method = ExponentialRetraction()
                      +  * vector_transport_method = ParallelTransport()
                      +
                      +## Stopping Criterion
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 1000: not reached
                      +    |grad f| < 1.0e-6: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

                      qn_x = get_record(qn_state, :Iteration, :Iteration)
                      +qn_y =  get_record(qn_state, :Iteration, :Cost)
                      +f(M, get_solver_result(qn_state))
                      1.4404666436813376e-18

                      and see that the final value is close to the one of the minimizer

                      f(M, ManoptExamples.minimizer(f))
                      0.0

                      which we also see if we plot the recorded cost.

                      fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
                      +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

                      Figure 1: The result of the robust PCA vs. SVD

                      diff --git a/v0.1.5/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.5/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..8796c5d --- /dev/null +++ b/v0.1.5/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/Total-Variation/index.html b/v0.1.5/examples/Total-Variation/index.html new file mode 100644 index 0000000..724f054 --- /dev/null +++ b/v0.1.5/examples/Total-Variation/index.html @@ -0,0 +1,105 @@ + +Total Variation · ManoptExamples.jl

                      Total Variation Minimization

                      Ronny Bergmann 2023-06-06

                      Introduction

                      Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].

                      This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.

                      The manifold-valued ROF model

                      Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold $s = (s_i)_{i=1}^N \in \mathbb M^n$ of length $n \in \mathbb N$, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term $D(p,s)$ to “stay close to” $s$ and a regularizer $R(p)$. For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain

                      \[\operatorname*{arg\,min}_{p\in\mathcal M^n} +f(p), +\qquad +f(p) = D(p,s) + α R(p) = \sum_{i=1}^n d_{\mathcal M}^2(s_i,p_i) + α\sum_{i=1}^{n-1} d_{\mathcal M}(p_i,p_{i+1}),\]

                      where $α > 0$ is a weight parameter.

                      The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost $f(p)$ to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any $p_i=p_{i+1}$. So we have to use another technique.

                      The Cyclic Proximal Point algorithm

                      If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the Cyclic Proximal Point Algorithm [Bac14].

                      Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.

                      The Optimsation

                      using Manifolds, Manopt, ManoptExamples, ManifoldDiff
                      +using ManifoldDiff: prox_distance
                      +using ManoptExamples: prox_Total_Variation
                      +n = 500 #Signal length
                      +σ = 0.2 # amount of noise
                      +α = 0.5# in the TV model

                      We define a few colors

                      using Colors, NamedColors, ColorSchemes, Plots, Random
                      +data_color = RGBA{Float64}(colorant"black")
                      +light_color = RGBA{Float64}(colorant"brightgrey")
                      +recon_color = RGBA{Float64}(colorant"vibrantorange")
                      +noisy_color = RGBA{Float64}(colorant"vibrantteal")

                      And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.

                      Random.seed!(23)
                      +M = Circle()
                      +N = PowerManifold(M, n)
                      +data = ManoptExamples.artificial_S1_signal(n)
                      +s = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]
                      +t = range(0.0, 1.0; length=n)
                      +scene = scatter(
                      +    t,
                      +    data;
                      +    markercolor=data_color,
                      +    markerstrokecolor=data_color,
                      +    markersize=2,
                      +    lab="original",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    s;
                      +    markersize=2,
                      +    markercolor=noisy_color,
                      +    markerstrokecolor=noisy_color,
                      +    lab="noisy",
                      +)
                      +yticks!(
                      +    [-π, -π / 2, 0, π / 2, π],
                      +    [raw"$-\pi$", raw"$-\frac{\pi}{2}$", raw"$0$", raw"$\frac{\pi}{2}$", raw"$\pi$"],
                      +)

                      As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.

                      Defining cost and the proximal maps, which are actually 3 proxes to be precise.

                      f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)
                      +proxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_Total_Variation(N, α * λ, p))

                      We run the algorithm

                      o = cyclic_proximal_point(
                      +    N,
                      +    f,
                      +    proxes_f,
                      +    s;
                      +    λ=i -> π / (2 * i),
                      +    debug=[
                      +        :Iteration,
                      +        " | ",
                      +        DebugProximalParameter(),
                      +        " | ",
                      +        :Cost,
                      +        " | ",
                      +        :Change,
                      +        "\n",
                      +        1000,
                      +        :Stop,
                      +    ],
                      +    record=[:Iteration, :Cost, :Change, :Iterate],
                      +    return_state=true,
                      +);
                      Initial  |  | f(x): 59.187445 | 
                      +# 1000   | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283
                      +# 2000   | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678
                      +# 3000   | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907
                      +# 4000   | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957
                      +# 5000   | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175
                      +The algorithm reached its maximal number of iterations (5000).

                      We can see that the cost reduces nicely. Let’s extract the result an the recorded values

                      recon = get_solver_result(o)
                      +record = get_record(o)

                      We get

                      scene = scatter(
                      +    t,
                      +    data;
                      +    markercolor=data_color,
                      +    markerstrokecolor=data_color,
                      +    markersize=2,
                      +    lab="original",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    s;
                      +    markersize=2,
                      +    markercolor=light_color,
                      +    markerstrokecolor=light_color,
                      +    lab="noisy",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    recon;
                      +    markersize=2,
                      +    markercolor=recon_color,
                      +    markerstrokecolor=recon_color,
                      +    lab="reconstruction",
                      +)

                      Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”

                      Outlook

                      We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the $\operatorname{TV}_2$ yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.

                      Another extension for both first and second order TV is to apply this for manifold-valued images $S = (S_{i,j})_{i,j=1}^{m,n} \in \mathcal M^{m,n}$, where the distances in the regularizer are then used in both the first dimension $i$ and the second dimension $j$ in the data.

                      Technical details

                      This version of the example was generated with the following package versions.

                      Pkg.status()
                      Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`
                      +  [6e4b80f9] BenchmarkTools v1.4.0
                      +  [35d6a980] ColorSchemes v3.24.0
                      +  [5ae59095] Colors v0.12.10
                      +  [7073ff75] IJulia v1.24.2
                      +  [8ac3fa9e] LRUCache v1.6.1
                      +  [af67fdf4] ManifoldDiff v0.3.10
                      +  [1cead3c2] Manifolds v0.9.14
                      +  [3362f125] ManifoldsBase v0.15.7
                      +  [0fc0a36d] Manopt v0.4.53
                      +  [5b8d5e80] ManoptExamples v0.1.5 `..`
                      +  [51fcb6bd] NamedColors v0.2.2
                      +  [91a5bcdd] Plots v1.40.1

                      Literature

                      [Bac14]
                      M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [ROF92]
                      L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.5/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg b/v0.1.5/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg new file mode 100644 index 0000000..fbeb0e1 --- /dev/null +++ b/v0.1.5/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg @@ -0,0 +1,1551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg b/v0.1.5/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg new file mode 100644 index 0000000..8369019 --- /dev/null +++ b/v0.1.5/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg @@ -0,0 +1,1048 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.5/examples/img/bezier/Casteljau-illustr.png b/v0.1.5/examples/img/bezier/Casteljau-illustr.png new file mode 100644 index 0000000000000000000000000000000000000000..ecddd4acc643c22a65dc416fa64eb3341011fbd5 GIT binary patch literal 131251 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

                      qF||fMj28EpD3^p21BY|1yuY$65~kz3;ETf4r|&!_Jfe zsbaapw)FEJPVMd7{oX&?`GcpI9M4_7&xsb^B1>iU%WL^_f4Th2@(h03u+7`vlZ|rv z@(yjd92?r&xos`8M<%0imo1m0c<86AOX_+Qul>BiSN|5q;VFl4i@fBC0d9G4kA|>s z;9~SSht?3s(aV<$eKa_;q(^t9MTZS2@Dv_eobVAxg^qN%{WybOv<@@O%54Filv|AN zTq@e=dL?c5;@-}K_NyD7+TGC`%cnm8ij!_e{?Lb%v#c4rnSK9UjyiB0%5i@fwCQcT z(sT80<3dL}BtH35mauIndHQkkxWubZ}b^4fgv+xYgr#Y=q3Nf?~|bK-?nw62e>6FCf8ot8WRN*4y=uSia9rj8^18mg%2=O0 zbd@RwUq-R2vi@Ps@N|qte>A|DV100JH3$i zc`l!a0S9R~hg09>To-;CE|u@Jq3SY>eI`px22G38Pgmb^Mo)PBkCZIHi9TTB%`0Rs zN2_J5rgYF=qOV1GxH;~;?c29sp-;8m0-zhP+Pw+ae z9KN*fKK;&|d#F0v^)t0yhvS3a+ZOM=V{b&))Oc`DUo4v565V=dzF*|+l(k=?mHYa= zy>Z=HJ#qH3>2c&(Vaxi&iNW$T9q{FTU5PH}O=&az`Er(3DOi^oNxxJ*rP3Weh$U)neO5K zgbg}{^Mvdp@BZGR=ceM}I0j*1wpa%f!!qdCUw?h30c6at)^GLZ>-_?f%vR?xPiON7 zQJ{@M3?mcS!M6uqo=g zr0~>Rf4${O(VeEH;Z$zaS1L}L)9DKiYkAd%b<$^FG=29 zG}OddwP&4-4$6B$cPM;1;Y4=uSd_&eHjxQ=yz}B+jN^lVMj>L^gPO48_FW}$XtHzI zyf|*(aP|86`pe;QeWtJ4a^>(fT6)S~Ewu4lbAD#l)!7=G^?UOVet%p1pI>NIE`uF9 z)&3i2_rzPDzciN3?}{tW+Z%UmIuQ5jpxn2&9E$a_{;Uh8b?W3c`}65ud>JAv|1#N= z$wdha)j!?V78db*n&ph4;PJ$tbU&2$M38)pLJF7SC+vFcJKuTuL(!eWH+ncP&yl7V z{JdJWL9Z8ov7K8q8SB-THs@+L`x@c;uoubo;;q}Di=gb7{e}%2R*A_g*=?}H=vYA z=daM24asosS00JK{@I?mW&6>%?V-JKwcrjN8T!3_qxOxlY^Twxt5ncfwwxnJeL7&>D zzt}#%Df&LF$BX2;$gO+-`<{F5$tDBpP%qbueU{yv(vvI;!sM_9D^WA+8D(8mHc27# z>H%T0Nhb}NFv0O`+WABIl;uHwG<oV_&y&nR9heib%yBHs(kmsfX~ zw1L;MWtC2S_0~l>(b}ea-TS4VFVP2EE)YI#zV+9=ja}CY{RZ6(cka38`X+`q6c6@f zlLLgw>KtQ2Co;2i3i2khGq2@%t0Iwz!M?o3zFLgkG7y_v%G)%>@gxcj8`gvn7wi zM@1Z$@m{T4;VxU)5#M{_X#C?t2jdO;V9T<3`rL1mT>o0DY$qx_I)MJ-1IHNORNt2C zOR4U#Y>bOI<^1I1d7Q?DPyfZYb2wkd`J?4iA9Z7IM#GsOw%u8!kHq0PEzElLKE6#C zvb|9>|5Oi#a`3i_5~^`^Sy*m{1GzrLa)~<8xmtO$6PTTDCmn+h!#3aufyZ%RCZcm^ za%VP=@Xdf@7R+l1udInX>{&2nfcNT}* zh_=Sx0KY&$zxR!e@uH7!h`TuWCL{kVXLQ96->@cL^Xw(jsqOac3RfBZM7L($0aeTU z@|pVG`LCTdBU{mjzHa=>4f`^KKUAM7Mb}X9lX=6JK(#VQH=rXpn}gnzq^%F?p~)A{|)t7CVIAJw(r;)9jO;;;)sqdf=;-UA?&B*>^_3=WyyPmTh6Nr|^sJ zzWZ+dqBQ$pOI^0Pt`)kD*Jr&(6<^DWQ!DgdHCmeu7Y(ZS`~$Nj1OVYY6V<_+J8o*6 z3DfzRd^_47?|I&Wc-b=+#WbB%Kdhgg3Cobi8C}l^eEMp=Pyf*lS@{0=^1XZF z`MhtZ{xX6yePyyIlgCj4v<-%~xJx=>l;r!O5xXzo<5D=no>UO#!Jwy(iGp2<%lODk zaT>N3-?+fza4qF4!Gae(&W;F%m_?djomDDZDqk|2qV4;B{UmOUe&7Ba!Q7+|wy${mW&ZCsZ;7k^^O3l1kKS@A{pxw` z@x3>!j@Lf-jObuhu6N{Ys~2^w(VXH_Cs(|#T+kh_S>Bb6+Rto05}O`Bm~H1%XDLUY zo^)d`0otolzb7BV!XnCgb}T3@H721Ky@q~c@xlXbJYL;kk-5FPaJ0;!aMNsxO5h@6)IIE>c6CrR{cJ z;&c6L#ux_$_~=OLXdo0Mh??4pxsYOD}3|Nk;$hMI}DuVLTBYBux6D(%JX=H zk>f;kC_5CO9Y(c9TjuQ=FZXWQAMg0qmbg*hGS|nM;>h6>@vh6}$15&g6w|v}wJMh) zVO7qpGF3Q4$hJF&>aILC`%gzgCAFPiWPjZM#nseqA#2l?V36%Pu+= z(`D$hyWn$ZC!*|YmD_m1yMGK-KZ_+ER=J-+!^Z#sKmbWZK~!x2qH~+Y(YJU~0}t&U z8>yjBZAmFz3?9pid<^VpI_f~)EMl>R^*ZPlF0O*@*Sq=ibrtMIx(fC-;md4oEqJr3 zLA3=WtSNl=Tz-ejTmvI=Efym0i8(9)qfWzz;6`-NMx%S{hZ!z$(@ZC0pkRoZ`4Wb= zJU_tm;PQE-VbE##R4$}Xy6Plg*;WVLTu|8-qey0mOzUWkt-8APPe1!myya`#W3KLD zk0U4I&z?3bKKuH0@vJjvYZa#cs(0V@7;_{;J^I>0EST95zq`68drSA-M~}w++jKdJ zw(lphtedN6R8K8Bht(o0#b#|k=uT;eC-fz{*ZLP830se1;2A&cexkdrzis%dmtcL6 z&|6&8*1bBXX7I??ux(m&ijn1-5i%9zf|*RP%n<$C za~n1b*YP5uW9}g|cK|m&ox${Byxn;`<4uh><$21vQhD$UemWcmy%bD2e3R)XB`}fY zc3ju4cC_kDg$}-b^Nz>kDgXXp{O2Ru3YRh8sprO5t%yH(@yeK^)9L;>n!44n9NYRG z`U%{XXX$WU_8rxT@87>yI|QXCq{FIgvT$7zKzG!lGck7P8SAsUDs8|*>DWgeHu7Fz zp|icv0v4T)9kMLEKr?H#$kb)Z`P2s;*bXLBo@kVVA1b{_R||_|;dv>rN~`$`Y&9A5 zn{U23vuNrx*TIM?-c-7d!}y;P~mw6ToJx zHxb86Dtly-$_3qxQAY+$Y`l_34#0U8@0C20p0s?5yOuCGsDo8Hhrx&IgllSX*ZXXJ zj{HgByXmHzYI-eRHL!?hCC-cbRvn1Dl39?#18W5cVY}Tzgcumckv7`SjbxuXd1&m^ zSf}(slW80-eR({@nJ6&PVHQa^4>R04PnYsz(SOELmf6qIv_i%{-~Pyf`12p{i--1U zvZJ#|5}3xHKQhMa#R<&YzB5wBd=6My-WUAhncc-*yVU!0+O zk7<=N(PTbSvKuQrmVY%m0~ib%ItHVKK|>E3$5_!kp7o@1f^T%b(~ynr0+Svd@_<2R zz^9MPRpN&-;KlBZ#8t4OXNqX!ZueGQGIOo!f7j)gUtZI|uVsavA=b>{A_-^>hDt8` z5DNlg7L?ys9?edL(5aUdFr7GUByXMDkRo`yY8%V&)%xH~>!BQJY{ej#d|tJ9C*dZJ z1k@d}RXLZ$aPaMeH*JkqeQi%{J)#V4eZORJXZ++%YvWfgS`zwSndFhRQ+=v$CIf572v#6zv>#mi1*9Q#>|4NYt&a9m@U=@&7ZP1IS+Y!QbTz4nO z)vp|H&x{ttz*Nc%Ve(CA1zLv81{Z>6;sC=u#-AE+gzNfJT82bELYZm3@NHW26P*#N z?zBNO*6lbNg5|w6^Gd#s_Q3Xo@kgInAAk0PC-hr$oqN;4w|~&j(cbr}wXt^Lv}{$* z-WIg5NcTHyQxiCw`#dtO|!Dun?%{+Ms10vHjm#N05oQ)y| zoS78(5ImjN4MG|Y_=i>Keq2!{LPJz#2de~HKsFiG(G2s`1FutzS?gx$(e&a6ECtZ_BfPRKfO9}GBBKNcj~8JY+!Lxc0KsDm@dpBT-gx*Ny|6{kUqMe!KspKiZh4oQ>j!AV>k>K z1lfQ?6k*4QK%X&SBaV;rD%`>}o<{7XrpYwo!+-kz+%QAQVKVPj38a1M)ZE5RVO8Fu z@zJ4+Vs2Z%C(ixQgYm!b*6O!?O6=DH>QgUU8gIX5MRc4v9QzL*%?$bIZLpV?6aDnK zPS2k)w<}(=QWs;$fPa4Lk=U|RpZV3#=rkQEU2rmWOeA1^Qf+1EObp9#R*BWt)eLZ! zU%k55<-mh%y?Vzck%rM_^5orP7PZ*J;pi;z>S--*yI;C<=gy^y^J}uIY;{E-Awth& zdpJV;A`F$B&g>M7H#3s-fPov@`Hts(@-g0YzEVb<$pQ|zMt6A{X%u*(!SfTHM(1Uc zzTruL-ik5rk|95&17;um?v}Xv;~QcQTiQDK_S)s$aod~M#g+OXN}n!x={w|kDJ%&>p^JTD1CXbc`&?7u~{Zg(zU@4=MQ&6B|OVvT}DIkhYV_w;ZV5JJma)+NA4_a(f8b#ik)Lo2VAY~0KD4Ii{=*;>#b_ry`n+) z3waTE>CBlk=cu!=T34L~qeaJo5i>~Tgn3}LNLhugUKI3z2d_AMCO$MW z{H3xP0G~IMvaPDnH~?`EJEy~^>a_S*fBtw}q=Ro?;ZvuIpD#oCo!765H(ho{ z_NtnXs_?Fy@c>^;{Km_1lAdk%#j`u(t*f-{F17Ik(S4sj4AZ6??2vz>%YM9MHx~7} z|5sBNu;?5N$)rIqNQ}N)iwvuga~{TH1YOVK7WosV4OrOm5U$oiv*4!`51&6xr`@}i z*2h`4N;oPSbbrQ8L_f7?e6=Krbx>)bJ+ai7aJpM zME_ikv`IHHC7>qHK6T1H?7MX1+uwg>W4!M3TVgIvuAig*;dwLSYOTn#yG&@_jn<#1=coxwE}B z?%1?9Ui;DY@vdL&(VqL%*eN6V;cL%`w_m#|=JmA2L2i6g-_ZX7=RPyueFQpsHPbkM z#f(@tw{R8grye>GJND@+Se<+qo0D#wB;Y<$P4)C6CWq)+bkL+L*s8G_U(|!_nWSTk zX*gRv)%30FBsIX!H-ALq^&1)o(8HlIGEK^MXdFYnJ4crpjzAtm`AR2RJnb-&Q#R3of1XJKE#wmRsMjHmUcCR+y76uC zv^cC)IgXWi-qANaOJ}U$#}FO%`ckbn&bD?;xQ zj%S~01gV(+v9d+f!y?z)>#jeQ1vV0+kL|>ydJ&w$5*Dth*b=!5H*enDr8IuNcB(Q- zkXJJ3E_^ASL~dX@!D=1CO$@USV2Xr{t8z;C8`B`XyMbu1vFb!)%H(NW8LMq7-ruXa|ZZ$_Z5+!8E+;c z&*Tei+G>C21G)-U-)HBrpQan9amzOc>(;&KVf0X8{nZ?_k2aNKF}_myQy;dGw7fGd zwwdSvVA)k6k1|DEEi&l+GW^R0dk%O${pn8+X|spSRQbXZLlgJn7EZR^&WfCe83v9H zGJ}ua{G-H1pSG=Qj0_PVAL@V^^~ur zu4aHm24m%1S9)t)wRN+ri%!6x7Z=bJ<&qiv%lLE7Ip+-Qk`vFnvIbp%S)M9*`m|}& zrfa4kyeFnG>%(Xpd@%deXisNLeEoH+;&qo6ep`OD_}lVornsYJDcOBAKMt+?6)85kKbC?6JPoDb@9wIXKT>uU8Rz% z-C{>(9wQo34K?XwB>M|&*PUDZ0^9NaxO3BfZ2RPI(wn5i)4$N!LmkX&5>`fp%)E^n z5u`&PLH_KJ3}=^w_G41UBAWN;vMI}Cd$Zr8>$11O+u{i=B@Ma=k_@I~@6Y95!it=g zIhA0vAQ+=n&LKcxPA3P?$Oyh^h|`V#iPF||TiT9O>>Hjq9KZL;_3`IF+7Wa0iL@QM zDCT`vEs7g{b#*M7(VqRboOZ|9)#DgTly5jE89a@vU^}HAq&mKQ-@fcB*lgSV^cvO; z*EH1NaHhq)zZ<%4JV`N``fk=omq4{jBa@ij{v zp5Yw@&8&>@q-zcd&{VV+Ur5`w`$+uBryq(x|KX09H?1We)kQJy)fW3-d5it%sn@sG z%O!R4pm-Z{%!sz9>MGdi)_#O8&H41bdt;C8s&5s&%9?ZyE&=)#+wSP^NjLVBW{+)b zWwk$FE7eZ4qZZb!I&agf!|7}8yYId~0Z#AHOI|~Iib22Uo_n$%mkZGgX3d&)A&22q zKD!-`AlnBJ3Bh?qWNp^Xw(r&pn2_#a>DxjHO0&>^^W^?IL}F?KkxOcD5vb_}H;{__0Hi zr`^Y}!K_EotMxc^5sM7#<$7>Tgff=nc<{ozZ+5loZ3Aehte&a(vcZ4$%U}L-!G#xI zc$~C6PlFN!Fhw`fWK%kYe**+UDDUJuVrC4b-k*cG2%q`+iY96to^cGEp=2{r`EORf z*kbR{PqB{6rhfGMTjNC^+Yn3GOFyP9cAa9sNn7j}vBj=cImyG>VlO2lkCpLMHl^rt zT0uTj;_7qsn{=J@*XWMhAKs_C>(L2@n)Dk{0`x5&7G7S2H6oo8nI^`y7r*!{`05$! zE~ECuRv(`}efms&TP6Egi){5NtMowzoonT8xZ#Eq`n}s6b%v{oD~N3Pf|!{Gvpx(L z9VYKcGXeR$i5!P#-c>QtK{k`FaV3zMCiPQJu|K-^ShmIfhu?WTrfF+=Te8KzP^Z`r zvBj?6W{-veW2~TT8+E)u7w^)~T{b=D%+#)v4#a)(!TtII+p%cVwnnM(-?*)QdQs*+ z#XEG`sa|6;QKV*hj7OifP4Ij4T4~79p8afm&YU?{(Khqv&p&00ucY;nA?HQE!PCK;4e)~gv;sqalFh0If7scou zaj)(!|0bu{y~VDjdo8~$uSEv*5hlw_0_z>IyAFR(@Y;_+kg z;C60_sT-bo=XHVfGx^wy2vpXU*cm%#FLjCCB@pqw%2md)uZi?Nn{E%mY5(=}+DA zXk7WxN8*G|uyaw&Ygcr~ZEw^T``TG?#HZK=H=2%qgE6Py5N<@r1gKrB@k`d|Zud+f z_Q$Oc@8|2PlLy|%puwz1=pPQ(QZ3~$>hv>QJveHquaRNvmElP6gk7Kw>XE;7gUg~X zW=MNuI9380 zFP%&~V9>D<^}b@G9l@h#%AP%Yurv3TlUqrHzI^%eUJ=osZWFLQ2w`5e=MhrjcnK{} z%UH(YnaK|Ct9T||<4AxNCjFA1q}{vqK)mK->*L*b>i5)LQ)8>h{M;*-#~UtN%9ldp zsJ@amT3hU;B$AGmG+YXHywaH5a24!qZM(mGjlTG#@aCPz<8ECA+sfVUlN;~j)ihPt z%OV4Ve!A-Css%MlfXJOm6|SCFA8t2%JK5o~zeOBm(67J#`mD^}y?f{BH*a0s5T{jo zwqC(#VbCYtsS;qa!@%)O>Qsoyl(Cio#=KSA=6qP?JHLD)p7WuH;-`DHU8VivE9ZB_ z?Qd8cSDah;+-a?MvFCZgAlG7)fo1p0J3Ah%_#^RvyV|ExeXP*+$~-P!%_mi*RP+V5 zA3n4%n*gC0((-w^)Dq9jFCVW3*CcG=j1z5x&ZeKyA12-SNPvYN_QAW{v`a0Hv4Cya zw{KrRUvbl6xU(pK`Q?|Nf@Y9GS8is!4<0;t@uEeGrfFu^E2EylFw3KJlp}`p({T{O zH?r}CGN+>qPU%%6oKUXMm8*vLE8lGS@R9E?YI>s!zI5!4*sk)p7Y@Y74 zElM_+5)18Fm|!_v4)%0NpFHV)a&j{s?d>scgI+5Ql*gE(FSc#lHU&E)T&uvN{@r`S z4L1z3;pJYgcQcrDJf8d9Ga5h&Q6?}?n9~_V4(DMeS{z=jcqVr*Mz?h<^($;L^Ilfw z)3n9D>4`(}zrMOTKBv!rhTfNNICLWZ<0XsY#ZOxh{aSS%IIMdERH!%mjdg)``YrX~ z+=tV8(>%gyoHC3NoYS*Ni9dcl101JT8CR68RIUW7F-bal^jOTF*%>c;(v0}g_nwG8 z8S%Te9*X7jd$i%9-`7fznfxWcyt5qB^i`9__48_Yp{?kLlc7)H~xpU`?xpU|4`^&%l%PBJI1E>ZW^qX(KIm-}|m(uVeqJQ@6*|Bx&)==T> z9WgWLavh>v`ao?HC_pDc&!>bn{o4%(p4%g&38DJq01njG~KZIbjz`nPg(RNp!zCi~4^2;yJ#-@nKUY29LdwP0e#*7)k z`}CPJXJ(a@n&r9U;h!#!#;SDL&gmkHdiivJDd*GI$m2oYsZWQ;$(Bc_w%A#0f9BT5 z;&;FKSj^U4?0i_|E$7dOKe~EZ%%9$&pQQB-tXK+oC|#Q|rbOO>t6FDRcxe^~slD3O zShcV_E?v+O-`{aG{&mx#_-);NzhYijc1`SX`LSG(Nx87)<+{rGhD-evC+Uu-zQgo6 zD^t>(p5jaEChWdwm^9yM_@!{A`6C^M4t9We&2hRqWR4uhTK1{D*_ES@FtMUNO4(4u zn_l89rm-<+oN)%_r^=xBYH{7Zd-v}1l#M|jq(}w~x{!$HDSg_fpC|u0dXEl1E`=XB zSh0Qk_Lw(sUbamLL8(iLNYf{B7@lb$wo}Ht!!(+lkqr(%4VzA<5x4B{d7Q=oa2~VT zQVwI@ql;p8A37c%_|BI2``dTNGJU&z^TED&&y@?~x@RtmPOZ|p^^Mge&UF_^tlk)x zs=wYe##OU8+5m$-v%5X6S=$ree^j58)#T{z%?D)Ur$xUm;VCxTxU%GSt%iuSp8@Z< z%jR)8j-L;w@p6h9{H}w3ov+h*q#IubG|WHXW$f@>Zt$k{3=?%z6(3K&kvnaUoxonO zNG|6L3%#<%*+P2l+O^s4IAw7~-LaOichw2wQZ0$L>sQ6og>)K)KuQH5TDWjw_SKlj z9@FYa+wiQ~>Ad6v=O@E@8vL5)?D+euU;9?Jadj#CVj*Hc6mzUNQJ#(GLIvL zcQo*1Z7jsJeT}~EX6)>g2{p4p9zhZUw-)@Qd5J@kEnH~sQ)r;t+(n0eyBj9)6EJX`#>Grg5xU?K$#~t?MHBCo>r^eX$Q``=_oa@6!Kaq~U!nl`$N#Q5M zBQF7DjzPy*(+>Xi0qL||(MV^jat^@heR;NUCXco!pT42^R2Bm&mtFs=_@LjU7xsQc zzdoDlX?72l$*~8YRZfI72;o%jvSrIi$}0Cvf(lP3XW8Jpahi#LIuad)hmJzq^3Yiv zCJ#6q?aPC5Kq>GL=7E3bBM+X`8AqB{OE@jht#4dMs?Hgo_~F*L_7fXp8Pif7fP33h zXXz(t>ta>$Cuyu4bEMQ#?Wn@S6SB+8YE&z&6S?Kj!NX~tEphca9gfqLxqO-K=a1}b z3LffYeb~j2UHYU5X?u?wk1Hm4D1Q5lt#nK=COuBsIZYqZT~}HUxT%NyX6SDz?IRU- zA099Mso&$BcEFM5_C@bL{P4rs%6!F&71<$lU}$fg=~kH*UZ2QasNM2~1a3%vx;9{i z&pGEDTly=D+ku%@rg9Sk(&8*3+k)2*+_R(jtk~&TbQ)JoMHAJzb08;pZe$0o<%~9M z=?;@uEUCe^LKv_1wY)Lrow~wxpRQ>A>l+`*4!`wz4Y8q>1lPvf+^eoep?dpA9_KMv}A0+;xxt4+E(B|u;BV-%J?d~H=SMiqF!04xIc$xE-d%C2WQ!J!1+GbOyfCxKRfT8Es8cyHo#9c-d z?~*wQPiMn{XQH}NvKdQWso(NV{bJh<T6fV#cOBlk`pPiOnIfKnw4#@ljlj9+n_|PD7WJ}$JVxM*RIPI zzE8XB80hT8TxO|NnO=WQ>C;SMk!E*iQ<>sZjGS%uyrV*|)*%Sv&I^BL8_XOr?34oz zJTOFfqB!`WVLW*m3%=Yb@YBb2BVQf{t7V<~E^qi|@HxfKyIDSY`a``hzvc^@rEvB%y+x=A9}5w+k|4HI766J9g{{ z4wrMVeC5iOnVkgI_SEf`$Cyu7{1k)grFWJggmcu8b5S;OnL(!_477<$D=|I@fnc`a zF><_D=Y~0mXBz>-PChtF;Yo2eLm0l9q#&o!I^k|vrM_iD{XFTQOY=&}xKx_UG^)?x zw{~so9y>lI{_BU^;;r9)EZAb-w!bg_X2`f?UrB4ilh$s>MsFMUGxrnd zJ%5D^c<19X=qKVU_wS3VpSmDA)mD?AR<)Ey#&;j77aMKG!wMZejoxy5=KGytf$<`Y zG-$9vB8)R#j^}aJOYdlu8!y_BGY@ux!*DE=iR0MW=GS7DHEEV5;k>iFfmd7jf|+Xt z_krYf`JkVzf#Z;v?^UI(^83{Rvetu$NUduIt&G;C=bH2yg@|P5Tu6kJIi;=5)ntwe9|~jfdik zn-0exK6WskykbW59@Vyc6Hcy1P+TL1$~s{<2(2%yr_j6Q^f|CRHr{S`%HW6-cHFq} z!RhkDp?9>(npX2P()EDXbyyC(E9Z4I3tSe(*gzi6GWgdm$kOG8qA8_Y;mj_poVU&k zvn(O-3f;Ia)Yf^cwr2RPTQ&=zp~`gt7osvZC}E5pL}J+4dS|N#qGx!&>c%_}<*@XSCl{ngMzc^;P`jDv3;%h7VcH%vA7n;j;ThGfEh?CWJD{%^f6 z|E_)_6`fOKi)6v?%P&52wytn(p7-U=-X`=_`e31t>S7BfTWX)@>9qUD9@GU?QYSyv zY4`JG(A7kfZiFN-QsW*x=vsVqGdg%E-1$6oQr-c>L*L+GF^8j`RCg8nOrcXuG+kyn zAs@>KIUr-U)VaHz-D%rFY=vdy^9;5FSw@9F$PajY?2r62boorTd=}!oHb0To@YA3E z)Wh%`46O_>twWo;@81y8Sa))6Ct+(rk3 z1Kvvdyi%Q}Ew8sJXMINk0Gx>j7gxu^G^=)u zJ2M#=WGkN83=d%#cZYx`U%1P*-Szu)CR~$lcoG=NzJXCe2YHb-Jjza%PH9Yan~gU4 zJoI_&faB1@gQJ|E6yM2Oh8F@icui9+*i28JH~7JRvFprXaB#D5<-vw=X%x<5-Q`Kc zzVU4o^3rtjs&UYS>?F@V`Gxyniv_b4`UMwUU@Jc8s45Kran-n?2y-5UxI^(i9p+i- zGP{96eG)EfbQmTN7*_8Hi?S9jzHwGV+epGtulZni!5!6gkk5m_hoaHExZLUNW6V4B zyXJ#31poHk&GA>a=sxxtGUf;R;-9Ww6feDCo({)NoqS*3K%JydW3a2eH7-AMMttPK z11!tp=NtCNd2G8k5S`6V%1G)7bQ1b@EM2M(%?mn{aQ;Eh18<+O%Zvog)#5T7^&>MJ zY1l(($AGgCCC;QAQ9`dSjl(#FE<<__YfyE3CzX9d-|5Y?N z1tExs)iZ@tWJa3$)e>hsFodJ=5C(_nF!t%TyidxL$Gdoh3p|ec{17)@!lU6_7d|qA zR?7yO2txx8Fq5vb1dtNOd|F3qJi7Nt{LdRV#%K6``83_fuI}+=y)S?ES##pR!6Uku zjKOv4yS&P^G$sW7pV>YAx*7UQsqsbIWuH{-(YE{HzWC<){qZuk-8DIzJncTberI{x zA0DAqa2{T67+GfFtT>_59 zCiMBeIC0=@z|9kWx%xaw01s{A`qQ$d!U;ZXcCT~?SF~TL@cn*mo~_UYm{}nCoknf~ zA=YW7Dsfs;nUjX}Q+OM9(pdGfGUq372$PjNTN})Z$Y;gQ z!#Xvsp`k%D@ubi!eZ_q{Z2_sr?2?&9vpVBYv@7o_=)8WNUPaKZ(mrsvg9a=0^ zF2yk!E-!(R?i;iPx(efjYoxY;79MmfeEUJKTKAF$jE$|!)FUUCF%EFzNXHiOIvBfy z&0zwBt?`brb$)8ZG0fnq#!-iD2<5<++K*~+KrZbmm)#cUa#@Nh5j~kvKVl|fgo>*% z=nzRc{CXT^?MfMU7-oiqfk)UJs6!ag$Cd{Z0DNXUDIKQAep-*~OMU7A)}4qv__rJ! z=lwb9mJMZiD&bG-I-SG*xJs+OVg8*vcf`xTxFx2ysSoIW@ZUOTdi?Q=m+SlG`ZAHO zc;%C)bPu{#(oLFPe9hEXpfyh~ZNUn?TX(xZckPUL|6TjCV>!33-xKG`pijEtOJF2* z3b@c?=r(k0zCDLe?eH-`BhLK|dYuN{rrl}4rMkHk1;D1f5=L+1gAY4`ZLxjfWIAOq z;_RMbTL@DRjyxX9;lPvP&k`&A0Ul$FjjhK~Kdwm2e!_Zfj+gyxP57sr&?0i!&snDLJL>?W?%j?5ymz0r-H&Gn7<;wvJ~=e% z?~fzhN6?4pJ08M~KCV*w(BszSq?-?PG5ym9mvFg<^4K+YDR{7T*b>TOTiE$sv}jSb z8poCZpVpPOWZ5y10+k6<7W}5Y3|Prz^F}5zQ2fjyV786S3O%z%GUhAA)B-WeZ_ry{ zoJw)SAwEMej6beBUAdD+1F${Mfdpt}hJ|tWc8MDb9+(Vxt3GWc$fCi(XCs~`HSJW+ zqahd&lykoE7-rHxRRa8+sY^d=+N+iK`@Xd~{^9mL1DC~o^jFS^7wWdL6EYCTbb{K( z94zhwr($f*6#9xUmuLnK7&E0Dr`?asXfM>Z`){wD79Y^I`!9Fut5J_0jEi)){&9`V ziPm;bE9w$ce( zpHq%9;J~inj4O+b&>!lSv+a;8fuXC#XQ(8a$=}#NaAq;hxy=Y?vaLjw)##vvU>;l(pCPS2ADKM2x|=~Pu)_cO8lU=Sv&o^SWUyx^-EMR^i`%-Kw}?&8*`4a_!t|P^E67%9nnNqrWvP zkLD9?)x@6`9#clW79^RL=XS4E@_Py~AkE9I2g$}f#8gJgJt>60C@bHm7q@(xI z%NT47r42VWz>{Z;H)pe0;4z`GY{Ab14xH2NXNe>Dhq^qWa-H>}7p}q#rHG*Q`s=SZ zt_2u7HMU-H_D`iE8lTD=)mh-s2)&M@D0w(=zzKQsfMJH_trk8aL&qi`;|x4PMg}gQ z@@+XVyX67SX(`-fc(4Qt-KTJ~*c}`9#fv|`Q9CJ``D##JHn%z`e6|W|)u-23CUBJag$O``;V$>=!gT~$ts6^Wl%t6TML-A#dZ3>N;o(@3b0I$Y zp3Pz8d5GIsQ-;Q;V=yUTMNgcEjzoEP4%0#!&UHKeboPDoTbovJ-__x_U(?NRvuFyv zYyH2@oe_Wh!sRh%THC`t;5D!T={VgZRrDj?tAEFR@tcmx4uTVqo-Mz zq2CE(z};WL2_DMh^VmjE2XKZbZ!8@3c#;7hHtyBbZ64%vMLRNk%9br#&XoUv(x$fR zOD!1}im)=zglfY`rKDBk5ZqWhXrpm>?A$nxUXi!>aa!*$swJq?eCoS9mc#(zZ=)@C*tEe{Puf3{H8CZy+eoJURON) zc33}eO5c~4qVsf-St;HdAuSzWd3qT2KJ9+Vni=uFJ9XM!iMMLo{pos*GWJ>_Phs=M zN2A}Pt8Cmx1AkuHrF0+lrVnMXIo7|>hYrTKuJuF&7|u@Fc$1DU2Oo8%4|p9XY$J~h zNC&s;CC_-qLN3%tJ+?{EQ>k9^6C1Y&x%m?pC<77SgbOP$f_w3MV zZnO-U{!piBCXKM`Hq1ouQSj}$T;#~{6Y+s>Z;rpYZFkJqDd?@b#`U8wJ0o7C!*869 z=J1=o0aO*ssobh6FbOnb5~$cm)r1^)Jcn)f9&N#>-9M+h-Cyc!)7 z9zWp;VxJJFjglz7moHr~X6L!Y9D(Wic(8wWlf9I)WxF@Dlr zKVe*&S4b(qSWlC0x}5KNz*VZe;p*|h2Yz_Mw$$T9m(cWcQylc^s>aOqw`z;sOYoTp zMt}p~L5G<}aR>pS}D9raZkTP zpVuDS9)Tg}9F#(TG^dV)8xAi1+g4cDYzE`!bFHaNkYMgPJ z4&pq>2Og-0JkwGQ&RSsLoe53KN44ceC&u}NWH(i`u2%Ton{U2(YU_m;UYPy5T})hs zpoP2zW?+Jf%yhLCjWisz*vQhrrfa0@F}}QT-N4Src+=@H@N_`n-T2T(=LH7eTlf5A zf;h0e>!Aai7bXcjj^pF(yI$zXw*~P$y@nqTzp(Y%nkn)(eCCn3o15RX0>5NdTm0j7 zD`U;VX>mwDS*vzcZXOzmN7GcV4=?lu`piUf-gX~2?XC$N+wS~&K`c+Yah8C`5IPEn zPDSrnr`R`{hR3%qavHFH=*t*Bbe{DdaT`O*P!GlneTnX42b6T;&|{r$8jRa|-!$1b z9gbJ>!B?q_>jus=Q9t7pzDS1$%c4@9mGY?%eC(D`PbK>D_<&crUcGu~7mh2G|CI#` z7ECRi7E??Bg_c$rCLo+bW;Bm*G~+PHc+!&!8`;o7@!b%n6&mTVHuR>S&h3uD z0N}yclMW2!ag^twp?Rpsg8>;3CO>tqgS2vC!>4>WZ6tiLAXhlae%nKP;;PSXl*Uk^ z4!^zWtm*M*FIiFX@LMH1Qr;@THbXvbL3>UV2S2@fjdC`Z%*+s9x)|uo4;8lE`AXj8 zY4_S%n*KiA@mgxkphs}%9(0Tydd2lo&W|Ub!23a$p}$yNqPuvkpRE7zt;ej_@Ke5A zhxMmvF&&PNmk+)01)cDWk367{bbKDtYjNfe`5;qpQ&+9db;}?4>Dqus5m5tFAz)WZ zvct7jSSvjBT5t%=LNlI(L??}@Z~CAMXSvuneZbj~XI|*!#8Wu<<)L9c!^P)7p7Y!u z7y!2VjR(B$bok)5@A~b#PWw)`PrCVVS~WhsM%6}#zP$DIpFbY2{?gW%)iE{p96Awy zaq*mZ%k!5-SL>AQOKFu3zYSGiJ+uvlZ@ly1hxRMi9^*}4T7NaNrw?GX7y7jOJ^SM) z+ID|L+wPO6-BW3fTsYr%(sm;3$2AhSzCgF&Fi_yJ?jhYqoUnBd<-EAC&%rcw5s!6T zs((zMed|U0d3sIfNc+^E)>R9B(+w#aW&;BT z9mIABJdHcOoDb4kiAr&~r#|I97LCg~0^eiX;~$@Nudb=rQj#XS*CdKpr}V zG0sCA2Q56tktOPnZ;w&*4VBeOT6oA zTjIkH9EkZd+G4K0y!EdyTOLnYIZKzt=v|ZGwA((&fg5K(%}mqGhiSogI4#qxVe{AM z^t(?~LnpAuwHvb_yW3r--S6KYx9O6Z!fAJ1GNZg^;XBW7+Beg@Qv8s{c)<~N*%X#E zk5PvipM)8cgl!-gzoZk#5EHkvKC*GaIP(zav5xQA$HF!}d)V z^&wk3(`cG4cjC@7EIw&zp2IGm!aD3Sj*qraeei+2k@G}z%-ww2{Zf5WwQ#rl*qwGS z)i27)c&L7n=A~idO4Ddd9Cf>X8(`82)8_adTZ}1>Ieg+c_i=oj&&ptYjT<9PIxwDK zdn`ehaTuPols51JL!G9Bw3H{}6U~hUf7C&nAaB~6$ro)yTDkhkcU#peb8r^>U-n@U zeu93AL3anGqFP-k!bqbdgO`p(hct7g;A^dOtl*)U0pP*YD70Ia<>UaJZqpRTItBiez$*Cf&S1JaLAKB!TUNCm6aQ5E(3j}Ll^1bq&yE{(+fVrq!|XkoO8LMV4P>z z6qobTG{UCAWq@;-e2)jhjqb|vSe9;Cbxyk%w%w&e)IUC7ykur(mwwi%xSFUcmzQI{ zP%2aMh!0i9dBEoRO5^T>z&T7`L`j3g#yOv#jx+af{C)fOWo=GBCQhH{vBAd2d67dO zr(VNT#xtb8pbbr8>ZP#%8Te$bKP zF@ED6AVvZ6O7UJQ4Mj;hcuXIC#dz6Saz5$6+ofgQ z$H=2B{RTyeqnvTLy-25D;plhnV?Njl4!0?Kk54?~=zFB&8)uf0{2|>Ba5&=bJNS8L ze)H+XOXWd>>nK%bGHv)0K)%SCKI8sHzoJcf+%EJT_tQ$Xf-`lBb6p%sg&Cm&S+5lG z{%zZ~Wmmtt8p@0c8nC9p<)IC{3@GYJX<{G}C!hYy!=Xgd8GPiW z1Jw%B_`pq_!0`|U#&rRQGY{r7ODz5|4Qbj)hD+614nMGd;D@kzC{>1S_bz=Z_hQ`| z_g?OH*L>wi5A2Dv7PV*Z(Om`{ZV%GHO`LSXcGQ=LGY!ZTc-kM|ZB1F)fwlt{N1M5= zC`TW$BTgPJ#X~v|4t&tXL)eZub)+;qk8~d}HXWwXar=}pF4B06Gw&OJJ$}mX>lNGp z06+jqL_t(1yruQmgRdFNSbk$otJ@Gcd%V+^Z5QcBY2O}-KKG40jOrMeV2D<@87<=Dc<&j9kF1# zjJfV)|MV-D#}((zQ)ko)TCym0`!!F)-RU0PGR%Eb;?ocAi;EW>ifOW;g-d1%6CKMr z#l;xI_`<&(ar%U5A{`l$PWu#Zxy)clherGq2Y6GS^Wik^dQ(4@L#c3@mX@RKapmyW znx5jWC+zyl(OVDBMlI7wJi5O!c32qTNTWTV)9q48mU%dE*cGOp5$Ee2<~(hCN;mhn zqyPpS%BKR976Xg0m2o2pb13?&$+IFyHl>807jiW?8yN;;-l0|b0o}X)o^NfAcmGt| z;kuLkakcN)UcEA&xo&n;dnbE6vT@(R_hZB8yi|T^9faLZHUi~f)AUkdx4Y{Ex9P!m zoU()&ta;;Y7{&*5VSISKuxQbutV)+ljil=Oi3e0HI%7(_Wz%Ev&kr7qd-m#pSjW6ryIS8s(9hXC0R%5N^8BXtQ7`%VG}A*H z^VLMdIlWvQy7ToBN0z0W`7M=KO9 zdTC}+l8zbLfi|FjLvJ;X_9_LN8FV2#UYtb=u5j?E8l;A?BC1wNxLmXN$izIRGyar* zU~rAtfl@lF31`M!A6VIS@Ob={KCtqi`dM0ZO^tQ>lGaDATM=h3ogN1dYgMb0?4`{| zHMLX+W4Wf#rP9)T!tU(&R@9VpdLF)9+;!Opj&M2SVr5wlANf4|Y>?jp4@Fa&=Wyz~ zj#_zgxje2s9`ex(q}%AajB%9nx%szS+wPa2c{Kj{9`zq}l)JVajZ4n$3VkhNz@X>r zG`@U#rFuO+T|V_)79W?#ZCK|!K2d%1>2Wbp`Ghap+Wa;OpQZ^N;vGj$#B=s%xGpp3 zVt7C=Gca5s4W48Ts*7|6JMe`4lp8FA3O8BAyyBybCnAq-5(a7mxL$meE7u3grKfcDrSAJ}L+`dP~T<^>O+nGJ_ z!Pl&fg)=(hus*sm*2diJ>b7va5q@z^G56k_0oil>F1Vty?BNy=XPYWHk$PeMZ;uXK>}_I zYzwbHXcL}Nj(%YsXg?1($e>r#k$~|FeZQY9hdf_dGsmkj=;p8428o(fD=JPVx5h6X z*&CO9?BRIgkUG_|6Y;0doE?90?W*AF&ZEaqZk3wXvGU#Vo4v19GsebBrlVaC6GZMU z;FGG^$x2!AyEY%lY`N^#q$?o-_wUivA>d{uSk7>iAgd{p#zL0E6%2-)2m3;scyY{v zxtz=Q4e>cJng$tk1L8ZJB1J$LbGB=!*sc_;^Cp51e{_BXPS_nK&ztkg<>%oWA&xPp zH(<=abJvcz;v)~oa$dw}W&X}f=EonrXk~OtDIe8|Wglc}1iG7j=#sxH+hRi~>{>CDA<9zGEJvR5`70IGyxGJmurfDvi*S3V=fJN>Yc9c__LuCOyW z-m90=6)8W(@W7IOkU@80fE>0UXnc%0mGR{BOOp<(iJ847;9^H8XK zIHgqv`wO={8rOe*v+iS`8k_d?#Ye6^Bi{VHrMewXzy0QYCx8v$nn}K;#Kk!A4p*uC zMoSx(ywzp=N!7Qm)cp-wv43^@(b$-6yGzFu_T3we<#DG6nHLrHsL_HB$B2wYU8BZC z1;oSZyA^PcR5tBg%5Jdx&BD2qQBV0QP6TG|-o1MkGz~K7S%Qobh*F0!$Dpw)Coe^q z!cD}^;fV?|K=8OqgRPu=Qdy06m@RhLY0>-4|N7y!c=H#w#v&Q>o%*Kr=U=@%UUI<# zeJzbcTb218Z(f?Me)>l<^bz`brM^Ct?3n^)+wMA4`J6S{c4tMdot~d>*gt8?%LvZ> zVmNXygL)vDI>3)ko5;?5Had^k6}H$@dI@81d9c0C!!O~E>!+~U58DSBbQ;-(Dda|{ zG8^*}$g-r-?11I!9IJGMXaScIXj91`Q?f03Z=>=2zrVI2e(yVv#oU>#@u-aX*I%(B zyD;Xcek;tI8Fh(xq*Er(+? z)A?Cihql-cYW4kp^d0km_?a$@k&^9I+D~4$D%LKZmi@-OQMTAqS&WxV(|RlQ@iadl zCeGunPWqGwY04*I!{*b8r}PjX3YPr5qdX7g?2I!_Bab*M2D=P&4pcm2xBShb)#4oUeoqA^Eq z?qkD|q1(rPimNy{vZQ>Nc)kpVnKYd9hl(2x-*EOxvn!S6Jp6oqKAytX8czA9ta;2U z{S+<@=j%f}{N}t{hc2&J+Y=vOe=s|^aqIfs@ubC_+7T?=b>WZtSdR8n-WPW=U|o>}%&R_F%CnA6bt zf$aReKNg)ZU*~AY5u|5N4i6=G(^CzMVMoKyS~mMr#4e@U&&pi4zir!dH2(Yx8{&&w zWX#3iHA}kV?|*G|%%9#C2W8C1>o?}Zl|$P9Quz~h+&*=c3a7BfXP+{J9mls)beduC z^9~sBGcYOV_hTs3Msj&xn52`IrbBNUPs8M;vL$b73oE6m@zhm1x6}DVb~x_l4Ts~E z&z_q7x`JIJ;9M?khkTmh(sb&yGcEX~!oa2JE{AWNY1&wap~3xXwCYalaQij_@1w!5 z+j=x`j}*>oXrz769q0=l!lm4xR0^dA+_QpG1@mbTHPJdnHGe0{{7mJfr+JBNlbPS@f3 z@^Rpt<}!I4P9G_MwDFrx`aBP^nTXDE%(q{o@(P`%xg3q;14o;c+gTZ8&_P5YjCw7` zJSD)DrfJO@h8H@$g@;@k)nT|%itSnrJ#lnu>^rVceQKXE{Q zF^5jXA6+mj{`kc!qD^1LLfMYzHoFHM^0sprKYPef*fUh3E{C6nYcbHS2YlsRH8ADM zPNo<7Wp;5_c1C>oe%haM5)rvKjb6-q4A@D!1ZJC19R_X9pcW z?=pifz{28A9xvYg<)S?BQ1OY>8B#vsiy2Y1Gg-^Q!cTFHW*B46PsP9cL~H!rqpk5% zc5-P|ZFRo!(9ZbUEf2+Gy#hFTBHnSu{CNE(OLRrMjQJQ{7?a8cITX8G<|A9;P9xur zas!V#FfdH4@}1fEDOU=Q@l}(b!j4urrFXRIXf(XE%X!Om$xOE<#_EUPUB5qG{B->s zRvq``RBrfG57qvbd)}wkw4B5Ee%w!ib$P-#;`ztv_{K-LoHI-wcRBdsq*Dh*gbDIQ zbMQu6jfEUXN_KAhYVgr+@W*7#yt-Uw(3RO*+-mQqf$J3nZY+C7i1)_$EHZjD!MX^W>R{H$#9rVRZC_(Qw3RM$Z`t{r&y6^r6EGUoj{sB}!L zB(Ka-s7wk*%E3R*^0ROJmXG@izIQ+fI~{n!tnh?vK=HeLiqGLj_q{4=bUKkcavlk% z7R@dwTBN((ubtl!H*P;1pVT>yKitW-`?NU1wZf`ztX(<&-2d<$hPD)*aQdVMpLCaF z@@YKw!R36yxD$1A%}#Ot3sFZ2n3IHs(20Wuk2j;@{g0b@y; z{tt4Qsy+E9Gya)*&0q_PO+9X)(|P8PEd1mZn=2q6SE}zo2c5Q~h2LZ9(j&pPOf5{V zj`nJj0{*OY^ZY?Jp1d?N)ou^B&v0m^iF?(t`1sFN>!!zzoAk3;^_O34*r#oGeY~ZC zo#l`x(fyiq%gC_!e#j@B8hn>A4#q}NIcKeO+oYhk>s{P1F5C2-*3Pu+~@+Mbms!&n!Z@K;k6f;Xsgm2ojEAH9x zXgq%8P;|LiOjLtz*;rOJ zh-F+rQ#wt1IYLrc^_4!^?5T$i9r_mVx8Hs{YCY>5Q#NnjtXHaq_bQ~-<0zk>h1P?o z(aNwzicx{TN&<&=2IW|7t1`S%ga?lo26`!_$S)VWq%a=SQvAi6vL=s}vXpHqvRp=e zuEMP9=W2BimbLBrN|plpz*=_5u1lLX^IQ9}-xGIf!oW6tj|%W$z#Xd`!9qUG`Q6#Jd#bP+jQqODDWxyq z(GN%s<9DLgGw4$1TP`k#j&WKBRL39JTSw7`F4ByAxh?Ta(N7wW;b;I&$oh*D!2QI# zy1J%h+Fd~X8#iw3XU4|fybF2@2;gd5T3I#l%>q;FB*k*D97ml`Swc>?mvR_I)B*?K zjsPMb%ekRwQ6Kb~81fD)FSDWw+Yy)Rk*{yf#aUX->tK8=kzJju$pFRXXd(c*#q#Iy zLjdJZSD3tc@~11UUw0p9w>3-a5v?66Pd>Qt`I#N_102%|R^9Eb?eV1t?u|Fy`psB6 zeNMD?x5sgH>NfGvD*q3DcC&!{<8|jhLuafC_s(Ys%KXXD7wZ5d36?1_nLLsbK;G=^ zOw-RKuRe1|+_+J9A?TIR-TI{Js)dcc?LLxnFfQ~%>WHI*QPPC1iwUQXSMAM@YHbecBW!ENodQhv&p+l;ab58O7B8T32uxZ?sPuH!3E zGG0^aU0otXD&lD-ftC`U)65G4tybrMo5W9k%w+n{c7NP$BqrUd8ccn^Os8FB~k z)vmW>p8&{`^v5RAeleYBG3gBXsA^X43uVZeKdh1{XB2c%%+qcFX>&DESgh5*&gsRp zwi7b`ZL#m@fq3iPKZ$A6X2)K^>_0)j6(YfOi|3Uy=EWb}^OJb?lBMya`HN*6^ivM{ zprAx*MnX0@P&{)=W8wj6gLVlhP;^PqNdvx654a>akXCJg_Nu2pRg1qF;GVLqxa}^1 ze}DbHc>a^;HT|~xNXZ?&fwND4@sp-I-wTdZZyO#TrJp*|C~G4^n6!!FkVl^9iNagj zP6|(@&BgCi;P0Gs&gshxy23B->Cw+gbO(tVx6K`egj$>{n?aqGtm@%>vjX@xyA`d7)Y9X%F3+TO%?(ZJgk*dZP9`UOYhyqVfM z*H>5AHrJX~){Rdn76$Wv*-H#+uMD~l!N(E#dgY$E1KQFD?ol1T*wd#I%gW!YG)(M+ z`a@kimHxN_sG~>uBexa57`|KixbJ0ui+>I#ilhh^nq)*vd&Iu2+GgJ`(h`d`DWJ{7T1;c2Aed=FHMbaMH=s?E3XHjKz}36>0%--T z1$xkHO3oa0SvG_zhmR}j+$;?5#GwlZ3}M5PW>>(WT=7VmQZT?8m&;8QpEm4M!z`NH z8J92Yh?~{H{#B>le{bJWT|CpJZFiLM#O1$SJ6cCrhn9jfjPneeP7Zy=TrVZ$I{H23NE?eg@F zoh?=U1VfQ+M+L3_hh+3ghn$CXv>qJ0m8PE|$6=*CC?n76eTQH${+-I-CqF~jw?9O3 z>`|O@B;)W~*jea35X)zt6+en)@!?00C{>dH8GeB0$a({}SYcid^eWP!ZT)%T5&9O( zurDAi@E*Mu=u!BX(q}1svCzO*o8Y^YcS1Z9o~IoI)4{~Rj)_5w@=G};2n9!f5S%6w z?K+bHE!lYkr5S08f%@xp)HzUXy-14X=))+-TKj*wYN4%Hv&C86ZE^MLp166l4#yoh z5qE9gA4}(TMW;F!Q#U4zCuLU-+r&v9N&QP(*~o*}I>-i|xOJ1$Myh?syG6|Fc+*j9 z{gvo;e%ek-V}*V~ZM|^m(xp#Voj;HolMd|fM;m4h@0lC%dK?wfNk(&JS`S_Ilz|uC zS0PLe#ns|c!Pio*5-f_E_mHhJ3M?eX@6)9c#P}9pE(HBxw--a3R4-#$~omNm$Ams z&ro=c!hln3k$7&^WT#I&tzkl-_F!_*tz7~p2*{Fyg-bj1i-BSpem&5kZnW)qr*=@< zqDv(96?ZK#?(8gp8+h&&sMaCd!nbbm3zL_$Y#vhvp8}K!!zavUs1?j`@F&Y4^Q0^a zu|Zi*D(O={{60sw#>LO~$Flj;;=KoF#hnkf#Y%nk@A3tG*{+Jd;CtE_b#%-~>J0GN z8Ly2z>E!bjO>{M@JRB1@!%)UgiYo(b;6J9-JU1|@1Ef_;YZ4RWpn)N{rY;9mWa=p+a4cy z`Knktw@XH@H=ehkpoG!CY@r{K;lN-F<(!S(tK?7@Rv7~ZB1pcr)({e1fcg=~nKhUGeKwm7-iu`f;1xOiAh32<(#>N91V%wn&@uaRZ z;!sO>^t8{87c5#GZ#rXs%+PZ9am{M@*&cOo(B$DTgsIAH+9e>3)%tzv?qKHGk#>FM zZ6ZyrTomDuc{2ZmoL5GFuZ}$je zzYfgp)tw3}j>p;_eR@?4SL(Or>TjlW^u$OUYbi`qfS?yLRpB?e6YIMHLMCkt0WL)0MBk!LfH5lKuR8orPL&`9>?}fmTW2 zrRb&%^7O2?6im4^4=Q{&CQ7zTOT5Eso`3kdjQImH=IXnzUEUoxyliF6(KcrG`BT-) zYSE7VJ<>`s9WtiR^<}=TO)(K;GeAtRhw=1iLz|9Sq!@wy*NcuCCa z?2_^8kG;BFhplW54IbAd2Ry8#cZi70p4UBEuqKUyy z85)fFF8TX4Szrx>+^*RuD7kSw*l>mOUbLY-jym&FcMORsC zmR#{FqG_k70=%I?;Kh?0ItfCp#knD>DZ{`4KfWF1sW&^orm8!1S<6A~L%!q78{z}^ zXq#P@=C!M*#b3Q_Rm|jzY0C5GPe)1traY%%w=;fT892>+;2S(0|@_#^St?VIA08y<+S?S3q?()VrJ z81LM;A)Ya7Uc7n5x_I`|)vg^S>G#SQVO^O#Oo@5fW>ukW`LwWQcVW`pSt@a5 z9#&Ca7hvdnc~wvhW1k-@o)dsfCI=W%jOwEb@6tq!-|X)=a4?R@BzNdw62C9lE*#s0 z6Ec_-Z01aY$}u=G*xM8ya0+v#z>bN;FS7Z!0&;WY-Kz3-a~0gl&k>7`Hz8a+G{~LI z&iI?D%y~)!OgAuO=NeWduK=iSjfk5m!;G=T;c@t|Me@V({j@HHmy0Q*hbPV+@O)@z zOFUihhb17UR$NNNnF@YQaiv~M+<0V4ym3!UT(O`x4v8OSPr4D50OJnb!nj1oF@{O= zIK}62I(dxEYV;2aPTO^Kba0Se%`l}uGw2syc;P*| zW#%C@-WmaAIrS1oAz9 z`j+`t{eD+2HReaPB)2ioGVAlGnKLKm&Yhd#b-h=vdQv>NbY0#&z=+0^ve?MnaQZ>l?amp9RUU0*ryNbkyhZSgvl5 zRr0-xw2r{Hfj9k(=~PdQB|j;xV_EM=)KyOY;I_QchjvByUK#Utoq_nC;{7+>bW>|9 ze-!Ec$xnXrWBF_JKBe#fXYV}V>@2Fke>PjQ>18+B)Geu`kN_d{gc3oN4uW(STJ6bOTobATrl09S_McPLPPb4|}2W$u@(M8nqi?0MuibYQ&T5}pM!rKP38UbRXJRcAl1 zTer>@Em{=Zwr<^Ouf6t~ZQs7#-hco7khYB*!{l&%(I@?$mzQU2*RHjL4m>DmqEVwq z*~pS1mYdztI(O}2g@uK-Vf9Aan6cFQ^yy>SQs^vN?Af`C9o@CN9bP=#KEHW`J+okr z{dV#D_TJ`oQruhZd-LD6?=75dXZ0?ybBgz~QGNPbUMKZgl`p&0YiC%VDwTYx3qp>% zqLS^8u`r3l#_)!yq{P%4(x?NycUI7MlxQ(09s|*!@pSxyx1b|5MPks0XbfyY6xji= zzzN_7Wk`b{yvyR-&g$MjN#uRG6gBC=7iO#cGhKtUW7ccfVMS$!njv~Q*#`Hc0E7v< z73f9lnds@IZ&o8^wh%MCPLH1CIp6S)KTIOPKT`tBg_CK7da@%CioME>@>ieCwM2r5 z*W>m&psskLe!TATdXaC`br^5Bd%f9OX`^0kt+?vqQ)9llPDmEk^U1#}omHxfGpUPJ z_ub>}8M-Q!atI@yRmFXQY{ulncRjkl2HAvj0-{3DASCU?GmLhjZ7fO7Pr}0+SKvH5 zuM**AHM=YG%cRVoUngZQw@(f0Y}cP08)k2)GIzltO|HOsCZDvH!cfp_)~qq6U=}W1 zXe(B%2nrkf-FIu&izgzt#*JP!hQ&6%lGY1%jVC=2r#E=8>BZA{ATHq5*Itd;ue=iM zM1Ms^MK*AN4we})!iEnYZn^694jVGWdUfw^r z09SN1E;YSlc!X>67{C|(8hvKIypLAdJMb+n$C1ZeS!kXZ za2^694Erj0UD?{{qui6PC}1BcYb*`mp;1j*Fka74u04GoA2xt{bArdyoH$zx7kQ8j zoKNuBK|BoYUX6ynGhxDnXKXUx``n|!>sXWq{hSMK}#&-jNh{;eV zqya(OjaR1~fy9s|cdLs?{9ru&*a$Ga-e`t6j$}9!DszpQ-f(bF`|Ol~>iK9GTeW6= zJ#(jr_)w}Eq6s#Q3=}vmyd_JP1oMg%=i6_;ZEw8shLcyz)*1`r03r%5xLjE?#J+j+ zW}^oWXw_vfwE{Qd1^i(MzISiS*0b*T4I>2QTHLlvH?2WGjSkFn&p*FM3=o=oYwN8^J#KMj54!Xl)=)$}x3RqPnS}^mttcF6ujf$M$;E-MoR{9Pv7x;0Eu$ z2Ba&VPqY?>gW;CfJAt+?vz5?;gj87NL zrBGlT-~mGI?!4nK6^JVH%l}&4GnX>|#>AfXxsMDo)*Y2=C_Y&al6WxCjevV&0tKjB z^=!d{1*YSE?Z5y1uRZk8Lwk@^TwJW4`5RB`7FX&fcGj?R! zGa9}>M0GIk)EH@0$db8^8i|Tc7w~0IJaXJ;z{_e|B&en0_Hsy?sE4S70Nh=<)2X2B zWAIa7JsS`t`SbXif+Gp)7I${q6GcRNq75$mQa>`9iLLtYS;Bq%;~!6#QZI+g@)Op< zto_eJab%-KL6j?GiXDX5Vb27hst2=3PWlb7LCxQu+qkubpF{waQnSVyZ z?9g-m?)?0GL#dKZ;>YG2ran1>M-*;o1$g%%D0=>k zB7g%wq=iNabNjkb$R2s*kuW;o!}L*lp$UcGL&NXe)F^p(@qAnS=6_>erp>esdfITp zWV4}#RxqHyWq0eM#a^ZM>}>Vg=e=oP&L3bOk#ZlYbK<*Z=V(q^hj55TOy)&9;v&&d||URW?e; z6>ryY{k}Nt?)3sP-xd%pYpoGK@liJclxfoMHg42M82n+JKYU9D`14WJWPaMKyQdMJ z#On^H86NmIPb*WSef#z$-5kkL1EJX@PeI!#V5jb?{P0{~C0v6c$paCC10}aF0fIxi z91+cVtf!N|Y&-h0npfBkjS z8Nc@U3^t4)a4Y19fJJ)8- znq@D){Bl?i5XISp#z?oW8Zs8H((ShEiD|a&37vP3rwL=N&*+iXv2cK`(tfX>uUKF| zSFiol9)0Z00Yhy6J_D?vYc~x&Yb83pcBPlx^*oNo^Wk%H4p1aG8L)3om3^^rmt9hk zZYwwMvSXiEuKj(REPp_6E82gEjo04zs~2b5?L(?;fEEYti-*imR@zd2Xna$aS`)l} zAl(@172K#VFiwxxt@ZJTux-u9rtq&W`s2UB3p!nbG)7Ui06DyP{H$=dsTzNm5ifTy zRWEA{l`s`O+lN5d7$B3#oV`_{!0<{P*_+P+?_sp_RKM{z;D^IWj1Hd zoUlINi6@@0jq347q1PZOYVB*Ue0Qm>f8|ZnPIm398g6~ZkG78e``X{vZ?eCyT&#`P zJ?+MRg*Lf=u?^LhxlUR{N3Wf&Z_ox^4M}g5hW7gGyl-y$=xwt&E?qq9lfB#Wbg=$s zvUb@YG$56|YQ2>Y%Coc{-E=unrG0l%ru}fpF5|8N-~Zp-^t2T|mz%bVpLpAY%t8b8 z4F;Z2zNv4iV`y~X?&T|yOyY*0y%C_jzPgWekv?`1NugJ%zRQrkTRi#~-!#1$6m=MK z*Z6w|3SI8n$d+*;!>K3;Dn)wiuE+?ODzpb7NtM<_{t&1rqfsQTOcMF8%Z+gGFqyz5 zROT#zqh~&aIrHkCxgvos@S)7Wxq9{LFdzQZQ%~9Lx8Ghvh88*2C_5I7q0}6XJn~4x zj2k!3BpAlfw2ls}87lX}gpE>+f)^^>nmdn^;Y;L>8-*P?jRNi%7SqwYXO!XKgAWcP z1@z!qz0VLnJefUvwmtXUb73SySKHJ;!JvVbvwE|Y{`rA$!n3e(`LNC*CeYrY{?$Dv# z?GNvl*;4ImyE=WNt?bm*ZkB@ox3<;|R8RfO#pPiE9`p6e;(Y?(FXg!{p(XRUG3lc0 zpu{oML0%t0C*R_gyVK9Ny%C)LM6~-i*CBLJ*s4oMOO1dITI5_S(P7Bl5h-xC3m3g} zS_AX|>Do6`se^}B2L$a+j3%835OkAv7c7Jb_r`#yKM^mY%A9@XVQX4~1#skA2MKt# zXhJd3%YORlr|pItZm1!NjHbs*d<;ED=atVs`)oV**kf(v$dN3740(!BkS6cddXL-b z#ddk9iKHDpB%=>LdyAK6fOIe=fr2kAEDR$O@bPn>`&?)gu~3i|{?9z~jOmc2TB$7W zB)-ph%Zkc2goRrbefru%1H0KnqlQ~nw>-OX&7m!er+}MLXy5`dJvSC05t;W09eGWlIv(N)s>5rWej=^j zvw{!=h%{sK&C}6XBAsWB%kk{i;x^xBo@fD_BG)3U%Gj1I2`($a*;4lK!w=in#Kni&d{>MrI%i6lO|0HL+Q+elZOCl#dz-<`rLTf_HHNRDRld{_-E4Wik@%e zG4u8m5}k!?#~**ZU3S@JVO2dnc-A01{?C8f95tTS5I~Td*UR#h7bUN*u(Vg-GgcpX zlZtf*8tn>=g+etNn7SYiDj<)ScK|y|XHZez8CHJ$Z-Ev;s@vVKXO5lOH^=_Aq|AOj ze}`SJg^b@V))BFD((NeimHXMokr?=vqYly55)SJC#c4Z3Zs*_`5zlEu~PU zfElWU2$Y5*@RPq9s?@2lXi<44v^Rz$6wn95pb??)N)|T^l`(cx0sK*3&@<1`+3XzW z8eIVQ4b7Re&%8<%T$;8_b?%fc{%^7uUwqN-)C%=~{VPnFghgs7BWR1xiK9?XKKbOJ zR9FQ`uatOEC_X&xX>70gk}9uB2kH0p)E5qaQNM(RFVPmi4q6JM94PoHQ>NIJS6&&W zE8cnMov=RP?z``{#U7D5lS79L4-KxJQa%jdV}Qw%Cx;yY2OMxfXmEj-_*kDpez@Ez z1+nfX$3M_jMbva8ZR}q6nDP$@_u)UoLp!JX`H3w7y`8nUl0DYdgFcCtqY zRM<(n%;i`uj=pGRhW$&2cZ8QqM`Npzxt62b7eQ3;;#|==uu9m3g z6t}3y{me5j+V6k=`x-^TzHXE>h0uHBwA`+{?m9dA=%d4sGMP_05ped96E}u*?n}_r zJR>~dHqXdKv^UKZ26OTI@4vsDcG_w7IN<~vKYo13AIcO5{1E$YPGLitmucVGhhl3`Nt7!z! zz6?}m@Z*3Y9bGql9W|T1v|x)(8JlNEGk)QvZnN(_hp5I0Z=8-b`U6m!*=LTe8@ghE8&5%@Q~3a5Muif;LyX7~vamTF1~D8!Z;u67 zMB)qOLZCYSh!kdGcy3F82GRmk$ZXOSrHSwH5d9wit)cJ4N&M^~&sN5jmRH)3|GC(n zuRfdo+Jm}>t!X)`=(m=Z*$e;qkKJ_BP2sQ=;zC(~gCQoiWdZac&p6`@JK~5VLjFK6 z`GXP%cqh!h42klsDd~l0(R}yb3vN^zg9Z(Dttkm>WZ2e{ANX6Y4eEpPI@*-{Ec^G`o%Z`hWp?G}9hTj*qaD|$!hWGc zXuhOj_d}(FuF=Z(-)bK_Ti^E9?QFf$LKyU0itM|!WOa}B4@!wVqg+3H1>2Nxr zh4;FE?=X##32@LtsxM4k_+ZhFo#nbUEkj#x((HSWEVNtR+p1pJZaa5)XZz*3`&ruV z3VZF1S@x&9?zI2=zyAy9ii(N?9VlsEsea*w7Y0R6uQ5853w#wmZdakjmckj?8=OZ-a zuAAqoG@@1ZmaZf#wDPm>vdW^-mexi}9o~{w%1vtkab;;5>ei>0*mW~w`wkvDbC69M z)!TOJ3cB4YL_b-OX@A`h#u?^?R`>OfYptU*TKyKh|UG-;k#FGpM zGR&T4>K1mzKu=rIl8nas-0RXW$P;PuI)b#dl^#lz4zwmWB>v}}HFneV)w-}L-HN+q z+3BOZ+5v;JbwWvPP~t=~w4(zQ!-=ULi<`~`KiZ`OO3+=D_7HKAVQ7ADrwayvla zN)SRo0#jfHij4_+6dg((zkEvu9u~n>9Lc;jySw+siIcd!;P9R*9jW?Dg?L!R6{w{< zE9_@aF1K5_&s_85pBdBBzIl3yEtosU{&4%B?6yDL640T@0p`8AiWH!C_sLIwGAweV z<%Tf(yf}FSum6{T^fqT6)yF&MuiNzAF}yQs#r8OkyCsh}x)$Yr#~pWs^8vt39_=@3 zlx0`$vNz_;wO#lA$kI=f;_f?1jXCwi5t0tNnxx0ETEF_PW&C5R?Y{69tLog{(sYoG zBC3zXX8YdSyoGRT2bA(b#Ts^hLFf4CdB(ggcG!rXTJfVZ7xaGB;Bs3zFUwxnHL`c< zp7#MuGVODP>NMz^2ESU9MNQ(h*F!E#O+xlR8raKzG9?XfnU2ICIx38iO2MPEl7(pv zRwC!fYnfW1Z>=t~&&^nGTQ|uyr_x^EQf7a9Ym5Ej<9+Ph!~2DXY?P+zG-t9vTJR2k z8ey+dz|pP^&2XiA_mi66J4VdVZIV?w_dziWu$_S@b%qkz6UTflWBf3T@9sYYst)Jh z+^r>T;v(Y!l(;K8Xmk1-8b4{mfIB{Yso>&T&J0!N+qM1XNB>-6x4xsExrSM;9-nWQ z9@fqN`QUwa*_BrXRQ>v~r7SnJELmv{Tzl=c_K}Z#B%IpD8U~cO&yBaGU{3l3XuYyWO^KDYwGT>9$F3opqOTW=;qD z(zNw9tZzq~Fr)|TLsdTnlKHDrTGG^!*rmEaLwR8VZp}iq8ilTLcn`A5g^k3MXlDw6 z0Td=moYoH~kD*}vWHG))D;*f=3N{wHW&WYn<8ejqF~!sG?y1PK>2e)9BG$^> z{M1sr^-Z;`y64zu2Ity@uFLG&&wbGzdwPcD_3mXk9XpBN={0lY=bwMRU2wq#VKEi? zKyQ$(X7CjAA;dV~^4gaCKu%olqspBHb*w)@!C$Ivgm3CXoSXi1kCnXlq!s8q^YV&V z55E@e!d10lr{fHLH zfv3Ggdyv^Ek6JUIqwzN7nL58Abu;ozJxUlaqr~r9#+pJ)L&74TJ9OmXRu$!WS}S5| zsFq4k&`IB<=b;QmX-@s^#ie%0uwFWeQXSn~$&)h%PD0FSp3C$KI z`g!%fD^y`*NEn024hg3zF3Y`y)2kx*pU^y2nWo@pBvs=q7rgNPMl;^Lo(Qz zP?t?Q5rW15$~@?DDc?JuU1~p51yz`@hS2u)R`$k2cHXTw2eiY74b?r}72&cG((}=e ze$+0%{BqMhw_#BP3*o%?*AhHzOxoH@804$Hfy+E}(FntkZ_HEn*8-P;!$w%%!jmog zm2X%@`Y`&X@+o1d0SfeX>(F_E-F@4)?6nz-?UGYIZo_pbQ1w34fD@UI##Ix%nI6F3 z+Q4X5j>aPoEbL%x|Y2Bg`kOEc^kDfKg!W!SW= zDjVB<@7T@;Z`)H@Zja@tF4=>BF8_7;i~r^_jqajeN3m1KQ}3cX$P@PyAGSH(!Of|X z+)|!XRc8INrPU?V9dv|rctE}>c2c_=cc{TH=eVw0g+^(!wD#e3jgGH>_St7SzCAYN zK(Gjrq4Y{QZ&h!5n-bfdgp$!DHa^37hd2z1oJBwM))|VApIdhvFs!+l1s*a3+ZDOf z6iHK)ABlsJh=zj53YAX>RZe$2yTq<}cD)t#&as8_->{y~{M7DQxm5Q^_O`-)ovgHM zhZel)U2yBIw}#<$hHX*g46P$%?WyoLlou`SANg#r{E5Fdv4g(!1?^heZW~=PUFjH zQ~BOpWwk+cs6wk$PrSHKCrj5bWaais`}e|ac6M2XGv@INKgEzyb8NrbLpR2 zrTy!w$u8G+wtF=sKPb2TuY8BM&7EHj;`3ha+4|NaqSw*(lpvmZCAFe9Bo&XEnPzu&_h+h3b_~O=UA5X$99zmt&j?2D81p(H{qL| zh^`vt0OCL$zaR5gl|Fp<@OAS1a`o!z*!W(ekP$amdJHY1{OGN-dXhxI7z~vz@67?k z2UEaHd{k^ebK#HD*cgF{B~#nev z*rG*?gEIf>SHBugfjjfeGefVOq4oBxsG>Y-%jd@APg~I&%7O}X<&N#Pvqyndjrgji zZJMbuKV2|`V%I9yVA4Bl5!?=Y;guIfYK|Q?ZcI3w=7kqtu+M+~^I-~x`FQTLry}yR zBAT;|IgeVKzr@E7W1sHXc7>*;sNkMnwbK@_DGU2_t62F4sD9(dwi9(~+|(YsZMtR= zwdmcxq3vwzwceLI*WGI@K>PWpo+6#C&D-|Ffu>Oc-3Q3cnPpDtUG|eD}NGwPTJs#;&>M z8hifv=R-NeogM(?uqBjxYw(x~ha-`*bXLQ`g*sqIbBbu@cb0FHZr9i98VO6u46m1J zKK+VL+PABBR=?k@o;n>LRuaoyokCHcr_Fx@w7dEvXU_VLV=YYA;km z?$TcL3N7l%K*2J&pGk^T`HFo}E>nwlQGTZo%pIG_QH`UoHu;PMjTd;6Zp!kPB{Grh!XI|8W zr@4i+1z6MWP||oLk5ZMQF*crv9B)D$>^va=(bIk@#+)S;hje;O=~NvvURY` z;7L|-_!(-Y_q8Pp7ubJvoGjblv~V?$URYQd7NyeK_brVaE_BHymxKl)4Qc?sRH8ie z+!)?KE8!>ytqGK&EG-UQyspd+ymMYStKqZ(9qp!bhFG?=v_>FBSBxTh;VN#nUTcd! zukCDWG!#Ee-+!c|VJ{iPo%J!LUaO*O&BP>#3%*j$+q$fix22_}p^j#K$KC?254=a+ z5_H2G>U*#ADFftJeR_xQg!R0oUZ)f49a}EY0%$b6^2#gW{)oci<80A;|FtP+UtyoV z;%XZ|xTAH>R%0cNI;~dfDwXDR$booF%TD6i2u^qP?Jw4Ta9&_U1P z#JHM|^*oRm1qn)+;cybb@G%SL5FWO<`NBE;VF;595PmWchI++9nAQYnNCoIwbjnG$ z7vA4w=RdOA`fvEJZT-Km8l3E$S7?2^cF=Ikf^bsU_rCYNu=1I-z?b$=z*9+Md-UTn zSC<^MC%S|DO6EE0b$4!8tC)O_Hea8h17vnu6~lhocOI6)Xa#(6Nr{!{@*R$kee12a z>;WA&d+)vXhUBn)lpZ_sIeq%{U^r3mvdb^CBPUO`LY+j{QTR~m;m&r2qNJt5C+8^< zMW1Ysps+dq~6X*KgcmMVec$&{_B5ULb=-r@AuT^0Xu1``XTS zv9_}vAq9WUdRD%heXKxdHAu7tWu@`M80uyJ#kcG6OtTA(y@ z&kE&zHp-lj-}=_KYAM57Tv0?p+iTN$FPVihU9>eJmY);c6p%BHkHx|;t zBr=Ha(M-Y(W;hf1hM(2~r<)!+w2&cn#g8)Ys8-c$x>#b$-S1oOJC9rTQ@^r}BDmk6 z65Fcq5HMXOX$+X-^Uo_pVmA-u`9tsKIg{i%!jeJI?xz?8B9O+?HNwxy$ zR455UY#dpBLcg-Q^5Q#XhRTGN{`>F0AFg@*{`bEhg7U{vv*72BcZc)7eS;l$!tr)c z?*i-7sf!lQ>U?O*l@uZ+se}9{18})~wgq3qYIk+L@1MESuK3rgK<1qv?`J0;)YrD_ z)VO%s>4|sBsIpf#q}vqDqfZt)r-_Y^>mZs#dg*3CDRq>8TLX0nGSHH}%T&`y9`B7k zbd(`7N!{66K)yw%dtImD4j-X~XZVTEAdgvx#&&MXF5g_wq1ZX~bKJOb;hqTmPo6x< zZomBwb#`OtjIezsr^?dL zjcpX~NGugDHVH(LF;7g7ozrd@ipM}a2?k&W&s1Ph#x;t7CIo`!Q~+h3D`h@gy@)Ay zy{($$cFTGDVcU>ZU_%CXwRv;j3ux}U@4j$>3V5Rj!;sk@LgP6AKV5bjkEM-5x{PrW z99jtoXSc^>&nqn|6AYCDH@J-*J2qSvGi};5`{N(~SaVU&$Pqe_M)S{W=Pj~(Zv3v@ z^WN)b2T!zXhK;f#3I^MLJ@a)8LaxfAdbTQOl~hO}PVe&u3PJ@0Up@YqYwP|)*U0{z zv}jOI;?1jzx7qRIwBpx!79ofEa+LM~8fyPP&7+^oMK0=wT)8yU?$dgeA)PD39`?3Y z>Xh|V>y=3IK76d^fY+6+EtljOiWuF*R5A@RjOQh~j5TBEI+Qqu@6hXt9KXCn`%5pq z6jC&J@Zit@IQ#5#!nAHoFVMD6*jPyezwo`9Odx70bVbPNa6#+qXxDc&G(JwmYZNdu z5aq-tLzc|l!+GLR>h#bdo*oCx;2p(|AHbRA@5yktq-kq zt@egO^Rm!tkyb}UU5#F%?j|2;U_%c!JG8by{I}JEMEPoz$<$#`hhl^&Q-WxMz9No~G;EI%bnr9R^9Z||3 zy><+ZYggp1-{SL`urvtXe*5jvLmxeQba-aVa{vDQYdU!G;i}Wh%JvM6Y;O}CVO~vT zJvP@EVa6T`-L<{~y@_%~(KZ)AD29Y#dkcmP;)qP#VHB+$;zrrC6(_3PJ#2H)R39E% zV>CkI0orqNvTcLTjvU!5sX~TMW-fFKrCp^(a;xTM*(~+e?$0;&xSV5Gta`x4+9V!;5hN)34)aJ1%p>6}Fu)H=9pz3-2tT-y@RrP2@RI>FFrb6g z`nUm3(}oS}?aSZ%i9K@9tv0B?whCo+(>9|p8e)$<_Lv=V$RQ!~@t-J@z(@Mw#fQ)| z4!}n*d`-jDa-pFQI%_S8tClI3WtTCiz%BY-A7%K(Ah(nidJyyG&9i5oeb&CIk)i-y zb9E6!4_mZixpglbWW7#2+U5`LZ`P%wK5K|Or?XvAP-GMP>E8G5y{v~8=>TC!UUDp= zV#;0rsQN^7hXBp+2Wv9bvRJpR+>W{PeVv?FVFz~4vU@KaYTY_&%1WABmgy{%b zv*o&x?ILYw(`dWBsH*3dK9zQ+E^^t~1}opG2QYLJ+5?bxd()!0mM-Iz9eCn0jqRhy ztob6}7*@ylLO1e}JVnU^l)FTLAM_Z#^P`SBDx5j8bm>ylk?UdS3XKDBxIS(4j+Z%5lfpzy9?vn>ux>Ez%W@8F@XeoA!IH`|Vw({d(@yBt+s+s`)W)dS-oLAkcUC!N3mhxunQwPp3T;jw@h5xc zTNLmYO-u9}&-$!}#BS@=CDSe{?qolFW0Sq6W8fC7F0~0IJ;G%*(YT`FnJ3q&u{J>W zSNuvV-H+5oE|b-6zFZf%Fqb|_$HsDeY-`S^Q_hpo8>Rij=foU9R?q>>3E(78FkT1K zp+q-PhG=|K-*XBo`iS_+M@%#MlZx=c57O$wlpxvJGu>iDDY{v3@z`b-#?No0s;Z1>~e z+@HT=`?JRzeUCo-_jsFDKmLXd8x|BhQ$SBW^^|?(D_^n2)t*aA3T^GZf4437>iE>- zCt2Qvah5iqz@FH#)t-23hE|bf*d-d0pQIuA1NsiIyv|)MJ8Xedqg?4g$@@aOX!(nO zCOT-r9eIy_$2~qh!LOPPndu$ufI?M(uj#UuG@Tl^tke#YLXYWc$`_$jHD%lp^`$e z`}{si7K4&^oX(^~xKnXc{?!8LV02*l^5tRGI?9|a2UHp;b1u!`uozliiRQ~|A&b0_ zfe1-+@HT?>f9?@^X-J;Ce8DIW7jN^;<<-Bre-DrC#{KY4zPdYM{26!r(Tb-*8x7;Q zv6~Ah4*-<`G_d&Q;)^e~V~;)7rq7sRf4=Ka_R`C-Ei}bCz-HZ(|FI=9cF1_^bJzsy zR5Z}mt8Cq|ah2V%YLTvS?P^!#53nQq7urbm+5DiZcoGVw4 z>|J5EXp!9ItJ7_wYQ1ZgWZLhCRA~`w>#ThDG{(~!rMoSj+Z#Q}c#urlCG%gGJ7t1& zyBP4CV+6b zTXkb%3EwAAo}93EUArVyV-jLNVCGP5VxK96zFQmG(?nE4{|N}#!wE*X;v$heli-E` z2?hv{fk_O>)8HUO_zuo!&mI5x1NdH7h6GR5e+((o^JWpm7R{d&7Z-)wC;Yi(mYrU48Y{VV^zpcqJOeSJyMV@HExs@566(a{xZVdw3ZImm6$hBeQMV{wzC&Z8IrM0lmV9=4d~}SdtQk`5zxc&3Y}Tw+<(| zo%23*Q@RaTPk(}j-oHC!m*uL>6RxRjETOUJ>-WZqM|i_XBJ;!T`RG?< zz(;gr`B^_lT+W01xqv7bdEjYAkyBsz`6%cO%D&4TvBc!BVS+)NbO2H6;HQD0W7LgR z?EvwhvpD*dPAIpN5~dEFSSf$>&{xVHDgPY#n(`bvaR$w)gubU!Y}P2Ud?8@WqfrwW zPAtrfE&$^_zVapVWB?ujCX;yHVGaxf7fPMpv7a9gv%IzC1&Oejx&UQPuR}bv3hgnk z>YN)!1ER{DxKZZc_{KNv$}6u71(o<4s?4DS9v}b>;YD5a|1W%VSs<;^{DhCZBM*u4 z8XkLCY=4is#q-a<#m5!zFG@%JxAyYxX`!+KSm1N=$tT<4haVmk`!9d_%W#Vu--`De zVXNMqV`YE%i*4_s#c>}!+S132u>SdZ)*(B~-rl*x-kzg_Yv#Ra$7;U)wEo4~0yn@0 zcI#=Kvtk!q?9zcb>~lx0d)(ko1@ModxN@ZO;l*9-j`z3e1eq$Ew`PZp8m#*jw0*6E z%4#&PJ^zWr^Mn$gDSzkpt+4mE=h&;e((P_7m@86G{c}aCcoh#+c95d4r+P?*^gaAE zw65C&K?^v*Td#M#4#KUyf%C3D+B~oE=j9qVbOj9p@G!E9LPv=+T7`aa-N1MF5sfGM zoGM?46Fq?b@s1`JC;^-f$1RCJ|M|~D{50nfjgX_zXQ9lePMwO!gi0)7 z?unq_E<{yQT2JWxcoA1FB#l~*4U=G2RGE_i5>AgAyRqP5VLS$=5SJ@=XDD$qZGa&I z@k>|_kL_+;uCiI%(H5=UZX3#UfA!7{cJCj5Y4_asH`5uq0YCHTuFUJpkW|v<^DfZv zAtdL3=ULRox92-~4-bmo2s|49x*{R(|%S^Txi{U_q5q%>NQKbt1zkeoNedyDzM|#YiBXtfNnba zQss?1&da6TDd|Xfl>fw07jP0|jvCkRF4dN`yBCD+`e%lAwr`(NoTOT-jg2%CXNBx+ zDeP4{JJ=T%ubyc1GWwY8=GMo>#0cLtx{%DRR;t%Qxwy^Fwcu9y+qw zkbJ4l<(7Mcchs?-FVUDn-d2})zVq(&Kj~t`ly{UXhVLkG*E@Xkd~NQugBM-HHf*+& z!fP)1!scEE8q+$!Ehu*M6n+z>QR%HvxC~7(e?|H9^H*PeHS?f@4niOA0SO1}m9Q!T z$#=ODK0~ef|}NFBv()R_l1nZPQ<|G?_J8&vN+HpS8&vj^C(_-}i1@qub-Q+P$k5+r4X+ zO1bCQXY=~oQ3X13How3MI(M^l<<|#?*Tfpp%Dp<-4UH8#4Q7x|jr(YRwmq&>jLUrT&*8e0N)Q*c5T#`({)^AVf+5;w2oeLkE#q<%+v zy8_2Q2LH%A;BHN!F(%(JQ_cS}KXmaKS?G+3<&U@DA5X(j?Pfkd=~5`&q5XPDDW zoIdZ)GXQ;=>RI&A9^H3Wl-cCl=ZCR~!JTt#*ZSqQ>$m4wRY8d^U&*xPi{{w%*Ij3y zyXvYyH|a}~5dn9qfA9*W6|am^4Zk<}BQHFEu-(L0r1*oko_C~?XE&baC@%7&z48#c z$z!H!81ADmljdmpJWXw7Lk~cig!il=;U>4}P<+wwVYW%V@{LQE2frUZc8VQ$)@jyz zSc$FCd328~Uue&-TL}`?QZmZpbS<8{rte^zSTM+j_3C52by*C<+^mxK%VP8@b(^?u zA&;{%)9v1f@soh?>>xNJskkHYf}+v|X+8)0}yCV8fEZ%+WtD4O=%Lx*>OmudJ3 zF9E(mKOHsdbiOf^&cbOrbJXkZ-@|yG1OzSkM>(Q=(>p)#zyoV!fb!3f`@n$%!`5dy zp3sbY68YFIJRQ`7U#hKh!D1dO>6m8o)f-Rm z)YELgDc1Gfe;d`;DW5pcF1_q>_2jjZvARLx@ifJT7tqsM0@oB;8xq#@fpkR;ICv+` z0RAw@f3;`v)(Ic8Q_efbem3qXTUS+X&n%j2KV7~+<9u4Dt|9sFFVubRi|5!Vt&~4o zz4n8p+)H}qh09{tEyCe7ET$uuDZNqNkoBxsA3Ip5#!X+Z7qkB^*=CdW>lJ$E9wwE1 z1`kSmVy_CjO)K9oU8(tb)r4P=a{tqiavRW5i*2v+ zJcPe)5L$o6cAmQpRXlrG-tpI1fQRI19R;MZsGA&)G*Woma}V7U>G>AQhw_6mid_1t z_?vFJ$=-P5jo_WbYqm;ZuUND=ynp<-kJuN!{3Y9O>=-N4ob^kK=i3uY=Gi@))wABI zGugdTRX!cmshgeJcaR-9KxfYDWV)`|IVx2e8rOU~2iO1%ry~*>()t^^O01_G|GVWAzm)G4-u4?Z|FIFQd$O-E_uJM_*;5A)}&a3>#p1R{#BT0Y8kb6chs z^LMdt3oEFVst@F7i^`)~UOtjX&9JxNcTcrLt|q8ZEBN4VmDL7K90i z+R=Ez$9n$2)uG zheV!I9+Iq%*!kshPniHH+g>Kz4ZrS>=eC5_kVlWhdF1JZ2k?ZUe?Rh@9xTAHIm!{a z!;W_TzynXc&U7BS?f6^UcDnxdx4(s`Ij@9Kt)KqlCMzl`3TLQ5GyXjP6VX`BuM9>Z z1kdxA=t36U9qN=KAq?Gnt;#(}b7`+=NTW&&PV={DFwG~jP z>7g%PS7ry^KG%AvBySZlvDq6v$U}GOhfO=H?3}?__O+vXT9qm{wzpAG5i|^GaDgMU z;8R_^N|fGIM>Z0LZ7nxX7kP*AG$NdCyimFAep;GFr>Qj?h^eLtUQjlcELjp(6(cjP z#g|lRbbrtZZSj1>4TGFxSQY<|fBeI~^rbI(&~V&rh04c#^-zFQPCw1Ay5dS3r(wsA z9km5iJ(VRJ*V)S}m)Jj6F1Dw)YV~|Y^`c$zNQKHi)-BIY?q6hM`}7Yh<#RJ*>kTs1 z1$lDT8aw-;WkK8i?C5;EcyfQ+sbg$i)@lez;eq*dEugn`Qsh_7&9sd=YU4HO;G6R* z?UMs^>5bm&tR(A+13m)q(ev7Q7`5>O{TRwn^xeY+$7cK^9uDWCC*0ht+?{4mlcxup zZ}7!=!zcmU$tb(){-4aA=2rqygGrd+jxwGG&Stl?<^}^XJ)i>us;S z^}H1p^p>oa*UbBS58d-TE=iRd6;D_GEK>tunC9IXau-WA?3D!S>!F7+FC7LyM?-DP z6zKpVs}#~0hZ7*B6Tf3j!3P1dmd=-vfZlGoeD4D6wW zL~Cqo=`MR|X{nv1OU~J2-WVX*4(Z(d?A`Vq-Nbg7R=!VGt@!!1>DEUF&m5QEv@_q4 z#i%leM(1Ia-e?(vw+>#mJPdYol_~I$hYhK(ovwJ>X>vNf&LjQQXT*bHsG0QPpLj92 z=jG*v8_ehw;pTowzbk%lw`U+tq?;A#x7~JIAT_sRj+D9CH-G*E8>AZ#cWP=XUFpLw z#`%>bU19&Z6#7#r^JkxZHbeeD5RL?a>g5pUx_{ympQuz<{}GMlpCp3Il}WYt1yv(< zK}4ZJY^p$pk@19UE1Ws-bFR_g-KdmmvVZCnDw9nSzOj#<%L zs$s(=x?Kvm;)*Nm0yP4L=uC%f$$6!Yjivl;+qKi)TfaK=+#gxJ)Lt#s0#(VO2npd( z?&tK#v*UC+-MufT*;C8qo?dCMTr$i`@^h_Jjcn%IF%1QJ>K(Q6{l)d^TKS$CwzK_5 zihi1g-p6*=aBx`p-Y~52hWu_!y++u0L+r>Y~!qT0T}#XK%$g+*o1>SemN&)6IE z@ZD|q<22#!%G*0SC~(}|k9Tyiy&fbzj+Z(IJZ)76dYT$zLp#0mM<0FEF1qL_1m$@zYx2ew+BxbcIfjc_BNJmZc(gqeblU}Ixkuqjy3f*%@V>V|v;t{QG{eKaMWK7;o~jJGT%*`YCkHPv6hC$9)Q|;i(_?!MqggBp1ipUl z*X^WJP7a4Pu|J(*`b;So7MpI;u9JD|*Vrqomf91VbDz0Q7qdt{ElrK=4wcr$dRhMJ zp*DY&wz8d~;rWUEENwRfhq}rVIhH&Ji4`rWN-j!0C%wx4zB03B<@*i=zDpyW~Tq}vq`m8T27KYMuaIc~S1pJ$INQF`Lt91r0z&=keN_h_6R zM?9YP{O)OLtSq)v+TbmD-`;!Z(1~m!2dOG_=NY^QsLXjrd9!ur+u#0naOXe`>Ja8k z*`o_^snH21oM3|n4GN05Tydk=vof@LU5)8Y+si`F{rP1J?cTM^ZE>j<38gdV-qUiI z?Pq1Zm)WI-X*Q`(v5n#Yn=ajSaZ9Ffsk}+KXpS(%L%Qm!@bJZVl=dIhOK0W#7}dWc zwetN3QtDkaSkaJ`@8mT+#56a=mtXKFD!X;Xi+@+>^w3=qx8KS>MUsjo0z#;C7Y zw1uH}s!m_Xd)$#7$K~{bH(K9>h~oahPuXn=zQsk=Y_FsVnz<9ZAV+VD%?V1`&*R~3Hi9(0x@Ccwo2aX6-il6Cf0MAkHe2n<0gASALKlgBT z$#?K0Bw=Bk?9RHJeV$eu_EBN26j8XlpODF9Vq*aTA)!sd(b%}-!_m6eAdr~P`kaiw z{B%_insSI|dVJ75-lLfWzoLe37%wQUsQ9_Gg5DiKMR@9|r-mD-;L}bG!P9fkR2fWH!&v#;d+S!)^c9Qjx64=B z_N~2jebs8K+O1`*l~SB)NPMbiUpu;Bu#L(qu)fvG9hqRYe5I5;YCBn@T;9}(*SxyC zeOvSC|1Q&=4RZU24xG74!|!~LVF)BA{Ubio0RLJ8h|kM4&+r}-ttaB?;G2#Z2{ihU zdwgAlawQ$$0zc`YTw#;9UdDK*E&+%?YH%ZbDnK02&{}*;g{J!aKr^EdFTC)Aop|Dj zHmI;zEx%2+WcdcW@|TaD2nB#2GMV8ke`ctX6OnlLFbI9rz&9^cj-R*) z1O3k1cqQ(BJ?`lH-uMiENVD^5Z%jj5(hT2#c-d_TOmT zu1{(>^UcjRte~fD=rd2Z!)dj=;=6t2V!M6CLMiuLyR27VJEHHPpxo)Xht={*Urf1I zr!$gP^bWmnZeaV$;Bs3$FVpgL$jo;(cd&jdGVHAWnmW_F>gGD3wPerZ@j3ybaC1Ys z=NtKfjRA1?uq^1Meqk{e?kI5T2s#k-x)~Nmd3%R~Z-k8k?}T&kc-(gP`fTEN*{RQO zd-zVese>7D`sq)98c5nzr4E;rxgB|(oq5!Ln#N%bhDLrmP1*Lk!9P>Q(3j)kb!jUX{wwr^WEIMM$mOL{UJX6O%l;y1$UX_LQN> zKFXa|RXL@+nIK-s;hP(x;5+=JFd;0w^Bq2u@fcdpD1GLw;F*VmhlKUQ=StoMD0r;? zi^dss-xr>pXYst=7t+?6X+TDr0$w?zFnC6>a}doLXPjYw{_~&hFMs(Eyaj|{tTi*(2$}=+NJw+|x(XNvU>!e2Z_(9z@R=LUEUzcrPDx6@)?Vn-O z7B93vuUl@bwrf~k^YFJWpKrIK+_O8{r9J!DWcA#K_R6>ZUAqV6u7VYgp7ld)kQavB zH9Bg2a^NAcnZ1Kvas^_%E>eQu7QI&5zO@_;?(&ph*twyEim zrG;EQJld}KB&j%#uyX^1dzE91A)x}2p9=;L2VA4jm1IwpoJkpDkORgQKmN*Z>r%a zfB-Z&cwyw-3y>>#dP4|{=Lxpw5je;r3QN50II*MYi#~h&xVb-%-@mmN8@k{FKw1-} zqb+EKF7nEU+@ty07WC8=Cv;K7|$K$3OmY7_NjKls$3Io;^E| zH(|mAK0v(*~Onyc0F zFK9vCBWqXKY*x!FUI}h2$(dPpPWQYpEI(E^!u8jUaGkY+9@;op-j%x~z2?mKkLg(0 zqoikMN|!yWGv7ybtF*Fm6l1KC1~KU665>Gq$lr#Pk$5?chK)YQ;`*SGPyI`L7?d}L z{KK7aP6uTHzI$B&pE>!DLt8K&Keij16E);o!N~(WIUHAy35b3XO_n zXvAcu=FbnGI(2FXnZ&KAC_#EoNuhffMU<|&uz6}R7fLWh%kB;k0uf|_XT1AwjEx`y z?V%zjJ*3NTY4bUc#-yt;VTd1oz>9d`n+pTqoK`AJgvP%U-VJ%>&lGkC!eG3hWBWU} zFyyfVxB<7L?)YsFK>FZMBHpzXeeeeUyFzadGM0dGqK z^te)M?YJA0Ht2QTaPh?#ha1)M1`M_AWpi!W0bj7sef9#o;o}1kj9NfA7R2@H)hqDa z^MQQyI#+JtxL1{nuWCB#XMRyyEksFPKIr--@!-x(%8Stz+K>K(5^{yy(Y!2ouTdcG zw<$J>B4ZJ*_K>lp4`l`|p4O(MuOVSQ{a(w z?uQ(5h^d|lE8-b?2k5a=+1+>FeZhR{Q=hW)&O6UWj2LO%bvxpLgF2b%ASfZUIl3uv z^q_9qUZ&ovdfN1g@^U*{UtQaJ=)e-YNXmVoj+}jU)iQfrTj5?{E8MQ_;i^}^?)Ahj z-R(FXKYO4Q{GjeVt&5JIMP;AbzrvPl9R8bH`945x+nbh3!RM{BC0lfztdxGCZjUR` zEpnZ+vaOWuN!4kL%0F&iUU0|21F!GAEc&~DbH9!gMZ!1AHuKw*M-1=aNA~gSaeH|9 z>2dNMpp1YIL;T>y58uHPk1GUf=0DEE#6Y=D%;9N)9zU ze2QIkNN>y1iK9E>dgtUV0KXla*VTE!cC}0?bFIy;dJI3htu3YAIeufg%2PeytL(He z?l=+iZxuo!NmF49_oPEqa{-A4Uo_Fpg}b46po0p9VG=&dD};Dj2^UXO{JYcZ?jD!Br(%-n`&; z@uxm*mtT6JW%Vku1MgHXzI3NuHlnM2>x>eFGx!Pr;MN-@g{^R`mS-E=#_grHV8hz5 z&mHAHQ)kNSgqzSX2;sG|{$t&H+m!qPHoSLVUHPh$%(6S#uNG$Ol9>wYo{?>{Ht6=a zWm*G}(M@qy+9&!9wlD90s14TQJFRF6G{8TUq~|@OeaI#J#YP@TJAMGt?=tI3ns?`o zmnruX0_o3rhz+>SbFw_d54#N5gHF621{->uCXX{29^z;!w70TaS9+)iS#R*%bI;i+ zr<|ho9woYnWvvaiEw=dd-`h9Om}pl`DbPux)R7-xf`4r9Lk2XI{=o-5ffJd~NJ)is zYle=qBk-jBP|(QSPOXr&Un0@f{t*8rq-yY{(Q3%iElYE>pLDQ@s8B{^Ab8CQ z2o#BHZoG}5kxW3?*k-^SIt8hvfjHrT7b-HFLWN?)_V3L_2XQ%o8^De}(?X4 zcBwK&lp>-X6gzRybI;Jn49SHy_u3ZqsF!WtV6Um?{-jQ*`8h@0fJz4eLxCuumotImO!vevmElm*g5 zJ;J&HbcIjWy9S<1l4~Y z&h6;8hCG9ta+wG`UZ)#BUSj_*C7T1~1pChHDFd&xn6^uOR*{O1mMQ!Q3za{1djK-ig}k}x0k11QaC@ciyoCphSh#X(?)a18 z^Y{~ecU~moi-$w_;}t)+2t!&tEP{@~&28rgm3zE@aKIzt!Nw35KzzId@QtwG7;O+ET_)Vvn(zyvi!WU_WrwX+P24kW;Wqd_V80Hbxi9}>z$_ylys`2Hx7v3 zWs7GF@`jvoqFl&k{bfpy)L*rudkwG&UGwaWZCh+bd6~^pul@E7QsBF@bX2%7Jf*V(|OljcZIq0lA*(G{@mHtMQyr;_XU-sKJAfP{}x6;&8pZ(≪`$_g5pU!0dqVCc7+?{w6;c^8V_2)Et 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ຽ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%0DsP~>N- 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 IM6N<$g5?279{>OV literal 0 HcmV?d00001 diff --git a/v0.1.5/examples/img/bezier/bezier-acceleration-orig.png b/v0.1.5/examples/img/bezier/bezier-acceleration-orig.png new file mode 100644 index 0000000000000000000000000000000000000000..43dd0a9538f7a91b1c9525e778129e281ac92141 GIT binary patch literal 263498 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

                      Wz=y!s&Ilef=5@ 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%0DvTS*zqB z?-K+q0?(?0K#1Dm%tGB3*7Qn8)xsXiRQ~k9HqGP737V$fK5iLk$hM1YpBvvEeKKV# zKZC7KVr`8fD`hXeVV>%|FIe_8S8amr)m7}n*L2(R8KsrJ#Y&xoRsEE2-J~Q`J$OTSgjF!}TC&pk8oud;Bbl-)UjD?OWnNms=JL|U z`e*LhdGQZ@dU^j<+|%?hxs$`Y-+1!=%lEGxXRt>WOIc2bQXV<29s0h}RwtldsMAMD zFFozd4A;cPMkbOC3~%T>j7&eKo0p;N%x}xH!e9|z`jIb>ak>n21+&v;GPjd0F~32d z+1MJc%;mYAGY=U^@GDQ-;VR$9ofvtlFVVAk*@m#nHp$}SCbok~$W9UPbLpzUbEa=2 z|GZ#yD%~8+#{<$V+T^(0{#)BMd8`vIl#EZ8hQ15AcG_!KMw;uB@p5@*4RPJfg3 zdWJ1nzf8c?`#aEuo2VEc!#G3?x)-cZ=@ZAYhII9srCWpBMh07#O?wn3KkKmi0OPYB zz;P*-icI;i>-mw-D!XcDwKYD@tK{SSBoB?pz`B)>HXv-!op2U=qq3{K*aw&&yn!bA zjBw?ZvIoaH@wEFf`qu;W#qvo%AEf@@gr4vT6hAT<3r<4k#ay-MbFo*uonBtE#CCpu zWsTRjk1(cqir&|+;luc`pXbHk`8~TA+6)&{G5CLt0sXpLZn@>9B12bwUT81m-&+p5 z(>1sGzy0&gZ~gR%?#;CBGnb*w?&a=%hu=Q;x$fPYJD$m3R6CbW&q{}JE`g>oE2;{7 zD}`z0Sil;P+v5I$(oQP>B@X1ws4k+xKFZ;UFL*$L0sS%R+3ob5%*aw>#(kjgEv$76 zz%)94(17uL(SuFO)#$~Iv5=kvcH%H;*w1#m^Q&}n(l?&*jmr<1F0vBnJ6_?H7GrMl zq0tdf!;=S2(y2pH*6 z6W=M+L<=AE-saVjM;p$2?go#Iv~ZQvG`~SFXyxZ;NUpA`W1lEfpkRAzVpzuwrJjkco zlQ82G{gv|DV_N7M9^T+E?RiH>cXevQUHR0etDOle9z|??!nORQ45gh&>?7(jl(9jc zv3}B&tdu8pn({R-q@@o;-_G4m2J|DYj%~-uNH0^ml0E2%KCv^>vKnVh$VF201MVo1 zJTcMDs+~!H`fOL}^b_7@=YSsGZ1s2S@cLWwH~6X+ddBVL74^kG&LZw27Kv|GXBL@* z9>y=kefalNHr*YMbU*YZkB}~ROS{*)2VZ-z`zO+W+YJ}O<(a{;K%Y}bVb1-|@BB_y zSya?FGMjqbf~At(TG?b!J;Vvdo7pwSDkNFKp9vD z&B_$K?K}{b6~DM;ls2-2;kCiLcrQ6v_H#8m26QQ7uG#g3@nKlSr$ouSbdgrLG!t-v zxHP^#IPpJ3mXSCUDHU*TUCK8PX?Wzv*A!Kz>2O*e&r0q?(W~W8$iS=NTdtMwq{~-4(|Lr&wS1bE z4oRQK?L^C5#No0KI)X(SYF#Q*ov8SkwZlsu9(XL-`jt0j==9C=StW!v2kpeU2*JPx z+?J1EkHd|8@LJl~K2pvDLcjVM^EG|2#}VEI1xLDA7RmDzq2=!9Wz%{LI!xhPPBjP( zNv$m8G3Fx=k~Tef$_+E_}TDSsDdZ{SqAP$-Maq zoY%iPphtHWh8rvd?`Bu`F8cOm#+O&{di6!{qAy)K%7oAp@81O9j!S0F_Zm#J!F?MC z-MU-n*8j)%ZNB~CjqVTfmVA8=*7}k?-3R{3JLm4}4sY&!u2$zNRfRGr_-qH>|Ni$c z`mNuO|M-tzO`+e!^9U72TU;#RSKoDV|B^UmA;a0(4Fk@X~nHZgn>=y zNIY)Lqu~oLnsHbd=)Fw!<=y$h4yGsfKDM;~-M_W_1s&Tu$K6_Iz4y0YyYk2lSDk)* z#SJA^@L@#0)syn|@(p!0uO?MK;=8UJK#~*N@^%JZuo!CG` z-%Pquy!?<3Bom!yrI{zL_vwFZhj5j*>AI4cFnHcKy`RWlo(cIPZ0AZg^r9%kfzP@# zUTsBXcgvsh_h8{z_OxC_qYm5YB8~ae{&le_bg?cy-{7DgzD+;%8T10Cj4DUzjaPk^ z{As;X$Bpl}zQc!h>+3mxjnCIh+JHFfqtnk$0Pxxs2`s6-Ese`0I*fEumps6fXFp^9 zLGla)-Bqg2+P?M$Z zrIX2V=aN}C@@>4Omyb``tMYxKpZOu2y1@1p7+hED^EK0y*JQ#nh3?V6`ag94P`bk}ANs28*gT`~ z!7!guuIFGz!D#?)lf97w-p}&{tMV5!i@JgL8IN6c)m68X_NX{iLIz_B-IrrF#%Xh^G#&Hm)H1_OynjfVdFSy z0H+bBK|)vQrd8ukCs1)aX=wZwe2&Jv;0oOioAh#3H)c#&wzlz=Wt{;YI-#no=mOk9 zCc5h5)W=I}q>FCy^ihX$gex!FBgsQPg3@rs39m7&2-5Qmc`zLw=F4*q^?kRf+q%Zn zJX@DDUE{0b1n0c3L4E2Hn4(FcRRrJs81AZ~CA7)v@$!ac!zzLrjyTECA+)sHRK7#<(geyjJkW z?HetW^pTA=G|DxAAAP|w>c6zp7B84M^@v0AV9OzFbfG02+4%BbV}1NV9#-hrL(QVx~zSj?gS=ImR&A<2v-Lb3li-Fv9S@+X_?3Hs5 zb>F|a>+n1KyC$|}@(d@K;pfFMaK4#sm<pV_41LVpI||eM%=mHW2a0 zPp@ceC?etPAT(l)w|wC-Km)k&P)0pHxQ}~b-QJxWXFhTFuFL=SXO{O~x3Amy_(}ND zJ^k6&tvvX`18XNvt}d_|N7C6wDhuy8HV;ESg!Q}$^yRGVVIU)1g9WM#MQUJdFY=i6 z$Wy#Q24P(osmCm*9t~c2z8lNo7gp!~zPtmvKcY~0L7$2bX;bjn$0#q>Wp)Cl@Mfu| z4qM>RZGj1B{7ke=D{fF{xz;X40OG4lgA3cPLofT2$8H|)w#*gA_(Uhl#lw&eT;g~? zgNN80p!4n}%!bZxra3tfNQ<_exlAcFd5`tkP`4{FpRIN^poQYN+^ zFPZW4wWCbB{9?(I=CPAjW)hbUh5`5Wpzq^?%)T7E7Oz}|_0`2ZdoRI;EA+8$Oa{_^ zfaPl_bXw!R`R6?p$M|yvi^z-EmVb?mU-`;cn!j_p!@st<_?tg4w*tR~+aK0sV0*-XCdE zZpkCqyGCD84J6@`H6--98I934cp5;1RURsT@!_LEs;GCDr%`Fo0J*z$ZvE)#`5iy` z(LD#{x1ea&b3b_F>WMepu=3D}Q}c`bK3$B~^wJ4liTbZOWm|R?ud=H$7cNnrMn4V@ zbh84=#bt}NbQs~u=d9pS!mJ<-*zb%tIKiBYA+QnOAI?JE4py?#F`<`vELd&rSA07j zW4QE#?Tiz~;c?lH;e^x4qKAW~Wl>I^euXifR8`vGL#M9N`KwmP@Q?GvmWYq}5zU0f zbbg{I9nU!LfF~U|0$jmcE>@xdqWRTB!^#01c-g)($8yV-06%FL1*WJ5-c7%$d?KV7?}oXJ$ZlN;OMEIuQa=S>gpNFVu)pBOahW1bV?qHVg_ z=h+_Wpxy*-i&%e|XyI%7vDp?*y@FSM>7pKake2~l{DxO$P&5T^;*y_&6>fZZz;4c6 z6Mu)?t5!Ez#2uiI&CVO?#Uu7bL_o>}Kly+@zw=?A2)=ckezFm&Q{h`*PI~-yy=*jS z^y})UlfSPbJvG0``K)`{g7=FlW!xgdTi^QDwYtgF_$>Dye?70ay6^s1-S^zN+TGyl z{1T?mFTJAs$+sPxd+ZSJ&JVx!?D#Z`$Fl*eOgIAHLO zWgj!OHJ+S&EI#6lbdh(>Tq6q^G4Li!^eRsc(Qsy$>RAu4GCtEve`%{T4DXf(tmFMp zx3GKX`o=GPa?drtaNok>i}@1&i>JEzYxZw;?|9wG`+2XvzPdKIu-O0DRLV@j0z*5&Ua z1;_XU4RCezDILNA_<+OU>5pNZ;kBmM!0xrq#jQ%+h$_4vYxHGd? zF(bN|PsF}R#k%T>u{R|wNGrig72miOVI`>VpmVEqK!dBwjSpXMrCFeYvnv2r8OqQ| z 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%0A99j5Ri7_ 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�P67bnj_~_@Fnjh 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 literal 0 HcmV?d00001 diff --git a/v0.1.5/examples/index.html b/v0.1.5/examples/index.html new file mode 100644 index 0000000..e154a9d --- /dev/null +++ b/v0.1.5/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

                      List of Examples

                      NameprovidesDocumentationComment
                      A Benchmark for Difference of Convexcontains a few simple functions
                      Bézier Curves and Minimizing their Accelerationtools Bézier curves and their acceleration📚
                      Solving Rosenbrock with Difference of ConvexDoC split of Rosenbrock📚uses a Rosenbrock based metric
                      Difference of Convex vs. Frank-Wolfeclosed-form sub solver
                      Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
                      Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
                      Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚
                      The Rayleigh Quotient$f$, $\operatorname{grad}f$ (A/I), $\operatorname{Hess}f$ (A/I), objective📚
                      Total Variation Minimization$f$, $\operatorname{prox}f$ (A/I), objective📚

                      Symbols:

                      • A Allocating variant
                      • I In-place variant
                      • 📚 link to documented functions in the documentation
                      diff --git a/v0.1.5/helpers/error_measures/index.html b/v0.1.5/helpers/error_measures/index.html new file mode 100644 index 0000000..8ac3450 --- /dev/null +++ b/v0.1.5/helpers/error_measures/index.html @@ -0,0 +1,2 @@ + +Error measures · ManoptExamples.jl
                      diff --git a/v0.1.5/index.html b/v0.1.5/index.html new file mode 100644 index 0000000..a9f7214 --- /dev/null +++ b/v0.1.5/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

                      Welcome to ManoptExample.jl

                      This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

                      Each example usually consists of

                      • a cost function and additional objects, like the gradient or proximal maps, see objectives
                      • an example explaining how to use these, see examples

                      Helping functions that are used in one or more examples can be found in the section of functions in the menu.

                      diff --git a/v0.1.5/objectives/index.html b/v0.1.5/objectives/index.html new file mode 100644 index 0000000..d03fcfd --- /dev/null +++ b/v0.1.5/objectives/index.html @@ -0,0 +1,187 @@ + +Objectives · ManoptExamples.jl

                      List of Objectives defined for the Examples

                      Rayleigh Quotient on the Sphere

                      See the Rayleigh example (TODO) to see these in use.

                      ManoptExamples.RayleighQuotientCostType
                      RayleighQuotientCost

                      A functor representing the Rayleigh Quotient cost function.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either

                      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                      or extended into the embedding as

                      \[f(x) = x^{\mathrm{T}}Ax, \qquad x ∈ ℝ^n,\]

                      which is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of $𝕊^{n-1}$.

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientCost(A)

                      Create the Rayleigh cost function.

                      See also

                      RayleighQuotientGrad!!, RayleighQuotientHess!!

                      source
                      ManoptExamples.RayleighQuotientGrad!!Type
                      RayleighQuotientGrad!!

                      A functor representing the Rayleigh Quotient gradient function.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either

                      \[\operatorname{grad} f(p) = 2 Ap - 2 (p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1},\]

                      or taking the Euclidean gradient of the Rayleigh quotient on the sphere as

                      \[∇f(x) = 2Ax, \qquad x ∈ ℝ^n.\]

                      For details, see Example 3.62 of [Bou23].

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientGrad!!(A)

                      Create the Rayleigh quotient gradient function.

                      See also

                      RayleighQuotientCost, RayleighQuotientHess!!

                      source
                      ManoptExamples.RayleighQuotientHess!!Type
                      RayleighQuotientHess!!

                      A functor representing the Rayleigh Quotient Hessian.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either

                      \[\operatorname{Hess} f(p)[X] = 2 \bigl(AX - (p^{mathrm{T}}AX)p - (p^{\mathrm{T}}Ap)X\bigr),\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1}\]

                      or taking the Euclidean Hessian of the Rayleigh quotient on the sphere as

                      \[∇^2f(x)[V] = 2AV, \qquad x, V ∈ ℝ^n.\]

                      For details, see Example 5.27 of [Bou23].

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientHess!!(A)

                      Create the Rayleigh quotient Hessian function.

                      See also

                      RayleighQuotientCost, RayleighQuotientGrad!!

                      source

                      Bézier Curves

                      See the Bezier Curves example to see these in use.

                      ManoptExamples.BezierSegmentType
                      BezierSegment

                      A type to capture a Bezier segment. With $n$ points, a Bézier segment of degree $n-1$ is stored. On the Euclidean manifold, this yields a polynomial of degree $n-1$.

                      This type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.

                      Not that this can also be used to represent tangent vectors on the control points of a segment.

                      See also: de_Casteljau.

                      Constructor

                      BezierSegment(pts::AbstractVector)

                      Given an abstract vector of pts generate the corresponding Bézier segment.

                      source
                      ManoptExamples.L2_acceleration_BezierMethod
                      L2_acceleration_Bezier(M,B,pts,λ,d)

                      compute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.

                      \[\frac{λ}{2}\sum_{i=0}^{N} d_{\mathcal M}(d_i, c_B(i))^2+ +\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

                      where for this formula the pts along the curve are equispaced and denoted by $t_i$ and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by $p_i$, and to each $p_i$ corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      See also

                      grad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier

                      source
                      ManoptExamples.acceleration_BezierMethod
                      acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{P},
                      +    degrees::AbstractVector{<:Integer},
                      +    T::AbstractVector{<:AbstractFloat},
                      +) where {P}

                      compute the value of the discrete Acceleration of the composite Bezier curve

                      \[\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

                      where for this formula the pts along the curve are equispaced and denoted by $t_i$, $i=1,…,N$, and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      This acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      See also

                      grad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    T::AbstractVector,
                      +    X::AbstractVector,
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector,
                      +    X::AbstractVector,
                      +)

                      Evaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment},
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X
                      +)

                      evaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    b::BezierSegment,
                      +    t::AbstractVector,
                      +    X::AbstractVector,
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::BezierSegment,
                      +    b::BezierSegment,
                      +    t::AbstractVector,
                      +    X::AbstractVector,
                      +)

                      evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

                      See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::BezierSegment,
                      +    b::BezierSegment,
                      +    t,
                      +    η,
                      +)

                      evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t$∈[0,1]$ on the curve and a tangent vector $η∈T_{β(t)}\mathcal M$. This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.de_CasteljauMethod
                      de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function

                      return the Bézier curve $β(⋅;b_0,…,b_n): [0,1] → \mathcal M$ defined by the control points $b_0,…,b_n∈\mathcal M$, $n∈\mathbb N$, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let $γ_{a,b}(t)$ denote the shortest geodesic connecting $a,b∈\mathcal M$. Then the curve is defined by the recursion

                      \[\begin{aligned} + β(t;b_0,b_1) &= \gamma_{b_0,b_1}(t)\\ + β(t;b_0,…,b_n) &= \gamma_{β(t;b_0,…,b_{n-1}), β(t;b_1,…,b_n)}(t), +\end{aligned}\]

                      and P is the type of a point on the Manifold M.

                      de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function

                      Given a vector of Bézier segments, i.e. a vector of control points $B=\bigl( (b_{0,0},…,b_{n_0,0}),…,(b_{0,m},… b_{n_m,m}) \bigr)$, where the different segments might be of different degree(s) $n_0,…,n_m$. The resulting composite Bézier curve $c_B:[0,m] → \mathcal M$ consists of $m$ segments which are Bézier curves.

                      \[c_B(t) := + \begin{cases} + β(t; b_{0,0},…,b_{n_0,0}) & \text{ if } t ∈[0,1]\\ + β(t-i; b_{0,i},…,b_{n_i,i}) & \text{ if } + t∈(i,i+1], \quad i∈\{1,…,m-1\}. + \end{cases}\]

                      de_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)
                      +de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)
                      +de_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector
                      +de_Casteljau(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +) -> AbstractVector

                      Evaluate the Bézier curve at time t or at times t in T.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +    Ξ::AbstractVector{<:BezierSegment}
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Θ::AbstractVector{<:BezierSegment}
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +    Ξ::AbstractVector{<:BezierSegment}
                      +)

                      evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in $[0,N]$, and each depending the corresponding segment(s). Here, $N$ is the length of B. For the mutating variant the result is computed in Θ.

                      See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X::AbstractVector{<:BezierSegment}
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment}
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X::AbstractVector{<:BezierSegment}
                      +)

                      evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,N]$, which depends only on the corresponding segment. Here, $N$ is the length of B. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    b::BezierSegment,
                      +    T::AbstractVector,
                      +    X::BezierSegment,
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y,
                      +    b::BezierSegment,
                      +    T::AbstractVector,
                      +    X::BezierSegment,
                      +)

                      evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in $t∈[0,1]$. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y,
                      +    b::BezierSegment,
                      +    t,
                      +    X::BezierSegment
                      +)

                      evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,1]$. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.get_Bezier_degreeMethod
                      get_Bezier_degree(M::AbstractManifold, b::BezierSegment)

                      return the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.

                      source
                      ManoptExamples.get_Bezier_degreesMethod
                      get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})

                      return the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.

                      source
                      ManoptExamples.get_Bezier_inner_pointsMethod
                      get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )
                      +get_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)

                      returns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned

                      source
                      ManoptExamples.get_Bezier_junction_tangent_vectorsMethod
                      get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
                      +get_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)

                      returns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.

                      source
                      ManoptExamples.get_Bezier_junctionsFunction
                      get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
                      +get_Bezier_junctions(M::AbstractManifold, b::BezierSegment)

                      returns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.

                      source
                      ManoptExamples.get_Bezier_pointsFunction
                      get_Bezier_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    reduce::Symbol=:default
                      +)
                      +get_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)

                      returns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.

                      This method reduces the points depending on the optional reduce symbol

                      • :default: no reduction is performed
                      • :continuous: for a continuous function, the junction points are doubled at $b_{0,i}=b_{n_{i-1},i-1}$, so only $b_{0,i}$ is in the vector.
                      • :differentiable: for a differentiable function additionally $\log_{b_{0,i}}b_{1,i} = -\log_{b_{n_{i-1},i-1}}b_{n_{i-1}-1,i-1}$ holds. hence $b_{n_{i-1}-1,i-1}$ is omitted.

                      If only one segment is given, all points of b, b.pts, is returned.

                      source
                      ManoptExamples.get_Bezier_segmentsMethod
                      get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])

                      returns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.

                      There are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let $c=(c_1,…,c_k)$ and $d=(d_1,…,d_m)$, where $m$ denotes the number of components the composite Bézier curve consists of. Then

                      • :default: $k = m + \sum_{i=1}^m d_i$ since each component requires one point more than its degree. The points are then ordered in tuples, i.e.

                        \[B = \bigl[ [c_1,…,c_{d_1+1}], (c_{d_1+2},…,c_{d_1+d_2+2}],…, [c_{k-m+1+d_m},…,c_{k}] \bigr]\]

                      • :continuous: $k = 1+ \sum_{i=1}{m} d_i$, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.

                        \[B = \bigl[ [c_1,…,c_{d_1+1}], [c_{d_1+1},…,c_{d_1+d_2+1}],…, [c_{k-1+d_m},…,b_{k}) \bigr]\]

                      • :differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence $k = 2 - m + \sum_{i=1}{m} d_i$ and at a junction point $b_n$ with its given prior point $c_{n-1}$, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as $b = \exp_{c_n}(-\log_{c_n} c_{n-1})$ such that the assumed differentiability holds
                      source
                      ManoptExamples.grad_L2_acceleration_BezierMethod
                      grad_L2_acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{P},
                      +    degrees::AbstractVector{<:Integer},
                      +    T::AbstractVector,
                      +    λ,
                      +    d::AbstractVector{P}
                      +) where {P}

                      compute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight $λ$ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in $[0,N]$), where $N$ is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting $λ=0$ yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.

                      Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      See also

                      grad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.

                      source
                      ManoptExamples.grad_acceleration_BezierMethod
                      grad_acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector,
                      +    degrees::AbstractVector{<:Integer}
                      +    T::AbstractVector
                      +)

                      compute the gradient of the discretized acceleration of a (composite) Bézier curve $c_B(t)$ on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in $[0,N]$, where $N$ is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set $λ=0$ therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.

                      See also

                      acceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.

                      source

                      Riemannian Mean

                      See the Riemannian mean example to see these in use.

                      ManoptExamples.RiemannianMeanCostType
                      RiemannianMeanCost{P}

                      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                      \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

                      where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

                      Constructor

                      RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

                      Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

                      See also

                      RiemannianMeanGradient!!, Riemannian_mean_objective

                      source
                      ManoptExamples.RiemannianMeanGradient!!Type
                      RiemannianMeanGradient!!{P} where P

                      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                      \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

                      where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

                      This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

                      Constructors

                      RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

                      Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

                      RiemannianMeanGradient!!(
                      +    M::AbstractManifold,
                      +    data::AbstractVector{P};
                      +    initial_vector::T=zero_vector(M, first(data)),
                      +) where {P,T}

                      Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

                      See also

                      RiemannianMeanCost, Riemannian_mean_objective

                      source
                      ManoptExamples.Riemannian_mean_objectiveMethod
                      Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
                      +Riemannian_mean_objective(M, data;
                      +initial_vector=zero_vector(M, first(data)),
                      +evaluation=AllocatingEvaluton()
                      +)

                      Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

                      See also

                      RiemannianMeanCost, RiemannianMeanGradient!!

                      Note

                      The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

                      source

                      Robust PCA

                      See the Robust PCA example to see these in use.

                      ManoptExamples.RobustPCACostType
                      RobustPCACost{D,F}

                      A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

                      \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

                      This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

                      \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

                      Note that this is a mutable struct so you can adapt the $ε$ later on.

                      Constructor

                      RobustPCACost(data::AbstractMatrix, ε=1.0)
                      +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

                      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

                      source
                      ManoptExamples.RobustPCAGrad!!Type
                      RobustPCAGrad!!{D,F}

                      A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

                      Note that this is a mutable struct so you can adapt the $ε$ later on.

                      Constructor

                      RobustPCAGrad!!(data, ε=1.0)
                      +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

                      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

                      source
                      ManoptExamples.robust_PCA_objectiveFunction
                      robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
                      +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

                      Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

                      See also

                      RobustPCACost, RobustPCAGrad!!

                      Note

                      Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the in-place variant to be used, though that keyword is used to setup the objective.

                      source

                      Rosenbrock Function

                      See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.

                      ManoptExamples.RosenbrockCostType
                      RosenbrockCost

                      Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                      \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

                      which means that for the 2D case, the manifold $\mathcal M$ is ignored.

                      See also 📖 Rosenbrock (with slightly different parameter naming).

                      Constructor

                      f = Rosenbrock(a,b)

                      generates the struct/function of the Rosenbrock cost.

                      source
                      ManoptExamples.RosenbrockGradient!!Type
                      RosenbrockGradient

                      Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                      \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

                      i.e. also here the manifold is ignored.

                      Constructor

                      RosenbrockGradient(a,b)

                      Functors

                      grad_f!!(M,p)
                      +grad_f!!(M, X, p)

                      evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

                      source
                      ManoptExamples.RosenbrockMetricType
                      RosenbrockMetric <: AbstractMetric

                      A metric related to the Rosenbrock problem, where the metric at a point $p∈\mathbb R^2$ is given by

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_{1}^2 & -2p_{1} \\ + -2p_{1} & 1 +\end{pmatrix},\]

                      where the $\mathrm{Rb}$ stands for Rosenbrock

                      source
                      Base.expMethod
                      q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)
                      +exp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)

                      Compute the exponential map with respect to the RosenbrockMetric.

                      \[ q = \begin{pmatrix} p_1 + X_1 \\ p_2+X_2+X_1^2\end{pmatrix}\]

                      source
                      Base.logMethod
                      X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)
                      +log!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)

                      Compute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any $j ∈ \{1,…,m\}$

                      \[X = \begin{pmatrix} + q_1 - p_1 \\ + q_2 - p_2 + (q_1 - p_1)^2 +\end{pmatrix}\]

                      source
                      Manifolds.inverse_local_metricMethod
                      inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                      Return the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                      \[G^{-1}_p = +\begin{pmatrix} + 1 & 2p_1\\ + 2p_1 & 1+4p_1^2 \\ +\end{pmatrix}.\]

                      source
                      Manifolds.local_metricMethod
                      local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                      Return the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                      \[G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix}\]

                      source
                      ManifoldsBase.change_representerMethod
                      Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)
                      +change_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)

                      Given the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.

                      this function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.

                      source
                      ManifoldsBase.innerMethod
                      inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)

                      Compute the inner product on $\mathbb R^2$ with respect to the RosenbrockMetric, i.e. for $X,Y \in T_p\mathcal M$ we have

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1\\ + -2p_1 & 1 +\end{pmatrix},\]

                      source

                      Total Variation

                      See the Total Variation example to see these in use.

                      ManoptExamples.Intrinsic_infimal_convolution_TV12Method
                      Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

                      Compute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads

                      \[E(u,v) = + \frac{1}{2}\sum_{i ∈ \mathcal G} + d_{\mathcal M}\bigl(g(\frac{1}{2},v_i,w_i),f_i\bigr) + +\alpha\bigl( β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) \bigr).\]

                      for more details see [BFPS17, BFPS18].

                      See also

                      Total_Variation, second_order_Total_Variation

                      source
                      ManoptExamples.Total_VariationFunction
                      Total_Variation(M,x [,p=2,q=1])

                      Compute the $\operatorname{TV}^p$ functional for data xon the PowerManifold manifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i$ denote the forward neighbors, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I_i = \{i+e_j, j=1,…,k\}\cap \mathcal G$. The formula reads

                      \[E^q(x) = \sum_{i ∈ \mathcal G} + \bigl( \sum_{j ∈ \mathcal I_i} d^p_{\mathcal M}(x_i,x_j) \bigr)^{q/p},\]

                      see [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.

                      See also

                      grad_Total_Variation, prox_Total_Variation, second_order_Total_Variation

                      source
                      ManoptExamples.adjoint_differential_forward_logsMethod
                      Y = adjoint_differential_forward_logs(M, p, X)
                      +adjoint_differential_forward_logs!(M, Y, p, X)

                      Compute the adjoint differential of forward_logs $F$ occurring, in the power manifold array p, the differential of the function

                      $F_i(p) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j$

                      where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$ Let $n$ be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold $\mathcal M' = \mathcal M^n$. The adjoint differential can be computed in place of Y.

                      Input

                      • M – a PowerManifold manifold
                      • p – an array of points on a manifold
                      • X – a tangent vector to from the n-fold power of p, where n is the ndims of p

                      Output

                      Y – resulting tangent vector in $T_p\mathcal M$ representing the adjoint differentials of the logs.

                      source
                      ManoptExamples.differential_forward_logsMethod
                      Y = differential_forward_logs(M, p, X)
                      +differential_forward_logs!(M, Y, p, X)

                      compute the differential of forward_logs $F$ on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function

                      \[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j, \quad i ∈ \mathcal G,\]

                      where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

                      Input

                      • M – a PowerManifold manifold
                      • p – a point.
                      • X – a tangent vector.

                      Output

                      • Y – resulting tangent vector in $T_x\mathcal N$ representing the differentials of the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.
                      source
                      ManoptExamples.forward_logsMethod
                      Y = forward_logs(M,x)
                      +forward_logs!(M, Y, x)

                      compute the forward logs $F$ (generalizing forward differences) occurring, in the power manifold array, the function

                      \[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{x_i} x_j,\quad i ∈ \mathcal G,\]

                      where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$. This can also be done in place of ξ.

                      Input

                      • M – a PowerManifold manifold
                      • x – a point.

                      Output

                      • Y – resulting tangent vector in $T_x\mathcal M$ representing the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.
                      source
                      ManoptExamples.grad_Total_VariationFunction
                      X = grad_Total_Variation(M, λ, x[, p=1])
                      +grad_Total_Variation!(M, X, λ, x[, p=1])

                      Compute the (sub)gradient $∂f$ of all forward differences occurring, in the power manifold array, i.e. of the function

                      \[f(p) = \sum_{i}\sum_{j ∈ \mathcal I_i} d^p(x_i,x_j)\]

                      where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

                      Input

                      • M – a PowerManifold manifold
                      • x – a point.

                      Output

                      • X – resulting tangent vector in $T_x\mathcal M$. The computation can also be done in place.
                      source
                      ManoptExamples.grad_Total_VariationMethod
                      X = grad_Total_Variation(M, (x,y)[, p=1])
                      +grad_Total_Variation!(M, X, (x,y)[, p=1])

                      compute the (sub) gradient of $\frac{1}{p}d^p_{\mathcal M}(x,y)$ with respect to both $x$ and $y$ (in place of X and Y).

                      source
                      ManoptExamples.grad_intrinsic_infimal_convolution_TV12Method
                      grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

                      compute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some $f ∈ \mathcal M$ on a PowerManifold manifold $\mathcal M$ this function computes the (sub)gradient of

                      \[E(u,v) = +\frac{1}{2}\sum_{i ∈ \mathcal G} d_{\mathcal M}(g(\frac{1}{2},v_i,w_i),f_i) ++ \alpha +\bigl( +β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) +\bigr),\]

                      where both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.

                      source
                      ManoptExamples.grad_second_order_Total_VariationFunction
                      Y = grad_second_order_Total_Variation(M, q[, p=1])
                      +grad_second_order_Total_Variation!(M, Y, q[, p=1])

                      computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1, q_2, q_3)$ with respect to all three components of $q∈\mathcal M^3$, where $d_2$ denotes the second order absolute difference using the mid point model, i.e. let

                      \[\mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};q_1,q_3) \text{ for some geodesic }g\bigr\}\]

                      denote the mid points between $q_1$ and $q_3$ on the manifold $\mathcal M$. Then the absolute second order difference is defined as

                      \[d_2(q_1,q_2,q_3) = \min_{c ∈ \mathcal C_{q_1,q_3}} d(c, q_2).\]

                      While the (sub)gradient with respect to $q_2$ is easy, the other two require the evaluation of an adjoint_Jacobi_field.

                      The derivation of this gradient can be found in [BBSW16].

                      source
                      ManoptExamples.grad_second_order_Total_VariationFunction
                      grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])

                      computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1,q_2,q_3)$ with respect to all $q_1,q_2,q_3$ occurring along any array dimension in the point q, where M is the corresponding PowerManifold.

                      source
                      ManoptExamples.project_collaborative_TVFunction
                      project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])
                      +project_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])

                      compute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function

                      \[F^q(x) = \sum_{i∈\mathcal G} + \Bigl( \sum_{j∈\mathcal I_i} + \sum_{k=1}^d \lVert X_{i,j}\rVert_x^p\Bigr)^\frac{q}{p},\]

                      where $\mathcal G$ is the set of indices for $x∈\mathcal M$ and $\mathcal I_i$ is the set of its forward neighbors. The computation can also be done in place of Θ.

                      This is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.

                      source
                      ManoptExamples.prox_Total_VariationFunction
                      ξ = prox_Total_Variation(M,λ,x [,p=1])

                      compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all forward differences occurring in the power manifold array, i.e. $\varphi(xi,xj) = d_{\mathcal M}^p(xi,xj)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • x – a point.

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place
                      source
                      ManoptExamples.prox_Total_VariationMethod
                      [y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])
                      +prox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])

                      Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $φ(x,y) = d_{\mathcal M}^p(x,y)$ with parameter λ. A derivation of this closed form solution is given in see [WDS14].

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • (x1,x2) – a tuple of two points,

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • (y1,y2) – resulting tuple of points of the $\operatorname{prox}_{λφ}($(x1,x2)$)$. The result can also be computed in place.
                      source
                      ManoptExamples.prox_parallel_TVFunction
                      y = prox_parallel_TV(M, λ, x [,p=1])
                      +prox_parallel_TV!(M, y, λ, x [,p=1])

                      compute the proximal maps $\operatorname{prox}_{λφ}$ of all forward differences occurring in the power manifold array, i.e. $φ(x_i,x_j) = d_{\mathcal M}^p(x_i,x_j)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

                      Input

                      • M – a PowerManifold manifold
                      • λ – a real value, parameter of the proximal map
                      • x – a point

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.

                      See also prox_Total_Variation

                      source
                      ManoptExamples.prox_second_order_Total_VariationMethod
                      (y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)
                      +prox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)

                      Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $\varphi(x_1,x_2,x_3) = d_{\mathcal M}^p(c(x_1,x_3),x_2)$ with parameter λ>0, where $c(x,z)$ denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.

                      Note that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.

                      Input

                      • M – a manifold

                      • λ – a real value, parameter of the proximal map

                      • (x1,x2,x3) – a tuple of three points

                      • p – (1) exponent of the distance of the TV term

                      Optional

                      kwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)

                      Output

                      • (y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.
                      source
                      ManoptExamples.prox_second_order_Total_VariationMethod
                      y = prox_second_order_Total_Variation(M, λ, x[, p=1])
                      +prox_second_order_Total_Variation!(M, y, λ, x[, p=1])

                      compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all centered second order differences occurring in the power manifold array, i.e. $\varphi(x_k,x_i,x_j) = d_2(x_k,x_i.x_j)$, where $k,j$ are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • x – a points.

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.
                      source
                      ManoptExamples.second_order_Total_VariationFunction
                      second_order_Total_Variation(M,x [,p=1])

                      compute the $\operatorname{TV}_2^p$ functional for data x on the PowerManifold manifoldmanifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i^{\pm}$ denote the forward and backward neighbors, respectively, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I^\pm_i = \{i\pm e_j, j=1,…,k\}\cap \mathcal I$. The formula then reads

                      \[E(x) = \sum_{i ∈ \mathcal I,\ j_1 ∈ \mathcal I^+_i,\ j_2 ∈ \mathcal I^-_i} +d^p_{\mathcal M}(c_i(x_{j_1},x_{j_2}), x_i),\]

                      where $c_i(⋅,⋅)$ denotes the mid point between its two arguments that is nearest to $x_i$, see [BBSW16] for a derivation.

                      In long function names, this might be shortened to TV2.

                      See also

                      grad_second_order_Total_Variation, prox_second_order_Total_Variation

                      source
                      ManoptExamples.second_order_Total_VariationMethod
                      second_order_Total_Variation(M,(x1,x2,x3) [,p=1])

                      Compute the $\operatorname{TV}_2^p$ functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by

                      \[ \mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};x_1,x_3) \text{ for some geodesic }g\bigr\}\]

                      the set of mid points between $x_1$ and $x_3$. Then the function reads

                      \[d_2^p(x_1,x_2,x_3) = \min_{c ∈ \mathcal C} d_{\mathcal M}(c,x_2),\]

                      see [BBSW16] for a derivation. In long function names, this might be shortened to TV2.

                      See also

                      grad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation

                      source

                      Literature

                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BFPS18]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
                      [BFPS17]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [Bou23]
                      [Cas59]
                      P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
                      [Cas63]
                      P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
                      [DMSC16]
                      J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.5/references.bib b/v0.1.5/references.bib new file mode 100644 index 0000000..6bb4d08 --- /dev/null +++ b/v0.1.5/references.bib @@ -0,0 +1,226 @@ +% +% --- A +% +@article{AxenBaranBergmannRzecki:2023, + AUTHOR = {Axen, Seth D. and Baran, Mateusz and Bergmann, Ronny and Rzecki, Krzysztof}, + DOI = {10.1145/3618296}, + EPRINT = {2021.08777}, + EPRINTTYPE = {arXiv}, + ISSN = {1557-7295}, + JOURNAL = {ACM Transactions on Mathematical Software}, + TITLE = {Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds}, + YEAR = {2023} +} + +% +% --- B +% +@article{Bacak:2014, + AUTHOR = {Bačák, M.}, + DOI = {10.1137/140953393}, + EPRINT = {1210.2145}, + EPRINTTYPE = {arXiv}, + JOURNAL = {SIAM Journal on Optimization}, + NUMBER = {3}, + PAGES = {1542--1566}, + TITLE = {Computing medians and means in Hadamard spaces}, + VOLUME = {24}, + YEAR = {2014} +} + +@article{BacakBergmannSteidlWeinmann:2016, + AUTHOR = {Bačák, Miroslav and Bergmann, Ronny and Steidl, Gabriele and Weinmann, Andreas}, + EPRINT = {1506.02409}, + EPRINTTYPE = {arXiv}, + YEAR = {2016}, + DOI = {10.1137/15M101988X}, + JOURNAL = {SIAM Journal on Scientific Computing}, + NUMBER = {1}, + PAGES = {A567--A597}, + TITLE = {A second order non-smooth variational model for restoring manifold-valued images}, + VOLUME = {38}, +} + +@article{BergmannFerreiraSantosSouza:2023, + AUTHOR = {Bergmann, R. and Ferreira, O. P. and Santos, E. M. and Souza, J. C. O.}, + EPRINT = {2112.05250}, + EPRINTTYPE = {arXiv}, + JOURNAL = {Preprint}, + TITLE = {The difference of convex algorithm on Hadamard manifolds}, + YEAR = {2023} +} + +@incollection{BergmannFitschenPerschSteidl:2017, + AUTHOR = {Bergmann, Ronny and Fitschen, Jan Henrik and Persch, Johannes and Steidl, Gabriele}, + EDITOR = {Lauze, François and Dong, Yiqiu and Dahl, Anders Bjorholm}, + LOCATION = {Cham}, + PUBLISHER = {Springer International Publishing}, + BOOKTITLE = {Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4--8, 2017, Proceedings}, + YEAR = {2017}, + DOI = {10.1007/978-3-319-58771-4_36}, + PAGES = {447--459}, + TITLE = {Infimal convolution coupling of first and second order differences on manifold-valued images} +} + +@article{BergmannFitschenPerschSteidl:2018, + AUTHOR = {Bergmann, Ronny and Fitschen, Jan Henrik and Persch, Johannes and Steidl, Gabriele}, + YEAR = {2018}, + DOI = {10.1007/s10851-018-0840-y}, + EPRINT = {1709.01343}, + EPRINTTYPE = {arXiv}, + JOURNAL = {Journal of Mathematical Imaging and Vision}, + NUMBER = {9}, + PAGES = {1459--1481}, + TITLE = {Priors with coupled first and second order differences for manifold-valued image processing}, + VOLUME = {60} +} + +@article{BergmannGousenbourger:2018, + AUTHOR = {Bergmann, Ronny and Gousenbourger, Pierre-Yves}, + DOI = {10.3389/fams.2018.00059}, + EPRINT = {1807.10090}, + EPRINTTYPE = {arXiv}, + JOURNAL = {Frontiers in Applied Mathematics and Statistics}, + TITLE = {A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve}, + VOLUME = {4}, + YEAR = {2018} +} + +@article{BergmannLausSteidlWeinmann:2014:1, + AUTHOR = {Bergmann, Ronny and Laus, Friederike and Steidl, Gabriele and Weinmann, Andreas}, + EPRINT = {1405.5349}, + EPRINTTYPE = {arXiv}, + DOI = {10.1137/140969993}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {4}, + PAGES = {2916--2953}, + TITLE = {Second order differences of cyclic data and applications in variational denoising}, + VOLUME = {7}, + YEAR = {2014} +} + +@article{BergmannPerschSteidl:2016, + AUTHOR = {Bergmann, Ronny and Persch, Johannes and Steidl, Gabriele}, + DOI = {10.1137/15M1052858}, + EPRINT = {1512.02814}, + EPRINTTYPE = {arXiv}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {4}, + PAGES = {901--937}, + TITLE = {A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds}, + VOLUME = {9}, + YEAR = {2016}, +} + +@book{Boumal:2023, + TITLE = {An Introduction to Optimization on Smooth Manifolds}, + AUTHOR = {Boumal, Nicolas}, + YEAR = {2023}, + MONTH = mar, + EDITION = {First}, + PUBLISHER = {Cambridge University Press}, + DOI = {10.1017/9781009166164}, + ABSTRACT = {Optimization on Riemannian manifolds-the result of smooth geometry and optimization merging into one elegant modern framework-spans many areas of science and engineering, including machine learning, computer vision, signal processing, dynamical systems and scientific computing. This text introduces the differential geometry and Riemannian geometry concepts that will help students and researchers in applied mathematics, computer science and engineering gain a firm mathematical grounding to use these tools confidently in their research. Its charts-last approach will prove more intuitive from an optimizer's viewpoint, and all definitions and theorems are motivated to build time-tested optimization algorithms. Starting from first principles, the text goes on to cover current research on topics including worst-case complexity and geodesic convexity. Readers will appreciate the tricks of the trade for conducting research and for numerical implementations sprinkled throughout the book.}, + ISBN = {978-1-00-916616-4}, + URL = {https://www.nicolasboumal.net/#book} +} + +@article{PopielNoakes:2007, + DOI = {10.1016/j.jat.2007.03.002}, + YEAR = {2007}, + MONTH = oct, + PUBLISHER = {Elsevier}, + VOLUME = {148}, + NUMBER = {2}, + PAGES = {111--127}, + AUTHOR = {Tomasz Popiel and Lyle Noakes}, + TITLE = {Bézier curves and $C^2$ interpolation in Riemannian manifolds}, + JOURNAL = {Journal of Approximation Theory} +} + +@techreport{deCasteljau:1959, + AUTHOR = {de Casteljau, Paul}, + INSTITUTION = {Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris.}, + TITLE = {Outillage methodes calcul}, + YEAR = {1959} +} + +@techreport{deCasteljau:1963, + AUTHOR = {de Casteljau, Paul}, + INSTITUTION = {Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris.}, + TITLE = {Courbes et surfaces à pôles}, + YEAR = {1963} +} + +@article{DuranMoelleSbertCremers:2016, + AUTHOR = {Duran, J. and Moeller, M. and Sbert, C. and Cremers, D.}, + DOI = {10.1137/15M102873X}, + EPRINT = {1508.01308}, + EPRINTTYPE = {arXiv}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {1}, + PAGES = {116-151}, + TITLE = {Collaborative Total Variation: A General Framework for Vectorial TV Models}, + VOLUME = {9}, + YEAR = {2016}, +} + +@article{LausNikolovaPerschSteidl:2017, + AUTHOR = {Laus, F. and Nikolova, M. and Persch, J. and Steidl, G.}, + YEAR = {2017}, + DOI = {10.1137/16M1087114}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {1}, + PAGES = {416--448}, + TITLE = {A nonlocal denoising algorithm for manifold-valued images using second order statistics}, + VOLUME = {10} +} + +@article{RudinOsherFatemi:1992, + AUTHOR = {Rudin, Leonid I. and Osher, Stanley and Fatemi, Emad}, + DOI = {10.1016/0167-2789(92)90242-f}, + ISSN = {0167-2789}, + JOURNAL = {Physica D: Nonlinear Phenomena}, + NUMBER = {1–4}, + PAGES = {259–268}, + TITLE = {Nonlinear total variation based noise removal algorithms}, + VOLUME = {60}, + YEAR = {1992} +} + +@article{SouzaOliveira:2015, + AUTHOR = {J. C. O. Souza and P. R. Oliveira}, + DOI = {10.1007/s10898-015-0282-7}, + JOURNAL = {Journal of Global Optimization}, + MONTH = feb, + NUMBER = {4}, + PAGES = {797--810}, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {63}, + TITLE = {A proximal point algorithm for DC fuctions on Hadamard manifolds}, + YEAR = {2015} +} + +@article{WeberSra:2022, + DOI = {10.1007/s10107-022-01840-5}, + YEAR = {2022}, + MONTH = jul, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {199}, + NUMBER = {1-2}, + PAGES = {525--556}, + AUTHOR = {Melanie Weber and Suvrit Sra}, + TITLE = {Riemannian Optimization via Frank-Wolfe Methods}, + JOURNAL = {Mathematical Programming} +} + +@article{WeinmannDemaretStorath:2014, + AUTHOR = {Weinmann, Andreas and Demaret, Laurent and Storath, Martin}, + DOI = {10.1137/130951075}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {4}, + PAGES = {2226--2257}, + TITLE = {Total variation regularization for manifold-valued data}, + VOLUME = {7}, + YEAR = {2014} +} diff --git a/v0.1.5/references/index.html b/v0.1.5/references/index.html new file mode 100644 index 0000000..2cfd7bb --- /dev/null +++ b/v0.1.5/references/index.html @@ -0,0 +1,2 @@ + +References · ManoptExamples.jl

                      Literature

                      [ABBR23]
                      S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
                      [Bac14]
                      M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [BFPS18]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
                      [BFPS17]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [BPS16]
                      R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
                      [Bou23]
                      [Cas59]
                      P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
                      [Cas63]
                      P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
                      [DMSC16]
                      J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
                      [LNPS17]
                      F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      [ROF92]
                      L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
                      [SO15]
                      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                      [WS22]
                      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.5/search_index.js b/v0.1.5/search_index.js new file mode 100644 index 0000000..524733b --- /dev/null +++ b/v0.1.5/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Difference-of-Convex-Frank-Wolfe/#A-comparison-of-the-Difference-of-Convex-and-Frank-Wolfe-Algorithm","page":"Frank Wolfe comparison","title":"A comparison of the Difference of Convex and Frank Wolfe Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Ronny Bergmann 2023-11-06","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Introduction","page":"Frank Wolfe comparison","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing ManifoldsBase, Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices mathcal P(n) with the affine invariant metric. Let q_1ldotsq_m in mathcal P(n) be a set of points and mu_1ldotsmu_m be a set of weights, such that they sum to one. We consider then","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmax_pinmathcal C h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"h(p) =\nsum_j=1^m mu_j d^2(pq_i)\nquad text where \nd^2(pq_i) = operatornametrbigl(\n log^2(p^-frac12q_jp^-frac12)\nbig)\nqquadtextandqquad\nmathcal C = pin mathcal M bar Lpreceq p preceq bar U ","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"for a lower bound L and an upper bound U for the matrices in the positive definite sense A preceq B Leftrightarrow (B-A) is positive semi-definite","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"When every one of the weights mu_1 ldots mu_m are equal, this function h is known as the of the set q_1 dots q_m.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And for our example we set","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Random.seed!(42)\nn = 20\nm = 100\nM = SymmetricPositiveDefinite(n)\nq = [rand(M) for _ in 1:m];\nw = rand(m)\nw ./=sum(w)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use as lower and upper bound the arithmetic and geometric mean L and U, respectively.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )\nU = sum( wi * qi for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p0 = (L+U)/2","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can check that it is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Common-Functions","page":"Frank Wolfe comparison","title":"Common Functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Given p in mathcal M, X in T_pmathcal M on the symmetric positive definite matrices M, this method computes the closed form solution to","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_qin mathcal C langle X log_p qrangle\n = operatorname*argmin_qin mathcal C operatornametr(Slog(YqY))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"where mathcal C = q L preceq q preceq U , S = p^-12Xp^-12, and Y=p^-12.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The solution is given by Z=X^-1Qbigl( P^mathrmT-operatornamesgn(D)_+P+hatLbigr)Q^mathrmTX^-1,@ where S=QDQ^mathrmT is a diagonalization of S, hatU-hatL=P^mathrmTP with hatL=Q^mathrmTXLXQ and hatU=Q^mathrmTXUXQ, where -mboxsgn(D)_+ is the diagonal matrix","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatornamediagbigl(\n -operatornamesgn(d_11)_+ ldots -operatornamesgn(d_nn)_+\nbigr)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and D=(d_ij).","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@doc raw\"\"\"\n closed_form_solution!(M, q, L, U, p X)\n\nCompute the closeed form solution of the constraint sub problem in place of ``q``.\n\"\"\"\nfunction closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)\n # extract p^1/2 and p^{-1/2}\n (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)\n # Compute D & Q\n e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk = QDQ'\n D = Diagonal(1.0 .* (e2.values .< 0))\n Q = e2.vectors\n #println(p)\n Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q\n Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q\n P = cholesky(Hermitian(Uprime - Lprime))\n z = P.U' * D * P.U + Lprime\n copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-Difference-of-Convex-Formulation","page":"Frank Wolfe comparison","title":"The Difference of Convex Formulation","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use g(p) = iota_mathcal C(p) as the indicator funtion of the set mathcal C. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function is_pos_def(p; atol=5e-13)\n e = eigen(Symmetric(p))\n return all((e.values .+ atol) .> 0)\nend\nfunction g(p, L, U)\n return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf\nend\nh(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"So we can first check that p0 is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"g(p0,L,U) == 0.0","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"true","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Now setting","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We look for a maximum of h, where g is minimal, i.e. g(p) is zero or in other words p in mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The gradient of h can also be implemented in closed form as","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))\nfunction grad_h!(M, X, p, w, q)\n Y = copy(M, p, X)\n zero_vector!(M, X, p)\n for (wi, qi) in zip(w,q)\n log!(M, Y, p, qi)\n Y .*= - 2.0*wi\n X .+= Y\n end\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can further define the cost, which will just be +infty outside of mathcal C. We define","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_dc(M, p) = g(p, L, U) - h(M, p, w, q)\ngrad_h!(M, X, p) = grad_h!(M, X, p, w, q)\nfunction grad_f_dc!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Here we can omit the gradient of g in the definition of operatornamegrad f, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As the last step, we can provide the closed form solver for the DC sub problem given at iteration k by","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pin mathcal C\n biglangle -operatornamegrad h(p^(k)) exp^-1_p^(k)pbigrangle","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Which we con compute","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution!(M, q, p, X)\n closed_form_solution!(M, q, L, U, p, -X)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For safety, we might want to avoid ending up at the boundary of mathcal C. That is we reduce the distance we walk towards the solution q a bit.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution_safe!(M, q, p, X)\n p_last = copy(M,p) # since p=q might be in place\n closed_form_solution!(M, q, L, U, p, -X)\n q_orig = copy(M,q) # since we do the following in place of q\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n s = 1.0\n d = distance(M, p_last, q_orig);\n # if we are close to zero, we reduce faster.\n α = d < 1/(n^2) ? 0.66 : 0.9995;\n i=0\n while (a < 0) || (b < 0)\n s *= α\n shortest_geodesic!(M, q, p_last, q_orig, s)\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n #println(\"$i a: $a, b = $b with s=$s\")\n i=i+1\n if (i>100) # safety fallback\n #@warn \" $i steps where not enough $s ($α)\\n$a $b\\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs\"\n qe = eigen(q)\n if a < 0\n qe.values .+= min(1e-8, n*abs(min(a,b)))\n else\n qe.values .-= min(1e-8, n*abs(min(a,b)))\n end\n q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n return q\n end\n end\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-DoC-solver-run","page":"Frank Wolfe comparison","title":"The DoC solver run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s compare both methods when they have the same stopping criteria","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;\n gradient=grad_f_dc!,\n sub_problem=dc_sub_solution_safe!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(300) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 30, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(p): -0.77661458292831\nAt iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.\n 15.450011 seconds (16.08 M allocations: 1.597 GiB, 3.16% gc time, 91.75% compilation time)\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 23 iterations\n\n## Parameters\n* sub solver state:\n | InplaceEvaluation()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 300: not reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 30]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s extract the final point and look at its cost","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_dc = get_solver_result(state1_dc);\nf_dc(M, p1_dc)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.784425242474807","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (1.1886583723800445e-12, 0.06669240322431051)\n (1.3411042178831775e-5, 0.0671353506908023)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For the statistics we extract the recordings from the state","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Define-the-Frank-Wolfe-functions","page":"Frank Wolfe comparison","title":"Define the Frank-Wolfe functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For Frank wolfe, the cost is just defined as -h(p) but the minimisation is constraint to mathcal C, which is enfored by the oracle.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_fw(M, p) = -h(M, p, w, q)\nfunction grad_f_fw!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend\noracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-FW-Solver-Run","page":"Frank Wolfe comparison","title":"The FW Solver Run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Similarly we can run the Frank-Wolfe algorithm with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;\n sub_problem=oracle_fw!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(10^4) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), :Cost, (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 2*10^3, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial f(x): -0.776615\n# 2000 f(x): -0.784420 |Δp|: 0.04611942377596 |grad f(p)|: 0.17693408 |Δgrad f(p)|: 0.17555618\n# 4000 f(x): -0.784421 |Δp|: 0.00372201632005 |grad f(p)|: 0.17694619 |Δgrad f(p)|: 0.00749427\n# 6000 f(x): -0.784422 |Δp|: 0.00205683506784 |grad f(p)|: 0.17695204 |Δgrad f(p)|: 0.00414088\n# 8000 f(x): -0.784422 |Δp|: 0.00140675676260 |grad f(p)|: 0.17695565 |Δgrad f(p)|: 0.00283200\n# 10000 f(x): -0.784422 |Δp|: 0.00106177438611 |grad f(p)|: 0.17695815 |Δgrad f(p)|: 0.00213746\nThe algorithm reached its maximal number of iterations (10000).\n153.031877 seconds (55.53 M allocations: 94.003 GiB, 2.07% gc time, 0.51% compilation time)\n\n# Solver state for `Manopt.jl`s Frank Wolfe Method\nAfter 10000 iterations\n\n## Parameters\n* inverse retraction method: LogarithmicInverseRetraction()\n* retraction method: ExponentialRetraction()\n* sub solver state:\n | InplaceEvaluation()\n\n## Stepsize\nDecreasingStepsize(; length=2.0, factor=1.0, subtrahend=0.0, shift=2)\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 10000: reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"f(x): %f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 2000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we take a look at this result as well","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_fw = get_solver_result(state1_fw);\nf_dc(M, p1_fw)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844220281765162","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And its feasibility","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.904818928410655e-10, 0.06659173821656107)\n (3.245654983213335e-5, 0.06713970236096602)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Statistics","page":"Frank Wolfe comparison","title":"Statistics","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We extract the recorded values","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"# DoC\niter1_dc = get_record(state1_dc, :Iteration, :Iteration)\npk_dc = get_record(state1_dc,:Iteration,:Iterate)\ncosts1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))\ndc_min = minimum(costs1_dc)\n# FW\niter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]\npk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]\ncosts1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x_k)-f^*$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-8, 10^-2),\n xaxis=:log,\n xlims=(1,10^4),\n)\nplot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label=\"Difference of Convex\")\nplot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label=\"Frank-Wolfe\")","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Literature","page":"Frank Wolfe comparison","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\n","category":"page"},{"location":"references/#Literature","page":"References","title":"Literature","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nM. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-of-the-Difference-of-Convex-Algorithms","page":"A Benchmark","title":"Benchmark of the Difference of Convex Algorithms","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Introduction","page":"A Benchmark","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where ghcolon mathcal M to mathbb R are geodesically convex function on the Riemannian manifold mathcal M.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#The-DC-Problem","page":"A Benchmark","title":"The DC Problem","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We start with defining the two convex functions gh and their gradients as well as the DC problem f and its gradient for the problem","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":" operatorname*argmin_pinmathcal M bigl( logbigr(det(p)bigr)bigr)^4 - bigl(log det(p) bigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where the critical points obtain a functional value of -frac14.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where mathcal M is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We first define the corresponding functions","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"g(M, p) = log(det(p))^4\nh(M, p) = log(det(p))^2\nf(M, p) = g(M, p) - h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and their gradients","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"grad_g(M, p) = 4 * (log(det(p)))^3 * p\ngrad_h(M, p) = 2 * log(det(p)) * p\ngrad_f(M, p) = grad_g(M, p) - grad_h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which we can use to verify that the gradients of g and h are correct. We use for that","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"n = 6\nM = SymmetricPositiveDefinite(n)\np0 = log(n) * Matrix{Float64}(I, n, n);\nX0 = 1 / n * Matrix{Float64}(I, n, n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"to tall both checks","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, g, grad_g, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, h, grad_h, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which both pass the test. We continue to define their inplace variants","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"function grad_g!(M, X, p)\n copyto!(M, X, p)\n X .*= 4 * (log(det(p)))^3\n return X\nend\nfunction grad_h!(M, X, p)\n copyto!(M, X, p)\n X .*= 2 * (log(det(p)))\n return X\nend\nfunction grad_f!(M, X, p)\n grad_g!(M, X, p)\n Y = copy(M, p, X)\n grad_h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And compare times for both algorithms, with a bit of debug output.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dca = difference_of_convex_algorithm(\n M,\n f,\n g,\n grad_h!,\n p0;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n (:GradientNorm, \" |grad_f(p)|: %1.9f\"),\n (:Change, \" |δp|: %1.9f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470\n# 5 f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127\n# 10 f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103\n# 15 f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011\nThe algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.\n 3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The cost is","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dca)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25000000000000006","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Similarly the DCPPA performs","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dcppa = difference_of_convex_proximal_point(\n M,\n grad_h!,\n p0;\n g=g,\n grad_g=grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n \" \",\n (:GradientNorm, \"|grad_f(p)|: %1.10f\"),\n (:Change, \"|δp|: %1.10f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470 \n# 5 f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692\n# 10 f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316\n# 15 f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968\n# 25 f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530\n# 30 f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048\n# 35 f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001\nThe algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.\n 1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dcppa)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-I:-Time-comparison","page":"A Benchmark","title":"Benchmark I: Time comparison","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()\ndcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()\nN_max=14\nN = 2:N_max","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and run a benchmark for both algorithms","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"for n in N\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I, n, n)\n bdca = @benchmark difference_of_convex_algorithm(\n $Mn,\n $f,\n $g,\n $grad_h!,\n $pn;\n grad_g=$grad_g!,\n gradient=$grad_f!,\n evaluation=InplaceEvaluation(),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dca_benchmarks[n] = bdca\n bdcppa = @benchmark difference_of_convex_proximal_point(\n $Mn,\n $grad_h!,\n $pn;\n g=$g,\n grad_g=$grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dcppa_benchmarks[n] = bdcppa\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]\ndca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]\ndcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Time (sec.)\")\nplot!(dims, dca_times; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims, dcppa_times; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-II:-Iterations-and-cost.","page":"A Benchmark","title":"Benchmark II: Iterations and cost.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"N2 = [5,10,20,40,80]\ndims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]\ndca_iterations = Dict{Int,Int}()\ndca_costs = Dict{Int,Vector{Float64}}()\ndcppa_iterations = Dict{Int,Int}()\ndcppa_costs = Dict{Int,Vector{Float64}}()","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time for n in N2\n println(n)\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I,n,n);\n @time dca_st = difference_of_convex_algorithm(\n Mn, f, g, grad_h!, pn;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation = InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dca_costs[n] = get_record(dca_st, :Iteration, :Cost)\n dca_iterations[n] = length(dca_costs[n])\n @time dcppa_st = difference_of_convex_proximal_point(\n Mn, grad_h!, pn;\n g=g,\n grad_g=grad_g!,\n λ = i -> 1/(2*n),\n cost = f,\n gradient= grad_f!,\n evaluation = InplaceEvaluation(),\n stepsize = ConstantStepsize(1.0),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)\n dcppa_iterations[n] = length(dcppa_costs[n])\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The iterations are like","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Iterations\")\nplot!(dims2, [values(dca_iterations)...]; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims2, [values(dcppa_iterations)...]; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And for the developtment of the cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where we can see that the DCA needs less iterations than the DCPPA.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Literature","page":"A Benchmark","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\n","category":"page"},{"location":"objectives/#List-of-Objectives-defined-for-the-Examples","page":"Objectives","title":"List of Objectives defined for the Examples","text":"","category":"section"},{"location":"objectives/#Rayleigh","page":"Objectives","title":"Rayleigh Quotient on the Sphere","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rayleigh example (TODO) to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RayleighQuotient.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RayleighQuotientCost","page":"Objectives","title":"ManoptExamples.RayleighQuotientCost","text":"RayleighQuotientCost\n\nA functor representing the Rayleigh Quotient cost function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either\n\nf(p) = p^mathrmTApqquad p 𝕊^n-1\n\nor extended into the embedding as\n\nf(x) = x^mathrmTAx qquad x ℝ^n\n\nwhich is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of 𝕊^n-1.\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientCost(A)\n\nCreate the Rayleigh cost function.\n\nSee also\n\nRayleighQuotientGrad!!, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientGrad!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientGrad!!","text":"RayleighQuotientGrad!!\n\nA functor representing the Rayleigh Quotient gradient function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either\n\noperatornamegrad f(p) = 2 Ap - 2 (p^mathrmTAp)*pqquad p 𝕊^n-1\n\nor taking the Euclidean gradient of the Rayleigh quotient on the sphere as\n\nf(x) = 2Ax qquad x ℝ^n\n\nFor details, see Example 3.62 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientGrad!!(A)\n\nCreate the Rayleigh quotient gradient function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientHess!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientHess!!","text":"RayleighQuotientHess!!\n\nA functor representing the Rayleigh Quotient Hessian.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either\n\noperatornameHess f(p)X = 2 bigl(AX - (p^mathrmTAX)p - (p^mathrmTAp)Xbigr)qquad p 𝕊^n-1 X in T_p𝕊^n-1\n\nor taking the Euclidean Hessian of the Rayleigh quotient on the sphere as\n\n^2f(x)V = 2AV qquad x V ℝ^n\n\nFor details, see Example 5.27 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientHess!!(A)\n\nCreate the Rayleigh quotient Hessian function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientGrad!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#BezierCurves","page":"Objectives","title":"Bézier Curves","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Bezier Curves example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/BezierCurves.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.BezierSegment","page":"Objectives","title":"ManoptExamples.BezierSegment","text":"BezierSegment\n\nA type to capture a Bezier segment. With n points, a Bézier segment of degree n-1 is stored. On the Euclidean manifold, this yields a polynomial of degree n-1.\n\nThis type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.\n\nNot that this can also be used to represent tangent vectors on the control points of a segment.\n\nSee also: de_Casteljau.\n\nConstructor\n\nBezierSegment(pts::AbstractVector)\n\nGiven an abstract vector of pts generate the corresponding Bézier segment.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}, AbstractFloat, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.L2_acceleration_Bezier","text":"L2_acceleration_Bezier(M,B,pts,λ,d)\n\ncompute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.\n\nfracλ2sum_i=0^N d_mathcal M(d_i c_B(i))^2+\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i and d_2 refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by p_i, and to each p_i corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}}} where P","page":"Objectives","title":"ManoptExamples.acceleration_Bezier","text":"acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector{<:AbstractFloat},\n) where {P}\n\ncompute the value of the discrete Acceleration of the composite Bezier curve\n\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i, i=1N, and d_2 refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nThis acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n T::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n T::AbstractVector,\n X::AbstractVector,\n)\n\nEvaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\n\nevaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t,\n η,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t01 on the curve and a tangent vector ηT_β(t)mathcal M. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.de_Casteljau-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any}}","page":"Objectives","title":"ManoptExamples.de_Casteljau","text":"de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function\n\nreturn the Bézier curve β(b_0b_n) 01 mathcal M defined by the control points b_0b_nmathcal M, nmathbb N, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let γ_ab(t) denote the shortest geodesic connecting abmathcal M. Then the curve is defined by the recursion\n\nbeginaligned\n β(tb_0b_1) = gamma_b_0b_1(t)\n β(tb_0b_n) = gamma_β(tb_0b_n-1) β(tb_1b_n)(t)\nendaligned\n\nand P is the type of a point on the Manifold M.\n\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function\n\nGiven a vector of Bézier segments, i.e. a vector of control points B=bigl( (b_00b_n_00)(b_0m b_n_mm) bigr), where the different segments might be of different degree(s) n_0n_m. The resulting composite Bézier curve c_B0m mathcal M consists of m segments which are Bézier curves.\n\nc_B(t) =\n begincases\n β(t b_00b_n_00) text if t 01\n β(t-i b_0ib_n_ii) text if \n t(ii+1 quad i1m-1\n endcases\n\nde_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)\nde_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector\nde_Casteljau(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n) -> AbstractVector\n\nEvaluate the Bézier curve at time t or at times t in T.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Θ::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in 0N, and each depending the corresponding segment(s). Here, N is the length of B. For the mutating variant the result is computed in Θ.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t0N, which depends only on the corresponding segment. Here, N is the length of B. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n t,\n X::BezierSegment\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degree-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.get_Bezier_degree","text":"get_Bezier_degree(M::AbstractManifold, b::BezierSegment)\n\nreturn the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degrees-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_degrees","text":"get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\n\nreturn the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_inner_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_inner_points","text":"get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )\nget_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)\n\nreturns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junction_tangent_vectors-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_junction_tangent_vectors","text":"get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)\n\nreturns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junctions","page":"Objectives","title":"ManoptExamples.get_Bezier_junctions","text":"get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junctions(M::AbstractManifold, b::BezierSegment)\n\nreturns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_points","page":"Objectives","title":"ManoptExamples.get_Bezier_points","text":"get_Bezier_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n reduce::Symbol=:default\n)\nget_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)\n\nreturns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.\n\nThis method reduces the points depending on the optional reduce symbol\n\n:default: no reduction is performed\n:continuous: for a continuous function, the junction points are doubled at b_0i=b_n_i-1i-1, so only b_0i is in the vector.\n:differentiable: for a differentiable function additionally log_b_0ib_1i = -log_b_n_i-1i-1b_n_i-1-1i-1 holds. hence b_n_i-1-1i-1 is omitted.\n\nIf only one segment is given, all points of b, b.pts, is returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_segments-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any, Symbol}} where P","page":"Objectives","title":"ManoptExamples.get_Bezier_segments","text":"get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])\n\nreturns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.\n\nThere are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let c=(c_1c_k) and d=(d_1d_m), where m denotes the number of components the composite Bézier curve consists of. Then\n\n:default: k = m + sum_i=1^m d_i since each component requires one point more than its degree. The points are then ordered in tuples, i.e.\nB = bigl c_1c_d_1+1 (c_d_1+2c_d_1+d_2+2 c_k-m+1+d_mc_k bigr\n:continuous: k = 1+ sum_i=1m d_i, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.\nB = bigl c_1c_d_1+1 c_d_1+1c_d_1+d_2+1 c_k-1+d_mb_k) bigr\n:differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence k = 2 - m + sum_i=1m d_i and at a junction point b_n with its given prior point c_n-1, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as b = exp_c_n(-log_c_n c_n-1) such that the assumed differentiability holds\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector, Any, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.grad_L2_acceleration_Bezier","text":"grad_L2_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector,\n λ,\n d::AbstractVector{P}\n) where {P}\n\ncompute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight λ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in 0N), where N is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting λ=0 yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.\n\nNote that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_acceleration_Bezier-Tuple{ManifoldsBase.AbstractManifold, AbstractVector, AbstractVector{<:Integer}, AbstractVector}","page":"Objectives","title":"ManoptExamples.grad_acceleration_Bezier","text":"grad_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector,\n degrees::AbstractVector{<:Integer}\n T::AbstractVector\n)\n\ncompute the gradient of the discretized acceleration of a (composite) Bézier curve c_B(t) on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in 0N, where N is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set λ=0 therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.\n\nSee also\n\nacceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective-Tuple{AbstractVector}","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the in-place variant to be used, though that keyword is used to setup the objective.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also 📖 Rosenbrock (with slightly different parameter naming).\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\ngrad_f!!(M,p)\ngrad_f!!(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockMetric","page":"Objectives","title":"ManoptExamples.RosenbrockMetric","text":"RosenbrockMetric <: AbstractMetric\n\nA metric related to the Rosenbrock problem, where the metric at a point pmathbb R^2 is given by\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\nwhere the mathrmRb stands for Rosenbrock\n\n\n\n\n\n","category":"type"},{"location":"objectives/#Base.exp-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Number}","page":"Objectives","title":"Base.exp","text":"q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)\nexp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)\n\nCompute the exponential map with respect to the RosenbrockMetric.\n\n q = beginpmatrix p_1 + X_1 p_2+X_2+X_1^2endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Base.log-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any}","page":"Objectives","title":"Base.log","text":"X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)\nlog!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)\n\nCompute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any j 1m\n\nX = beginpmatrix\n q_1 - p_1 \n q_2 - p_2 + (q_1 - p_1)^2\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.inverse_local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.inverse_local_metric","text":"inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG^-1_p =\nbeginpmatrix\n 1 2p_1\n 2p_1 1+4p_1^2 \nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.local_metric","text":"local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.change_representer-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, ManifoldsBase.EuclideanMetric, Any, Any}","page":"Objectives","title":"ManifoldsBase.change_representer","text":"Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)\nchange_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)\n\nGiven the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.\n\nthis function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.inner-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Any}","page":"Objectives","title":"ManifoldsBase.inner","text":"inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)\n\nCompute the inner product on mathbb R^2 with respect to the RosenbrockMetric, i.e. for XY in T_pmathcal M we have\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1\n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Total-Variation","page":"Objectives","title":"Total Variation","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Total Variation example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/TotalVariation.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.Intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.Intrinsic_infimal_convolution_TV12","text":"Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\nCompute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads\n\nE(uv) =\n frac12sum_i mathcal G\n d_mathcal Mbigl(g(frac12v_iw_i)f_ibigr)\n +alphabigl( βmathrmTV(v) + (1-β)mathrmTV_2(w) bigr)\n\nfor more details see [BFPS17, BFPS18].\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation-NTuple{4, Any}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation","text":"L2_Total_Variation(M, p_data, α, p)\n\ncompute the ℓ^2-TV functional on the PowerManifold M for given (fixed) data p_data (on M), a nonnegative weight α, and evaluated at p (on M), i.e.\n\nE(p) = d_mathcal M^2(fp) + alpha operatornameTV(p)\n\nSee also\n\nTotal_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation_1_2-Tuple{ManifoldsBase.PowerManifold, Vararg{Any, 4}}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation_1_2","text":"L2_Total_Variation_1_2(M, f, α, β, x)\n\ncompute the ℓ^2-TV-TV2 functional on the PowerManifold manifold M for given (fixed) data f (on M), nonnegative weight α, β, and evaluated at x (on M), i.e.\n\nE(x) = d_mathcal M^2(fx) + alphaoperatornameTV(x)\n + βoperatornameTV_2(x)\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_second_order_Total_Variation-Tuple{ManifoldsBase.PowerManifold, Any, Any, Any}","page":"Objectives","title":"ManoptExamples.L2_second_order_Total_Variation","text":"L2_second_order_Total_Variation(M, f, β, x)\n\ncompute the ℓ^2-TV2 functional on the PowerManifold manifold M for given data f, nonnegative parameter β, and evaluated at x, i.e.\n\nE(x) = d_mathcal M^2(fx) + βoperatornameTV_2(x)\n\nas used in [BBSW16].\n\nSee also\n\nsecond_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Total_Variation","page":"Objectives","title":"ManoptExamples.Total_Variation","text":"Total_Variation(M,x [,p=2,q=1])\n\nCompute the operatornameTV^p functional for data xon the PowerManifold manifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i denote the forward neighbors, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I_i = i+e_j j=1kcap mathcal G. The formula reads\n\nE^q(x) = sum_i mathcal G\n bigl( sum_j mathcal I_i d^p_mathcal M(x_ix_j) bigr)^qp\n\nsee [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.\n\nSee also\n\ngrad_Total_Variation, prox_Total_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.adjoint_differential_forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.adjoint_differential_forward_logs","text":"Y = adjoint_differential_forward_logs(M, p, X)\nadjoint_differential_forward_logs!(M, Y, p, X)\n\nCompute the adjoint differential of forward_logs F occurring, in the power manifold array p, the differential of the function\n\nF_i(p) = sum_j mathcal I_i log_p_i p_j\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i Let n be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold mathcal M = mathcal M^n. The adjoint differential can be computed in place of Y.\n\nInput\n\nM – a PowerManifold manifold\np – an array of points on a manifold\nX – a tangent vector to from the n-fold power of p, where n is the ndims of p\n\nOutput\n\nY – resulting tangent vector in T_pmathcal M representing the adjoint differentials of the logs.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_forward_logs-Tuple{ManifoldsBase.PowerManifold, Any, Any}","page":"Objectives","title":"ManoptExamples.differential_forward_logs","text":"Y = differential_forward_logs(M, p, X)\ndifferential_forward_logs!(M, Y, p, X)\n\ncompute the differential of forward_logs F on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function\n\nF_i(x) = sum_j mathcal I_i log_p_i p_j quad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\np – a point.\nX – a tangent vector.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal N representing the differentials of the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.forward_logs","text":"Y = forward_logs(M,x)\nforward_logs!(M, Y, x)\n\ncompute the forward logs F (generalizing forward differences) occurring, in the power manifold array, the function\n\nF_i(x) = sum_j mathcal I_i log_x_i x_jquad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i. This can also be done in place of ξ.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal M representing the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, λ, x[, p=1])\ngrad_Total_Variation!(M, X, λ, x[, p=1])\n\nCompute the (sub)gradient f of all forward differences occurring, in the power manifold array, i.e. of the function\n\nf(p) = sum_isum_j mathcal I_i d^p(x_ix_j)\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nX – resulting tangent vector in T_xmathcal M. The computation can also be done in place.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}, Any}} where T","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, (x,y)[, p=1])\ngrad_Total_Variation!(M, X, (x,y)[, p=1])\n\ncompute the (sub) gradient of frac1pd^p_mathcal M(xy) with respect to both x and y (in place of X and Y).\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.grad_intrinsic_infimal_convolution_TV12","text":"grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\ncompute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some f mathcal M on a PowerManifold manifold mathcal M this function computes the (sub)gradient of\n\nE(uv) =\nfrac12sum_i mathcal G d_mathcal M(g(frac12v_iw_i)f_i)\n+ alpha\nbigl(\nβmathrmTV(v) + (1-β)mathrmTV_2(w)\nbigr)\n\nwhere both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"Y = grad_second_order_Total_Variation(M, q[, p=1])\ngrad_second_order_Total_Variation!(M, Y, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1 q_2 q_3) with respect to all three components of qmathcal M^3, where d_2 denotes the second order absolute difference using the mid point model, i.e. let\n\nmathcal C = bigl c mathcal M g(tfrac12q_1q_3) text for some geodesic gbigr\n\ndenote the mid points between q_1 and q_3 on the manifold mathcal M. Then the absolute second order difference is defined as\n\nd_2(q_1q_2q_3) = min_c mathcal C_q_1q_3 d(c q_2)\n\nWhile the (sub)gradient with respect to q_2 is easy, the other two require the evaluation of an adjoint_Jacobi_field.\n\nThe derivation of this gradient can be found in [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation-2","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1q_2q_3) with respect to all q_1q_2q_3 occurring along any array dimension in the point q, where M is the corresponding PowerManifold.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.project_collaborative_TV","page":"Objectives","title":"ManoptExamples.project_collaborative_TV","text":"project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])\nproject_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])\n\ncompute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function\n\nF^q(x) = sum_imathcal G\n Bigl( sum_jmathcal I_i\n sum_k=1^d lVert X_ijrVert_x^pBigr)^fracqp\n\nwhere mathcal G is the set of indices for xmathcal M and mathcal I_i is the set of its forward neighbors. The computation can also be done in place of Θ.\n\nThis is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"ξ = prox_Total_Variation(M,λ,x [,p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all forward differences occurring in the power manifold array, i.e. varphi(xixj) = d_mathcal M^p(xixj) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a point.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}, Int64}} where T","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"[y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])\nprox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])\n\nCompute the proximal map operatornameprox_λvarphi of φ(xy) = d_mathcal M^p(xy) with parameter λ. A derivation of this closed form solution is given in see [WDS14].\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\n(x1,x2) – a tuple of two points,\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\n(y1,y2) – resulting tuple of points of the operatornameprox_λφ((x1,x2)). The result can also be computed in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.prox_parallel_TV","page":"Objectives","title":"ManoptExamples.prox_parallel_TV","text":"y = prox_parallel_TV(M, λ, x [,p=1])\nprox_parallel_TV!(M, y, λ, x [,p=1])\n\ncompute the proximal maps operatornameprox_λφ of all forward differences occurring in the power manifold array, i.e. φ(x_ix_j) = d_mathcal M^p(x_ix_j) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a PowerManifold manifold\nλ – a real value, parameter of the proximal map\nx – a point\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.\n\nSee also prox_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Any, Tuple{T, T, T}}, Tuple{ManifoldsBase.AbstractManifold, Any, Tuple{T, T, T}, Int64}} where T","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"(y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)\nprox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)\n\nCompute the proximal map operatornameprox_λvarphi of varphi(x_1x_2x_3) = d_mathcal M^p(c(x_1x_3)x_2) with parameter λ>0, where c(xz) denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.\n\nNote that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.\n\nInput\n\nM – a manifold\nλ – a real value, parameter of the proximal map\n(x1,x2,x3) – a tuple of three points\np – (1) exponent of the distance of the TV term\n\nOptional\n\nkwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)\n\nOutput\n\n(y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation-Union{Tuple{T}, Tuple{N}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any, Int64}} where {N, T}","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"y = prox_second_order_Total_Variation(M, λ, x[, p=1])\nprox_second_order_Total_Variation!(M, y, λ, x[, p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all centered second order differences occurring in the power manifold array, i.e. varphi(x_kx_ix_j) = d_2(x_kx_ix_j), where kj are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a points.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,x [,p=1])\n\ncompute the operatornameTV_2^p functional for data x on the PowerManifold manifoldmanifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i^pm denote the forward and backward neighbors, respectively, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I^pm_i = ipm e_j j=1kcap mathcal I. The formula then reads\n\nE(x) = sum_i mathcal I j_1 mathcal I^+_i j_2 mathcal I^-_i\nd^p_mathcal M(c_i(x_j_1x_j_2) x_i)\n\nwhere c_i() denotes the mid point between its two arguments that is nearest to x_i, see [BBSW16] for a derivation.\n\nIn long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation-Union{Tuple{T}, Tuple{MT}, Tuple{MT, Tuple{T, T, T}}, Tuple{MT, Tuple{T, T, T}, Any}} where {MT<:ManifoldsBase.AbstractManifold, T}","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,(x1,x2,x3) [,p=1])\n\nCompute the operatornameTV_2^p functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by\n\n mathcal C = bigl c mathcal M g(tfrac12x_1x_3) text for some geodesic gbigr\n\nthe set of mid points between x_1 and x_3. Then the function reads\n\nd_2^p(x_1x_2x_3) = min_c mathcal C d_mathcal M(cx_2)\n\nsee [BBSW16] for a derivation. In long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Literature","page":"Objectives","title":"Literature","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/#List-of-Examples","page":"Overview","title":"List of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation Comment\nA Benchmark for Difference of Convex contains a few simple functions \nBézier Curves and Minimizing their Acceleration tools Bézier curves and their acceleration 📚 \nSolving Rosenbrock with Difference of Convex DoC split of Rosenbrock 📚 uses a Rosenbrock based metric\nDifference of Convex vs. Frank-Wolfe closed-form sub solver\nRiemannian Mean f, operatornamegradf (A/I), objective 📚 \nRobust PCA f, operatornamegradf (A/I), objective 📚 \nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚 \nThe Rayleigh Quotient f, operatornamegradf (A/I), operatornameHessf (A/I), objective 📚 \nTotal Variation Minimization f, operatornameproxf (A/I), objective 📚 ","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Solving-Rosenbrock-with-the-Difference-of-Convex-Algorithm","page":"Rosenbrock Metric","title":"Solving Rosenbrock with the Difference of Convex Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Introduction","page":"Rosenbrock Metric","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Both the Rosenbrock problem","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":" operatorname*argmin_xin ℝ^2 abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where ab0 and usually b=1 and a gg b, we know the minimizer x^* = (bb^2)^mathrmT, and also the (Euclidean) gradient","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"nabla f(x) =\n beginpmatrix\n 4a(x_1^2-x_2) -2a(x_1^2-x_2)\n endpmatrix\n +\n beginpmatrix\n 2(x_1-b) 0\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Furthermore, the RosenbrockMetric can be used on ℝ^2, that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"XY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"The Euclidean Gradient\nThe Riemannian gradient descent with respect to the RosenbrockMetric\nThe Euclidean Difference of Convex Algorithm\nThe Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Where we obtain a difference of convex problem by writing","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f(x) = abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2\n = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 - bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"g(x) = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 quadtext and quad h(x) = bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nimport Manopt: set_manopt_parameter!\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\ngreen = paul_tol[\"mutedgreen\"]\nsand = paul_tol[\"mutedsand\"]\nteal = paul_tol[\"mutedteal\"]\ngrey = paul_tol[\"mutedgrey\"]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"To emphasize the effect, we choose a quite large value of a.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"a = 2*10^5\nb = 1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and use the starting point and a direction to check gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"p0 = [0.1, 0.2]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Euclidean Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Euclidean gradient we can just use the same approach as in the Rosenbrock example","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M = ℝ^2\nf = ManoptExamples.RosenbrockCost(M; a=a, b=b)\n∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"define a common debug vector","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"debug_vec = [\n (:Iteration, \"# %-8d \"),\n (:Cost, \"F(x): %1.4e\"),\n \" \",\n (:Change, \"|δp|: %1.4e | \"),\n (:GradientNorm, \"|grad f|: %1.6e\"),\n :Stop,\n \"\\n\",\n ]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and call the gradient descent algorithm","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^7],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03\n# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04\n# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06\n# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08\n# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 53073227 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Riemannian Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Riemannian case, we define","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and the gradient is now adopted to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_f!(M, X, p)\n ∇f!!(M, X, p)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_f(M, p)\n X = zero_vector(M, p)\n return grad_f!(M, X, p)\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^6],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 1000000 F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04\n# 2000000 F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 2443750 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Euclidean Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the convex case, we have to first introduce the two parts of the cost.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;\nf2(M, p; a=100, b=1) = (p[1] - b[1])^2;\ng(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)\nh(M, p; a=100, b=1) = f2(M, p; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and their (Euclidan) gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function ∇h!(M, X, p; a=100, b=1)\n X[1] = 2*(p[1]-b)\n X[2] = 0\n return X\nend\nfunction ∇h(M, p; a=100, b=1)\n X = zero(p)\n ∇h!(M, X, p; a=a, b=b)\n return X\nend\nfunction ∇g!(M, X, p; a=100, b=1)\n X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)\n X[2] = -2*a*(p[1]^2-p[2])\n return X\nend\nfunction ∇g(M, p; a=100, b=1)\n X = zero(p)\n ∇g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and we define for convenience","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docE_g(M, p) = g(M, p; a=a, b=b)\ndocE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)\ndocE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)\ndocE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)\nfunction docE_∇f!(M, X, p)\n Y = zero_vector(M, p)\n docE_∇g!(M, X, p)\n docE_∇h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we call the difference of convex algorithm on Eucldiean space ℝ^2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"E_doc_state = difference_of_convex_algorithm(\n M, docE_f, docE_g, docE_∇h!, p0;\n gradient=docE_∇f!,\n grad_g = docE_∇g!,\n debug=[debug_vec..., 10^4],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_hess=nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000 F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04\n# 20000 F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 26549 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Riemannian Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"We first have to again defined the gradients with respect to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_h!(M, X, p; a=100, b=1)\n ∇h!(M, X, p; a=a, b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_h(M, p; a=100, b=1)\n X = zero(p)\n grad_h!(M, X, p; a=a, b=b)\n return X\nend\nfunction grad_g!(M, X, p; a=100, b=1)\n ∇g!(M, X, p; a=a,b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_g(M, p; a=100, b=1)\n X = zero(p)\n grad_g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For X in h(p^(k)) the sunproblem top determine p^(k+1) reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatorname*argmin_pinmathcal M g(p) - langle X log_p^(k)prangle","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with X = operatornamegrad h(p^(k)) that","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"phi(p) = g(p) - langle X log_p^(k)prangle\n= abigl( p_1^2-p_2bigr)^2\n + 2bigl(p_1-bbigr)^2 - 2(p^(k)_1-b)p_1 + 2(p^(k)_1-b)p^(k)_1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"its Euclidean gradient reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatornamegradphi(p) =\n nabla varphi(p)\n = beginpmatrix\n 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^(k)_1-b)\n -2a(p_1^2-p_2)\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where we can again employ the gradient conversion from before to obtain the Riemannian gradient.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"mutable struct SubGrad{P,T,V}\n pk::P\n Xk::T\n a::V\n b::V\nend\nfunction (ϕ::SubGrad)(M, p)\n X = zero_vector(M, p)\n ϕ(M, X, p)\n return X\nend\nfunction (ϕ::SubGrad)(M, X, p)\n X .= [\n 4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),\n -2 * ϕ.a * (p[1]^2 - p[2]),\n ]\n riemannian_gradient!(M, X, p, X) # convert\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And in orer to update the subsolvers gradient correctly, we have to overwrite","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)\nset_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we again introduce for ease of use","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docR_g(M, p) = g(M, p; a=a, b=b)\ndocR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)\ndocR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)\ndocR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)\nfunction docR_grad_f!(M, X, p)\n Y = zero_vector(M, p)\n docR_grad_g!(M, X, p)\n docR_grad_h!(M, Y, p)\n X .-= Y\n return X\nend\ndocR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_doc_state = difference_of_convex_algorithm(\n M_rb, docR_f, docR_g, docR_grad_h!, p0;\n gradient=docR_grad_f!,\n grad_g = docR_grad_g!,\n debug=[debug_vec..., 10^6],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_grad=docR_sub_grad,\n sub_hess = nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 1235 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping Criterion\n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Stop = :Stop\n :All = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Comparison-in-Iterations","page":"Rosenbrock Metric","title":"Comparison in Iterations","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x)$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-16, 5*1e5),\n xaxis=:log,\n xlims=(1,10^8),\n)\nscatter!(fig, [1,], [f(M,p0),], label=raw\"$f(p_0)$\", markercolor=grey)\negi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries\negc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries\nplot!(fig, egi, egc, color=teal, label=\"Euclidean GD\")\n#\nrgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries\nrgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries\nplot!(fig, rgi, rgc, color=indigo, label=\"Riemannian GD\")\n#\nedi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries\nedc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries\nplot!(fig, edi, edc, color=sand, label=\"Euclidean DoC\")\n#\nrdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries\nrdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries\nplot!(fig, rdi, rdc, color=green, label=\"Riemannian DoC\")","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Literature","page":"Rosenbrock Metric","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\n","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/Changelog.md\"","category":"page"},{"location":"changelog/#Changelog","page":"Changelog","title":"Changelog","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"All notable changes to this Julia package will be documented in this file.","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.","category":"page"},{"location":"changelog/#[0.1.3]-–-11/12/2023","page":"Changelog","title":"[0.1.3] – 11/12/2023","text":"","category":"section"},{"location":"changelog/#Added","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Total variation Minimization cost, proxes, and an example\nBézier curve cost, gradients, and an example.","category":"page"},{"location":"changelog/#[0.1.3]-–-16/09/2023","page":"Changelog","title":"[0.1.3] – 16/09/2023","text":"","category":"section"},{"location":"changelog/#Added-2","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rayleigh Quotient functions added\nan example illustrating Euclidean gradient/HEssian conversion\nAdd Literature with DocumenterCitations","category":"page"},{"location":"changelog/#[0.1.2]-–-13/06/2023","page":"Changelog","title":"[0.1.2] – 13/06/2023","text":"","category":"section"},{"location":"changelog/#Added-3","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Update examples to use Quarto\nAdd DC examples","category":"page"},{"location":"changelog/#[0.1.1]-–-01/03/2023","page":"Changelog","title":"[0.1.1] – 01/03/2023","text":"","category":"section"},{"location":"changelog/#Added-4","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rosenbrock function and examples","category":"page"},{"location":"changelog/#[0.1.0]-–-18/02/2023","page":"Changelog","title":"[0.1.0] – 18/02/2023","text":"","category":"section"},{"location":"changelog/#Added-5","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested\nSetup Documentation to provide one example Quarto file for every example objective to illustrate how to use them","category":"page"},{"location":"examples/Bezier-curves/#Minimizing-the-Acceleration-of-Bézier-Curves-on-the-Sphere","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using Manifolds, Manopt, ManoptExamples","category":"page"},{"location":"examples/Bezier-curves/#Introduction","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Introduction","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"function bezier(M::AbstractManifold, t, pts::NTuple)\n p = bezier(M, t, pts[1:(end - 1)])\n q = bezier(M, t, pts[2:end])\n return shortest_geodesic(M, p, q, t)\nend\nfunction bezier(M::AbstractManifold, t, pts::NTuple{2})\n return shortest_geodesic(M, pts[1], pts[2], t)\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using ManoptExamples:\n artificial_S2_composite_Bezier_curve,\n BezierSegment,\n de_Casteljau,\n get_Bezier_degrees,\n get_Bezier_inner_points,\n get_Bezier_junctions,\n get_Bezier_junction_tangent_vectors,\n get_Bezier_points,\n get_Bezier_segments,\n grad_L2_acceleration_Bezier,\n L2_acceleration_Bezier","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"This notebook reproduces the example form Section 5.2 in [BG18].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The following image illustrates how the de-Casteljau algorithm works for one segment.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: A Bezier segment and illustration of the de-Casteljau algorithm)","category":"page"},{"location":"examples/Bezier-curves/#Approximating-data-by-a-curve-with-minimal-accelartion","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Approximating data by a curve with minimal accelartion","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We first load our example data","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"M = Sphere(2)\nB = artificial_S2_composite_Bezier_curve()\ndata_points = get_Bezier_junctions(M, B)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The original curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We continue to recude the points, since we “know” sme points due to the C^1 property: the second to last control point of the first segment b_02, the joint junction point connecting both segments b_03=b_10 and the second control point b_11 of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We can use this reduced form as the variable to optimize and the one from the data as our initial point.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"pB = get_Bezier_points(M, B, :differentiable)\nN = PowerManifold(M, NestedPowerRepresentation(), length(pB))","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the λ=10","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient\nλ = 10.0\nfunction f(M, pB)\n return L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend\nfunction grad_f(M, pB)\n return grad_L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"grad_f (generic function with 1 method)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Then we can optimize","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"x0 = pB\npB_opt = gradient_descent(\n N,\n f,\n grad_f,\n x0;\n stepsize=ArmijoLinesearch(N;\n initial_stepsize=1.0,\n retraction_method=ExponentialRetraction(),\n contraction_factor=0.5,\n sufficient_decrease=0.001,\n ),\n stopping_criterion=StopWhenChangeLess(1e-5) |\n StopWhenGradientNormLess(1e-7) |\n StopAfterIteration(300),\n debug=[\n :Iteration,\n \" | \",\n :Cost,\n \" | \",\n DebugGradientNorm(),\n \" | \",\n DebugStepsize(),\n \" | \",\n :Change,\n \"\\n\",\n 25,\n :Stop,\n ],\n);","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Initial | f(x): 10.647244 | | | \n# 25 | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281\n# 50 | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780\n# 75 | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590\n# 100 | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745\nThe algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we can again look at the result","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The result looks as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The resulting curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\n","category":"page"},{"location":"data/#Data-sets","page":"Data","title":"Data sets","text":"","category":"section"},{"location":"data/#Signals-on-manifolds","page":"Data","title":"Signals on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_signals.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.Lemniscate-Tuple{Number}","page":"Data","title":"ManoptExamples.Lemniscate","text":"Lemniscate(t::Float; kwargs...)\nLemniscate(n::integer; interval=[0.0, 2π], kwargs...)\n\ngenerate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.\n\nTo be precise on the manifold M we use the tangent space at p and generate the curve\n\nγ(t) fracasin^2(t) + 1 beginpmatrix cos(t) cos(t)sin(t) endpmatrix\n\nin the plane spanned by X and Y in the tangent space. Note that this curve is 2π-periodic and a is the half-width of the curve.\n\nTo reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.\n\nTHe second variant generates n points equispaced in ìnterval` and calls the first variant.\n\nKeywords\n\nmanifold - (Sphere(2)) the manifold to build the lemniscate on\np - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate\na – (π/2.0) half-width of the Lemniscate\nX – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.\nY – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_signal","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal([pts=500])\n\ngenerate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to ``[BLSW14].\n\nOptional\n\npts: (500) number of points to sample the function\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S1_signal-Tuple{Real}","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal(x)\n\nevaluate the example signal f(x) x 01, of phase-valued data introduces in Sec. 5.1 of [BLSW14] for values outside that interval, this Signal is missing.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_slope_signal","page":"Data","title":"ManoptExamples.artificial_S1_slope_signal","text":"artificial_S1_slope_signal([pts=500, slope=4.])\n\nCreates a Signal of (phase-valued) data represented on the Circle with increasing slope.\n\nOptional\n\npts: (500) number of points to sample the function.\nslope: (4.0) initial slope that gets increased afterwards\n\nThis data set was introduced for the numerical examples in [BLSW14]\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_composite_Bezier_curve-Tuple{}","page":"Data","title":"ManoptExamples.artificial_S2_composite_Bezier_curve","text":"artificial_S2_composite_Bezier_curve()\n\nGenerate a composite Bézier curve on the [BG18].\n\nIt consists of 4 egments connecting the points\n\nmathbf d_0 = beginpmatrix 001endpmatrixquad\nmathbf d_1 = beginpmatrix 0-10endpmatrixquad\nmathbf d_2 = beginpmatrix -100endpmatrixtext and \nmathbf d_3 = beginpmatrix 00-1endpmatrix\n\nwhere instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be C^1.\n\nWe define\n\nX_0 = fracπ8sqrt2beginpmatrix1-10endpmatrixquad\nX_1 = fracπ4sqrt2beginpmatrix101endpmatrixquad\nX_2 = fracπ4sqrt2beginpmatrix01-1endpmatrixtext and \nX_3 = fracπ8sqrt2beginpmatrix-110endpmatrix\n\nwhere we defined each X_i in T_d_imathbb S^2. We defined three BezierSegments\n\nof cubic Bézier curves as follows\n\nbeginalign*\nb_00 = d_0 quad b_10 = exp_d_0X_0 quad b_20 = exp_d_1X_1 quad b_30 = d_1\nb_01 = d_1 quad b_11 = exp_d_1(-X_1) quad b_21 = exp_d_2X_2 quad b_31 = d_2\nb_02 = d_2 quad b_11 = exp_d_2(-X_2) quad b_22 = exp_d_3X_3 quad b_32 = d_3\nendalign*\n\n\n\n\n\n","category":"method"},{"location":"data/#images-on-manifolds","page":"Data","title":"images on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_images.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.artificialIn_SAR_image-Tuple{Integer}","page":"Data","title":"ManoptExamples.artificialIn_SAR_image","text":"artificialIn_SAR_image([pts=500])\n\ngenerate an artificial InSAR image, i.e. phase valued data, of size pts x pts points.\n\nThis data set was introduced for the numerical examples in [BLSW14].\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S2_rotation_image","page":"Data","title":"ManoptExamples.artificial_S2_rotation_image","text":"artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])\n\nCreate an image with a rotation on each axis as a parametrization.\n\nOptional Parameters\n\npts: (64) number of pixels along one dimension\nrotations: ((.5,.5)) number of total rotations performed on the axes.\n\nThis dataset was used in the numerical example of Section 5.1 of [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_image","page":"Data","title":"ManoptExamples.artificial_S2_whirl_image","text":"artificial_S2_whirl_image([pts::Int=64])\n\nGenerate an artificial image of data on the 2 sphere,\n\nArguments\n\npts: (64) size of the image in pts×pts pixel.\n\nThis example dataset was used in the numerical example in Section 5.5 of [LNPS17]\n\nIt is based on artificial_S2_rotation_image extended by small whirl patches.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_patch","page":"Data","title":"ManoptExamples.artificial_S2_whirl_patch","text":"artificial_S2_whirl_patch([pts=5])\n\ncreate a whirl within the pts×pts patch of Sphere(@ref)(2)-valued image data.\n\nThese patches are used within artificial_S2_whirl_image.\n\nOptional Parameters\n\npts: (5) size of the patch. If the number is odd, the center is the north pole.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image","page":"Data","title":"ManoptExamples.artificial_SPD_image","text":"artificial_SPD_image([pts=64, stepsize=1.5])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.\n\nThis dataset was used in the numerical example of Section 5.2 of [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image2","page":"Data","title":"ManoptExamples.artificial_SPD_image2","text":"artificial_SPD_image2([pts=64, fraction=.66])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.\n\nThis data set was introduced in the numerical examples of Section of [BPS16]\n\n\n\n\n\n","category":"function"},{"location":"data/#Literature","page":"Data","title":"Literature","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\n","category":"page"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny BergmannLaura Weigl 2023-07-02","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139397\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.430690947905521","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412961981726742","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Total-Variation/#Total-Variation-Minimization","page":"Total Variation","title":"Total Variation Minimization","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Total-Variation/#Introduction","page":"Total Variation","title":"Introduction","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.","category":"page"},{"location":"examples/Total-Variation/#The-manifold-valued-ROF-model","page":"Total Variation","title":"The manifold-valued ROF model","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold s = (s_i)_i=1^N in mathbb M^n of length n in mathbb N, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term D(ps) to “stay close to” s and a regularizer R(p). For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"operatorname*argmin_pinmathcal M^n\nf(p)\nqquad\nf(p) = D(ps) + α R(p) = sum_i=1^n d_mathcal M^2(s_ip_i) + αsum_i=1^n-1 d_mathcal M(p_ip_i+1)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"where α 0 is a weight parameter.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost f(p) to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any p_i=p_i+1. So we have to use another technique.","category":"page"},{"location":"examples/Total-Variation/#The-Cyclic-Proximal-Point-algorithm","page":"Total Variation","title":"The Cyclic Proximal Point algorithm","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the Cyclic Proximal Point Algorithm [Bac14].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.","category":"page"},{"location":"examples/Total-Variation/#The-Optimsation","page":"Total Variation","title":"The Optimsation","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Manifolds, Manopt, ManoptExamples, ManifoldDiff\nusing ManifoldDiff: prox_distance\nusing ManoptExamples: prox_Total_Variation\nn = 500 #Signal length\nσ = 0.2 # amount of noise\nα = 0.5# in the TV model","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We define a few colors","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Colors, NamedColors, ColorSchemes, Plots, Random\ndata_color = RGBA{Float64}(colorant\"black\")\nlight_color = RGBA{Float64}(colorant\"brightgrey\")\nrecon_color = RGBA{Float64}(colorant\"vibrantorange\")\nnoisy_color = RGBA{Float64}(colorant\"vibrantteal\")","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Random.seed!(23)\nM = Circle()\nN = PowerManifold(M, n)\ndata = ManoptExamples.artificial_S1_signal(n)\ns = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]\nt = range(0.0, 1.0; length=n)\nscene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=noisy_color,\n markerstrokecolor=noisy_color,\n lab=\"noisy\",\n)\nyticks!(\n [-π, -π / 2, 0, π / 2, π],\n [raw\"$-\\pi$\", raw\"$-\\frac{\\pi}{2}$\", raw\"$0$\", raw\"$\\frac{\\pi}{2}$\", raw\"$\\pi$\"],\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Defining cost and the proximal maps, which are actually 3 proxes to be precise.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)\nproxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_Total_Variation(N, α * λ, p))","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We run the algorithm","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"o = cyclic_proximal_point(\n N,\n f,\n proxes_f,\n s;\n λ=i -> π / (2 * i),\n debug=[\n :Iteration,\n \" | \",\n DebugProximalParameter(),\n \" | \",\n :Cost,\n \" | \",\n :Change,\n \"\\n\",\n 1000,\n :Stop,\n ],\n record=[:Iteration, :Cost, :Change, :Iterate],\n return_state=true,\n);","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Initial | | f(x): 59.187445 | \n# 1000 | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283\n# 2000 | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678\n# 3000 | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907\n# 4000 | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957\n# 5000 | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175\nThe algorithm reached its maximal number of iterations (5000).","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can see that the cost reduces nicely. Let’s extract the result an the recorded values","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"recon = get_solver_result(o)\nrecord = get_record(o)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We get","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"scene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=light_color,\n markerstrokecolor=light_color,\n lab=\"noisy\",\n)\nscatter!(\n scene,\n t,\n recon;\n markersize=2,\n markercolor=recon_color,\n markerstrokecolor=recon_color,\n lab=\"reconstruction\",\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”","category":"page"},{"location":"examples/Total-Variation/#Outlook","page":"Total Variation","title":"Outlook","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the operatornameTV_2 yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Another extension for both first and second order TV is to apply this for manifold-valued images S = (S_ij)_ij=1^mn in mathcal M^mn, where the distances in the regularizer are then used in both the first dimension i and the second dimension j in the data.","category":"page"},{"location":"examples/Total-Variation/#Technical-details","page":"Total Variation","title":"Technical details","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This version of the example was generated with the following package versions.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Pkg.status()","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`\n [6e4b80f9] BenchmarkTools v1.4.0\n [35d6a980] ColorSchemes v3.24.0\n [5ae59095] Colors v0.12.10\n [7073ff75] IJulia v1.24.2\n [8ac3fa9e] LRUCache v1.6.1\n [af67fdf4] ManifoldDiff v0.3.10\n [1cead3c2] Manifolds v0.9.14\n [3362f125] ManifoldsBase v0.15.7\n [0fc0a36d] Manopt v0.4.53\n [5b8d5e80] ManoptExamples v0.1.5 `..`\n [51fcb6bd] NamedColors v0.2.2\n [91a5bcdd] Plots v1.40.1","category":"page"},{"location":"examples/Total-Variation/#Literature","page":"Total Variation","title":"Literature","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 2023-01-03","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field=ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 26 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector transport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |grad f| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"1.4404666436813376e-18","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 2023-07-02","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get started: optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get started: optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do in-place-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393613136017\n 0.006531541407458413\n 0.7267799052788726","category":"page"},{"location":"examples/RayleighQuotient/#The-Rayleigh-Quotient","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Ronny Bergmann 2024-03-09","category":"page"},{"location":"examples/RayleighQuotient/#Introduction","page":"The Rayleigh Quotient","title":"Introduction","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For a symmetric matrix A in mathbb R^ntimes n we consider the 📖 Rayleigh Quotient","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"operatorname*argmin_x in mathbb R^n backslash 0\nfracx^mathrmTAxlVert x rVert^2","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"On the sphere we can omit the denominator and obtain","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f(p) = p^mathrmTApqquad p 𝕊^n-1","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"which by itself we can again continue in the embedding as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"tilde f(x) = x^mathrmTAxqquad x in mathbb R^n","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This cost has the nice feature that at the minimizer p^*inmathbb S^n-1 the function falue f(p^*) is the smalles eigenvalue of A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For the embedded function tilde f the gradient and Hessian can be computed with classical methods as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\ntilde f(x) = 2Ax qquad x ℝ^n\n\n^2tilde f(x)V = 2AV qquad x V ℝ^n\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold mathcal M = mathbb S^n-1 are given by","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\noperatornamegrad f(p) = 2Ap - 2(p^mathrmTAp)*pqquad p 𝕊^n-1\n\noperatornameHess f(p)X = 2AX - 2(p^mathrmTAX)p - 2(p^mathrmTAp)Xqquad p 𝕊^n-1 X in T_p𝕊^n-1\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first generate an example martrx A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random\nRandom.seed!(42)\nn = 500\nA = Symmetric(randn(n, n) / n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And the manifolds","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"M = Sphere(n-1)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Sphere(499, ℝ)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"E = get_embedding(M)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean(500; field=ℝ)","category":"page"},{"location":"examples/RayleighQuotient/#Setup-the-corresponding-functions","page":"The Rayleigh Quotient","title":"Setup the corresponding functions","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute f is called with M as their first argument and tilde f if called with E.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We instantiate","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f = ManoptExamples.RayleighQuotientCost(A)\ngrad_f = ManoptExamples.RayleighQuotientGrad!!(A)\nHess_f = ManoptExamples.RayleighQuotientHess!!(A)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"p0 = [1.0, zeros(n-1)...]\nX = zero_vector(M, p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"we can both call","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Y = grad_f(M, p0) # Allocates memory\ngrad_f(M, X, p0) # Computes in place of X and returns the result in X.\nnorm(M, p0, X-Y)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"0.0","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"λ = min(eigvals(A)...)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"-0.08967721009388108","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-on-gradient-information","page":"The Rayleigh Quotient","title":"A Solver based on gradient information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient nabla tilde f. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n return_state=true,\n)\nq1 = get_solver_result(s)\ns","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 50 f(x): -0.088415|grad f(p)|:0.004530500043902619\n# 100 f(x): -0.089097|grad f(p)|:0.004589417101266096\n# 150 f(x): -0.089530|grad f(p)|:0.0026028331895358247\n# 200 f(x): -0.089650|grad f(p)|:0.0012359084298719039\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping Criterion\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n [(:Iteration, \"# %-6d\"), (:Cost, \"f(x): %f\"), (:GradientNorm, \"|grad f(p)|:%s\"), \"\\n\", 50]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q2 = gradient_descent(M, f, grad_f, p0;\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n)\n#Test that both are the same\nisapprox(M, q1,q2)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 50 f(x): -0.088415|grad f(p)|:0.004530500043902567\n# 100 f(x): -0.089097|grad f(p)|:0.004589417101266063\n# 150 f(x): -0.089530|grad f(p)|:0.002602833189535808\n# 200 f(x): -0.089650|grad f(p)|:0.0012359084298719097\n\ntrue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We can also benchmark both","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 22 samples with 1 evaluation.\n Range (min … max): 229.160 ms … 245.938 ms ┊ GC (min … max): 3.34% … 3.21%\n Time (median): 231.621 ms ┊ GC (median): 3.36%\n Time (mean ± σ): 233.776 ms ± 4.944 ms ┊ GC (mean ± σ): 3.34% ± 0.07%\n\n ▁ █ ▁ \n ▆▆▆▁█▆▆▆█▆▁▁▁▁█▁▁▁▁▁▆▆▆▁▁▆▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▆▁▁▁▁▁▁▆▆ ▁\n 229 ms Histogram: frequency by time 246 ms <\n\n Memory estimate: 1.13 GiB, allocs estimate: 3613.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 163 samples with 1 evaluation.\n Range (min … max): 30.021 ms … 37.070 ms ┊ GC (min … max): 0.00% … 3.43%\n Time (median): 30.398 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 30.734 ms ± 938.400 μs ┊ GC (mean ± σ): 0.60% ± 1.01%\n\n ▂▁█ ▂ \n ▃▆█████▆▄▁▁▂▁▁▃▂▃▅▄▇▄▄▃▂▁▁▁▁▁▁▁▁▂▁▁▁▁▂▁▁▂▁▁▁▁▁▁▁▁▂▁▂▁▁▁▁▁▁▁▂ ▂\n 30 ms Histogram: frequency by time 34 ms <\n\n Memory estimate: 11.38 MiB, allocs estimate: 3006.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From these results we see, that the conversion from the Euclidean to the Riemannian gradient does require a small amount of effort and hence reduces the performance slighly. Still, if the Euclidean Gradient is easier to compute or already available, this is in terms of coding the faster way. Finally this is a tradeoff between derivation and implementation efforts for the Riemannian gradient and a slight performance reduction when using the Euclidean one.","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-(also)-on-(approximate)-Hessian-information","page":"The Rayleigh Quotient","title":"A Solver based (also) on (approximate) Hessian information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To also involve the Hessian, we consider the trust regions solver with three cases:","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean, approximating the Hessian\nEuclidean, providing the Hessian\nRiemannian, providing the Hessian but also using in-place evaluations.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.088106|grad f(p)|:0.01903913659588686\n# 20 f(x): -0.089023|grad f(p)|:0.007792334296299116\n# 30 f(x): -0.089501|grad f(p)|:0.008034300330026467\n# 40 f(x): -0.089842|grad f(p)|:0.008125526728200166\n# 50 f(x): -0.089890|grad f(p)|:0.0031244752821335416\n# 60 f(x): -0.089925|grad f(p)|:0.0029682862637714163\n# 70 f(x): -0.089962|grad f(p)|:0.002811722437216778\n# 80 f(x): -0.089997|grad f(p)|:0.0026658493010157363\n# 90 f(x): -0.090032|grad f(p)|:0.0025418974797659266\n# 100 f(x): -0.090067|grad f(p)|:0.0024485809550738955\n# 110 f(x): -0.090108|grad f(p)|:0.0023894008071780747\n# 120 f(x): -0.090155|grad f(p)|:0.002362317662908117\n# 130 f(x): -0.090208|grad f(p)|:0.0023611301647631484\n# 140 f(x): -0.090262|grad f(p)|:0.00237797866404072\n# 150 f(x): -0.090314|grad f(p)|:0.002405563029627607\n# 160 f(x): -0.090362|grad f(p)|:0.002438250821406204\n# 170 f(x): -0.090404|grad f(p)|:0.002472221074327323\n# 180 f(x): -0.090441|grad f(p)|:0.0025051377726827166\n# 190 f(x): -0.090472|grad f(p)|:0.002535721310831389\n# 200 f(x): -0.090498|grad f(p)|:0.0025633813700434637\n# 210 f(x): -0.090513|grad f(p)|:0.0025832821804127513\n# 220 f(x): -0.090513|grad f(p)|:0.0025832821804127513\n# 230 f(x): -0.090513|grad f(p)|:0.0025832821792817493\n# 240 f(x): -0.090513|grad f(p)|:0.0025832821770197098\n# 250 f(x): -0.090513|grad f(p)|:0.0025832821747576924\n# 260 f(x): -0.090513|grad f(p)|:0.002583282172495683\n# 270 f(x): -0.090513|grad f(p)|:0.0025832821702336567\n# 280 f(x): -0.090513|grad f(p)|:0.002583282167971658\n# 290 f(x): -0.090513|grad f(p)|:0.002583282165709656\n# 300 f(x): -0.090513|grad f(p)|:0.002583282163447637\n# 310 f(x): -0.090513|grad f(p)|:0.0025832821611855928\n# 320 f(x): -0.090513|grad f(p)|:0.0025832821589235814\n# 330 f(x): -0.090513|grad f(p)|:0.002583282156661572\n# 340 f(x): -0.090513|grad f(p)|:0.0025832821543995727\n# 350 f(x): -0.090513|grad f(p)|:0.002583282152137569\n# 360 f(x): -0.090513|grad f(p)|:0.0025832821498755487\n# 370 f(x): -0.090513|grad f(p)|:0.0025832821476135036\n# 380 f(x): -0.090513|grad f(p)|:0.0025832821453515035\n# 390 f(x): -0.090513|grad f(p)|:0.0025832821430894675\n# 400 f(x): -0.090513|grad f(p)|:0.0025832821408274405\n# 410 f(x): -0.090513|grad f(p)|:0.002583282138565445\n# 420 f(x): -0.090513|grad f(p)|:0.002583282136303441\n# 430 f(x): -0.090513|grad f(p)|:0.00258328213404143\n# 440 f(x): -0.090513|grad f(p)|:0.002583282131779385\n# 450 f(x): -0.090513|grad f(p)|:0.0025832821295174104\n# 460 f(x): -0.090513|grad f(p)|:0.002583282127255372\n# 470 f(x): -0.090513|grad f(p)|:0.002583282124993372\n# 480 f(x): -0.090513|grad f(p)|:0.0025832821227313313\n# 490 f(x): -0.090513|grad f(p)|:0.0025832821204693065\n# 500 f(x): -0.090513|grad f(p)|:0.002583282118207321\n# 510 f(x): -0.090513|grad f(p)|:0.0025832821159453034\n# 520 f(x): -0.090513|grad f(p)|:0.0025832821136832665\n# 530 f(x): -0.090513|grad f(p)|:0.0025832821114212673\n# 540 f(x): -0.090513|grad f(p)|:0.002583282109159243\n# 550 f(x): -0.090513|grad f(p)|:0.002583282106897217\n# 560 f(x): -0.090513|grad f(p)|:0.002583282104635213\n# 570 f(x): -0.090513|grad f(p)|:0.0025832821023731955\n# 580 f(x): -0.090513|grad f(p)|:0.0025832821001112094\n# 590 f(x): -0.090513|grad f(p)|:0.002583282097849167\n# 600 f(x): -0.090513|grad f(p)|:0.0025832820955871503\n# 610 f(x): -0.090513|grad f(p)|:0.0025832820933251325\n# 620 f(x): -0.090513|grad f(p)|:0.002583282091063122\n# 630 f(x): -0.090513|grad f(p)|:0.0025832820888010873\n# 640 f(x): -0.090513|grad f(p)|:0.0025832820865390785\n# 650 f(x): -0.090513|grad f(p)|:0.0025832820842770442\n# 660 f(x): -0.090513|grad f(p)|:0.0025832820820150576\n# 670 f(x): -0.090513|grad f(p)|:0.0025832820797530767\n# 680 f(x): -0.090513|grad f(p)|:0.0025832820774910523\n# 690 f(x): -0.090513|grad f(p)|:0.0025832820752290362\n# 700 f(x): -0.090513|grad f(p)|:0.002583282072966992\n# 710 f(x): -0.090513|grad f(p)|:0.002583282070704973\n# 720 f(x): -0.090513|grad f(p)|:0.0025832820684429532\n# 730 f(x): -0.090513|grad f(p)|:0.002583282066180946\n# 740 f(x): -0.090513|grad f(p)|:0.0025832820639189306\n# 750 f(x): -0.090513|grad f(p)|:0.0025832820616569214\n# 760 f(x): -0.090513|grad f(p)|:0.00258328205939488\n# 770 f(x): -0.090513|grad f(p)|:0.002583282057132884\n# 780 f(x): -0.090513|grad f(p)|:0.0025832820548708406\n# 790 f(x): -0.090513|grad f(p)|:0.002583282052608873\n# 800 f(x): -0.090513|grad f(p)|:0.002583282050346837\n# 810 f(x): -0.090513|grad f(p)|:0.0025832820480848214\n# 820 f(x): -0.090513|grad f(p)|:0.0025832820458228205\n# 830 f(x): -0.090513|grad f(p)|:0.0025832820435608087\n# 840 f(x): -0.090513|grad f(p)|:0.0025832820412987944\n# 850 f(x): -0.090513|grad f(p)|:0.0025832820390367726\n# 860 f(x): -0.090513|grad f(p)|:0.002583282036774768\n# 870 f(x): -0.090513|grad f(p)|:0.002583282034512706\n# 880 f(x): -0.090513|grad f(p)|:0.002583282032250709\n# 890 f(x): -0.090513|grad f(p)|:0.0025832820299886896\n# 900 f(x): -0.090513|grad f(p)|:0.002583282027726701\n# 910 f(x): -0.090513|grad f(p)|:0.002583282025464682\n# 920 f(x): -0.090513|grad f(p)|:0.0025832820232026517\n# 930 f(x): -0.090513|grad f(p)|:0.002583282020940619\n# 940 f(x): -0.090513|grad f(p)|:0.0025832820186786334\n# 950 f(x): -0.090513|grad f(p)|:0.002583282016416595\n# 960 f(x): -0.090513|grad f(p)|:0.0025832820141545986\n# 970 f(x): -0.090513|grad f(p)|:0.0025832820118925717\n# 980 f(x): -0.090513|grad f(p)|:0.0025832820096305525\n# 990 f(x): -0.090513|grad f(p)|:0.002583282007368543\n# 1000 f(x): -0.090513|grad f(p)|:0.0025832820051065217","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.089673|grad f(p)|:0.0033633987039373655","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;\n evaluation=InplaceEvaluation(),\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.089673|grad f(p)|:0.00336339870393737","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $p0;\n objective_type=:Euclidean,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 10 samples with 1 evaluation.\n Range (min … max): 524.011 ms … 580.548 ms ┊ GC (min … max): 3.08% … 2.83%\n Time (median): 528.580 ms ┊ GC (median): 3.09%\n Time (mean ± σ): 534.851 ms ± 16.889 ms ┊ GC (mean ± σ): 3.03% ± 0.08%\n\n █▁ ▁▁▁ ▁ ▁ ▁ ▁ \n ██▁███▁▁▁▁█▁▁█▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 524 ms Histogram: frequency by time 581 ms <\n\n Memory estimate: 1.97 GiB, allocs estimate: 60518.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n objective_type=:Euclidean\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 318 samples with 1 evaluation.\n Range (min … max): 13.355 ms … 24.112 ms ┊ GC (min … max): 0.00% … 2.28%\n Time (median): 15.604 ms ┊ GC (median): 3.27%\n Time (mean ± σ): 15.739 ms ± 1.344 ms ┊ GC (mean ± σ): 4.22% ± 3.12%\n\n ▃▆▃ ▄█ \n ▆▅▁▁▁▁▁▁▄▇▆▆███▅▄▄██▇▃▂▂▆▇▅▃▁▄▆▆▄▂▂▁▁▅▄▃▂▂▁▁▂▂▁▂▂▂▁▁▁▁▁▁▁▁▂ ▃\n 13.4 ms Histogram: frequency by time 20.5 ms <\n\n Memory estimate: 37.53 MiB, allocs estimate: 4527.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 539 samples with 1 evaluation.\n Range (min … max): 8.857 ms … 15.185 ms ┊ GC (min … max): 0.00% … 4.68%\n Time (median): 9.021 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 9.276 ms ± 572.408 μs ┊ GC (mean ± σ): 1.70% ± 2.78%\n\n ▄█▇▅▁ \n ▅██████▅▆▄▃▂▁▁▃▁▂▁▂▂▁▁▂▁▂▃▃▄▄▅▅▆▃▃▄▃▃▃▃▂▃▂▂▂▂▁▁▁▁▂▁▂▂▁▁▁▁▂▂ ▃\n 8.86 ms Histogram: frequency by time 10.7 ms <\n\n Memory estimate: 10.86 MiB, allocs estimate: 4506.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q1, q) for q ∈ [q2,q3] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 4.471485799821605e-15\n 0.048047538209352994","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q3, q) for q ∈ [q4,q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 0.08269488012454579\n 0.08269488012454579","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Which we can also see in the final cost, comparing it to the Eigenvalue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"5-element Vector{Float64}:\n 2.76900562450888e-5\n 2.769005624428389e-5\n -0.000836208332542443\n 3.191891195797325e-16\n 3.191891195797325e-16","category":"page"},{"location":"examples/RayleighQuotient/#Summary","page":"The Rayleigh Quotient","title":"Summary","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.","category":"page"},{"location":"examples/RayleighQuotient/#Literature","page":"The Rayleigh Quotient","title":"Literature","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"N. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\n","category":"page"},{"location":"helpers/error_measures/#Error-measures","page":"Error measures","title":"Error measures","text":"","category":"section"},{"location":"helpers/error_measures/","page":"Error measures","title":"Error measures","text":"Modules = [ManoptExamples]\nPages = [\"ErrorMeasures.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"helpers/error_measures/#ManoptExamples.mean_average_error-Tuple{ManifoldsBase.AbstractManifold, Any, Any}","page":"Error measures","title":"ManoptExamples.mean_average_error","text":"mean_average_error(M,x,y)\n\nCompute the (mean) squared error between the two points x and y on the PowerManifold manifold M.\n\n\n\n\n\n","category":"method"},{"location":"helpers/error_measures/#ManoptExamples.mean_squared_error-Union{Tuple{mT}, Tuple{mT, Any, Any}} where mT<:ManifoldsBase.AbstractManifold","page":"Error measures","title":"ManoptExamples.mean_squared_error","text":"mean_squared_error(M, p, q)\n\nCompute the (mean) squared error between the two points p and q on the (power) manifold M.\n\n\n\n\n\n","category":"method"},{"location":"#Welcome-to-ManoptExample.jl","page":"Home","title":"Welcome to ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"ManoptExamples.ManoptExamples","category":"page"},{"location":"#ManoptExamples.ManoptExamples","page":"Home","title":"ManoptExamples.ManoptExamples","text":"🏔️⛷️ ManoptExamples.jl – A collection of research and tutorial example problems for Manopt.jl\n\n📚 Documentation: juliamanifolds.github.io/ManoptExamples.jl\n📦 Repository: github.com/JuliaManifolds/ManoptExamples.jl\n💬 Discussions: github.com/JuliaManifolds/ManoptExamples.jl/discussions\n🎯 Issues: github.com/JuliaManifolds/ManoptExamples.jl/issues\n\n\n\n\n\n","category":"module"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/v0.1.5/siteinfo.js b/v0.1.5/siteinfo.js new file mode 100644 index 0000000..059e549 --- /dev/null +++ b/v0.1.5/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.5"; diff --git a/v0.1.6/.documenter-siteinfo.json b/v0.1.6/.documenter-siteinfo.json new file mode 100644 index 0000000..d2b88c3 --- /dev/null +++ b/v0.1.6/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.2","generation_timestamp":"2024-03-22T11:28:25","documenter_version":"1.3.0"}} \ No newline at end of file diff --git a/v0.1.6/assets/documenter.js b/v0.1.6/assets/documenter.js new file mode 100644 index 0000000..c6562b5 --- /dev/null +++ b/v0.1.6/assets/documenter.js @@ -0,0 +1,1050 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let timer = 0; +var isExpanded = true; + +$(document).on("click", ".docstring header", function () { + let articleToggleTitle = "Expand docstring"; + + debounce(() => { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function (event) { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + let animationSpeed = event.noToggleAnimation ? 0 : 400; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(animationSpeed); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(animationSpeed); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let meta = $("div[data-docstringscollapsed]").data(); + + if (meta?.docstringscollapsed) { + $("#documenter-article-toggle-button").trigger({ + type: "click", + noToggleAnimation: true, + }); + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +/* +To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +PSEUDOCODE: + +Searching happens automatically as the user types or adjusts the selected filters. +To preserve responsiveness, as much as possible of the slow parts of the search are done +in a web worker. Searching and result generation are done in the worker, and filtering and +DOM updates are done in the main thread. The filters are in the main thread as they should +be very quick to apply. This lets filters be changed without re-searching with minisearch +(which is possible even if filtering is on the worker thread) and also lets filters be +changed _while_ the worker is searching and without message passing (neither of which are +possible if filtering is on the worker thread) + +SEARCH WORKER: + +Import minisearch + +Build index + +On message from main thread + run search + find the first 200 unique results from each category, and compute their divs for display + note that this is necessary and sufficient information for the main thread to find the + first 200 unique results from any given filter set + post results to main thread + +MAIN: + +Launch worker + +Declare nonconstant globals (worker_is_running, last_search_text, unfiltered_results) + +On text update + if worker is not running, launch_search() + +launch_search + set worker_is_running to true, set last_search_text to the search text + post the search query to worker + +on message from worker + if last_search_text is not the same as the text in the search field, + the latest search result is not reflective of the latest search query, so update again + launch_search() + otherwise + set worker_is_running to false + + regardless, display the new search results to the user + save the unfiltered_results as a global + update_search() + +on filter click + adjust the filter selection + update_search() + +update_search + apply search filters by looping through the unfiltered_results and finding the first 200 + unique results that match the filters + + Update the DOM +*/ + +/////// SEARCH WORKER /////// + +function worker_function(documenterSearchIndex, documenterBaseURL, filters) { + importScripts( + "https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js" + ); + + let data = documenterSearchIndex.map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; + }); + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", + ]); + + let index = new MiniSearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + + word = word.toLowerCase(); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not + // find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + prefix: true, + boost: { title: 100 }, + fuzzy: 2, + }, + }); + + index.addAll(data); + + /** + * Used to map characters to HTML entities. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const htmlEscapes = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + }; + + /** + * Used to match HTML entities and HTML characters. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const reUnescapedHtml = /[&<>"']/g; + const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** + * Escape function from lodash + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + function escape(string) { + return string && reHasUnescapedHtml.test(string) + ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) + : string || ""; + } + + /** + * Make the result component given a minisearch result data object and the value + * of the search input as queryString. To view the result object structure, refer: + * https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ + function make_search_result(result, querystring) { + let search_divider = `
                      `; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + + let textindex = new RegExp(`${querystring}`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + text = text.length ? escape(text) : ""; + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`${escape(querystring)}`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
                      +
                      ${escape(result.title)}
                      +
                      ${result.category}
                      +
                      +

                      + ${display_result} +

                      +
                      + ${display_link} +
                      +
                      + ${search_divider} + `; + + return result_div; + } + + self.onmessage = function (e) { + let query = e.data; + let results = index.search(query, { + filter: (result) => { + // Only return relevant results + return result.score >= 1; + }, + }); + + // Pre-filter to deduplicate and limit to 200 per category to the extent + // possible without knowing what the filters are. + let filtered_results = []; + let counts = {}; + for (let filter of filters) { + counts[filter] = 0; + } + let present = {}; + + for (let result of results) { + cat = result.category; + cnt = counts[cat]; + if (cnt < 200) { + id = cat + "---" + result.location; + if (present[id]) { + continue; + } + present[id] = true; + filtered_results.push({ + location: result.location, + category: cat, + div: make_search_result(result, query), + }); + } + } + + postMessage(filtered_results); + }; +} + +// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! +const filters = [ + ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), +]; +const worker_str = + "(" + + worker_function.toString() + + ")(" + + JSON.stringify(documenterSearchIndex["docs"]) + + "," + + JSON.stringify(documenterBaseURL) + + "," + + JSON.stringify(filters) + + ")"; +const worker_blob = new Blob([worker_str], { type: "text/javascript" }); +const worker = new Worker(URL.createObjectURL(worker_blob)); + +/////// SEARCH MAIN /////// + +// Whether the worker is currently handling a search. This is a boolean +// as the worker only ever handles 1 or 0 searches at a time. +var worker_is_running = false; + +// The last search text that was sent to the worker. This is used to determine +// if the worker should be launched again when it reports back results. +var last_search_text = ""; + +// The results of the last search. This, in combination with the state of the filters +// in the DOM, is used compute the results to display on calls to update_search. +var unfiltered_results = []; + +// Which filter is currently selected +var selected_filter = ""; + +$(document).on("input", ".documenter-search-input", function (event) { + if (!worker_is_running) { + launch_search(); + } +}); + +function launch_search() { + worker_is_running = true; + last_search_text = $(".documenter-search-input").val(); + worker.postMessage(last_search_text); +} + +worker.onmessage = function (e) { + if (last_search_text !== $(".documenter-search-input").val()) { + launch_search(); + } else { + worker_is_running = false; + } + + unfiltered_results = e.data; + update_search(); +}; + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + selected_filter = ""; + } else { + selected_filter = $(this).text().toLowerCase(); + } + + // This updates search results and toggles classes for UI: + update_search(); +}); + +/** + * Make/Update the search component + */ +function update_search() { + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + if (selected_filter == "") { + results = unfiltered_results; + } else { + results = unfiltered_results.filter((result) => { + return selected_filter == result.category.toLowerCase(); + }); + } + + let search_result_container = ``; + let modal_filters = make_modal_body_filters(); + let search_divider = `
                      `; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + for (var i = 0, n = results.length; i < n && count < 200; ++i) { + let result = results[i]; + if (result.location && !links.includes(result.location)) { + search_results += result.div; + count++; + links.push(result.location); + } + } + + if (count == 1) { + count_str = "1 result"; + } else if (count == 200) { + count_str = "200+ results"; + } else { + count_str = count + " results"; + } + let result_count = `
                      ${count_str}
                      `; + + search_result_container = ` +
                      + ${modal_filters} + ${search_divider} + ${result_count} +
                      + ${search_results} +
                      +
                      + `; + } else { + search_result_container = ` +
                      + ${modal_filters} + ${search_divider} +
                      0 result(s)
                      +
                      +
                      No result found!
                      + `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(` +
                      Type something to get started!
                      + `); + } +} + +/** + * Make the modal filter html + * + * @returns string + */ +function make_modal_body_filters() { + let str = filters + .map((val) => { + if (selected_filter == val.toLowerCase()) { + return `${val}`; + } else { + return `${val}`; + } + }) + .join(""); + + return ` +
                      + Filters: + ${str} +
                      `; +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let search_modal_header = ` + + `; + + let initial_search_body = ` +
                      Type something to get started!
                      + `; + + let search_modal_footer = ` +
                      + + Ctrl + + / to search + + esc to close +
                      + `; + + $(document.body).append( + ` + + ` + ); + + document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); + }); + + document + .querySelector(".close-search-modal") + .addEventListener("click", () => { + closeModal(); + }); + + $(document).on("click", ".search-result-link", function () { + closeModal(); + }); + + document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; + }); + + // Functions to open and close a modal + function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); + } + + function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
                      Type something to get started!
                      + `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); + } + + document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "" + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "" + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/v0.1.6/assets/themes/documenter-dark.css b/v0.1.6/assets/themes/documenter-dark.css new file mode 100644 index 0000000..53889fb --- /dev/null +++ b/v0.1.6/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-info-light{color:#ebf7ff !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#b9e2fe !important}.has-background-info-light{background-color:#ebf7ff !important}.has-text-info-dark{color:#0e9dfb !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#40b1fc !important}.has-background-info-dark{background-color:#0e9dfb !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-success-light{color:#ebfff3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#b8ffd6 !important}.has-background-success-light{background-color:#ebfff3 !important}.has-text-success-dark{color:#00eb64 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#1fff7e !important}.has-background-success-dark{background-color:#00eb64 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-warning-light{color:#fffaeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#ffedb8 !important}.has-background-warning-light{background-color:#fffaeb !important}.has-text-warning-dark{color:#d19c00 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffbf05 !important}.has-background-warning-dark{background-color:#d19c00 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-danger-light{color:#fdeeec !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fac3bd !important}.has-background-danger-light{background-color:#fdeeec !important}.has-text-danger-dark{color:#ec311d !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f05c4c !important}.has-background-danger-dark{background-color:#ec311d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:#024c7d;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#def2fe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#d2edfe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:#008438;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#deffec;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#d1ffe5;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:#ad8100;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fff7de;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fff3d1;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#fce3e0;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#fcd8d5;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#ebf7ff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#0e9dfb}html.theme--documenter-dark .message.is-success{background-color:#ebfff3}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#00eb64}html.theme--documenter-dark .message.is-warning{background-color:#fffaeb}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#d19c00}html.theme--documenter-dark .message.is-danger{background-color:#fdeeec}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#ec311d}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#024c7d;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#024c7d}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#024c7d}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#008438;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#008438}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#008438}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#ad8100;color:#fff}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ad8100}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#ad8100}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#9e1b0d}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#9e1b0d}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#024c7d !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#008438 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#ad8100 !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#9e1b0d !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;overflow:auto}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/v0.1.6/assets/themes/documenter-light.css b/v0.1.6/assets/themes/documenter-light.css new file mode 100644 index 0000000..2f168c7 --- /dev/null +++ b/v0.1.6/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-info-light{color:#ecf7fe !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#bde2fa !important}.has-background-info-light{background-color:#ecf7fe !important}.has-text-info-dark{color:#0e72b4 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#1190e3 !important}.has-background-info-dark{background-color:#0e72b4 !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-success-light{color:#eefcf3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c2f4d4 !important}.has-background-success-light{background-color:#eefcf3 !important}.has-text-success-dark{color:#198f43 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#21bb57 !important}.has-background-success-dark{background-color:#198f43 !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#947600 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#c79f00 !important}.has-background-warning-dark{background-color:#947600 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-danger-light{color:#ffeceb !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#ffbbb8 !important}.has-background-danger-light{background-color:#ffeceb !important}.has-text-danger-dark{color:#f50c00 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#ff3429 !important}.has-background-danger-dark{background-color:#f50c00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:#209cee;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e0f1fd;border-color:transparent;color:#0e72b4}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#d4ecfc;border-color:transparent;color:#0e72b4}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:#22c35b;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#eefcf3;color:#198f43}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e3faeb;border-color:transparent;color:#198f43}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#d8f8e3;border-color:transparent;color:#198f43}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:#ffdd57;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:#da0b00;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#ffe0de;border-color:transparent;color:#f50c00}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#ffd3d1;border-color:transparent;color:#f50c00}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-success.is-light{background-color:#eefcf3;color:#198f43}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#da0b00;color:#fff}.notification.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ecf7fe;color:#0e72b4}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#eefcf3;color:#198f43}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#947600}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#ffeceb;color:#f50c00}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#ecf7fe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#0e72b4}.message.is-success{background-color:#eefcf3}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#198f43}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#ffeceb}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#f50c00}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#209cee;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#209cee}.panel.is-info .panel-block.is-active .panel-icon{color:#209cee}.panel.is-success .panel-heading{background-color:#22c35b;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#22c35b}.panel.is-success .panel-block.is-active .panel-icon{color:#22c35b}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#da0b00;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#da0b00}.panel.is-danger .panel-block.is-active .panel-icon{color:#da0b00}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#209cee !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#22c35b !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#ffdd57 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#da0b00 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;overflow:auto}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/v0.1.6/assets/themeswap.js b/v0.1.6/assets/themeswap.js new file mode 100644 index 0000000..9f5eebe --- /dev/null +++ b/v0.1.6/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/v0.1.6/assets/warner.js b/v0.1.6/assets/warner.js new file mode 100644 index 0000000..3f6f5d0 --- /dev/null +++ b/v0.1.6/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
                      Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/v0.1.6/changelog/index.html b/v0.1.6/changelog/index.html new file mode 100644 index 0000000..cf93b7c --- /dev/null +++ b/v0.1.6/changelog/index.html @@ -0,0 +1,2 @@ + +Changelog · ManoptExamples.jl

                      Changelog

                      All notable changes to this Julia package will be documented in this file.

                      The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

                      [0.1.6] – unreleased

                      Added

                      • Hyperparameter optimization example.

                      [0.1.3] – 11/12/2023

                      Added

                      • Total variation Minimization cost, proxes, and an example
                      • Bézier curve cost, gradients, and an example.

                      [0.1.3] – 16/09/2023

                      Added

                      • Rayleigh Quotient functions added
                      • an example illustrating Euclidean gradient/HEssian conversion
                      • Add Literature with DocumenterCitations

                      [0.1.2] – 13/06/2023

                      Added

                      • Update examples to use Quarto
                      • Add DC examples

                      [0.1.1] – 01/03/2023

                      Added

                      • Rosenbrock function and examples

                      [0.1.0] – 18/02/2023

                      Added

                      • Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested
                      • Setup Documentation to provide one example Quarto file for every example objective to illustrate how to use them.
                      diff --git a/v0.1.6/contributing/index.html b/v0.1.6/contributing/index.html new file mode 100644 index 0000000..184756a --- /dev/null +++ b/v0.1.6/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

                      Contributing to Manopt.jl

                      First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

                      The following is a set of guidelines to ManoptExamples.jl.

                      Table of Contents

                      I just have a question

                      The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

                      How can I file an issue?

                      If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

                      How can I contribute?

                      Add an objective

                      The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

                      If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

                      If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

                      • cost functions are always of the form cost_ and a fitting name
                      • gradient functions are always of the gradient_ and a fitting name, followed by an !

                      for in-place gradients and by !! if it is a struct that can provide both.

                      It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

                      Add an example

                      If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

                      Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

                      Code style

                      We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

                      We also follow a few internal conventions:

                      • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
                      • within a file the structs should come first and functions second. The only exception are constructors for the structs
                      • within both blocks an alphabetical order is preferable.
                      • The above implies that the mutating variant of a function follows the non-mutating variant.
                      • There should be no dangling = signs.
                      • Always add a newline between things of different types (struct/method/const).
                      • Always add a newline between methods for different functions (including in-place/non-mutating variants).
                      • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
                      • All import/using/include should be in the main module file.
                      • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
                      • the Quarto Markdown files are excluded from this formatting.
                      diff --git a/v0.1.6/data/index.html b/v0.1.6/data/index.html new file mode 100644 index 0000000..96618cc --- /dev/null +++ b/v0.1.6/data/index.html @@ -0,0 +1,13 @@ + +Data · ManoptExamples.jl

                      Data sets

                      Signals on manifolds

                      ManoptExamples.LemniscateMethod
                      Lemniscate(t::Float; kwargs...)
                      +Lemniscate(n::integer; interval=[0.0, 2π], kwargs...)

                      generate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.

                      To be precise on the manifold M we use the tangent space at p and generate the curve

                      \[γ(t) \frac{a}{}\sin^2(t) + 1 \begin{pmatrix} \cos(t) \\ \cos(t)\sin(t) \end{pmatrix}\]

                      in the plane spanned by X and Y in the tangent space. Note that this curve is $2π$-periodic and a is the half-width of the curve.

                      To reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.

                      THe second variant generates n points equispaced in ìnterval` and calls the first variant.

                      Keywords

                      • manifold - (Sphere(2)) the manifold to build the lemniscate on
                      • p - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate
                      • a – (π/2.0) half-width of the Lemniscate
                      • X – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.
                      • Y – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.
                      source
                      ManoptExamples.artificial_S1_signalFunction
                      artificial_S1_signal([pts=500])

                      generate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to ``[BLSW14].

                      Optional

                      • pts: (500) number of points to sample the function
                      source
                      ManoptExamples.artificial_S1_signalMethod
                      artificial_S1_signal(x)

                      evaluate the example signal $f(x), x ∈ [0,1]$, of phase-valued data introduces in Sec. 5.1 of [BLSW14] for values outside that interval, this Signal is missing.

                      source
                      ManoptExamples.artificial_S1_slope_signalFunction
                      artificial_S1_slope_signal([pts=500, slope=4.])

                      Creates a Signal of (phase-valued) data represented on the Circle with increasing slope.

                      Optional

                      • pts: (500) number of points to sample the function.
                      • slope: (4.0) initial slope that gets increased afterwards

                      This data set was introduced for the numerical examples in [BLSW14]

                      source
                      ManoptExamples.artificial_S2_composite_Bezier_curveMethod
                      artificial_S2_composite_Bezier_curve()

                      Generate a composite Bézier curve on the [BG18].

                      It consists of 4 egments connecting the points

                      \[\mathbf d_0 = \begin{pmatrix} 0\\0\\1\end{pmatrix},\quad +\mathbf d_1 = \begin{pmatrix} 0\\-1\\0\end{pmatrix},\quad +\mathbf d_2 = \begin{pmatrix} -1\\0\\0\end{pmatrix},\text{ and } +\mathbf d_3 = \begin{pmatrix} 0\\0\\-1\end{pmatrix}.\]

                      where instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be $C^1$.

                      We define

                      \[X_0 = \frac{π}{8\sqrt{2}}\begin{pmatrix}1\\-1\\0\end{pmatrix},\quad +X_1 = \frac{π}{4\sqrt{2}}\begin{pmatrix}1\\0\\1\end{pmatrix},\quad +X_2 = \frac{π}{4\sqrt{2}}\begin{pmatrix}0\\1\\-1\end{pmatrix},\text{ and } +X_3 = \frac{π}{8\sqrt{2}}\begin{pmatrix}-1\\1\\0\end{pmatrix},\]

                      where we defined each $X_i \in T_{d_i}\mathbb S^2$. We defined three BezierSegments

                      of cubic Bézier curves as follows

                      \[\begin{align*} +b_{0,0} &= d_0, \quad & b_{1,0} &= \exp_{d_0}X_0, \quad & b_{2,0} &= \exp_{d_1}X_1, \quad & b_{3,0} &= d_1\\ +b_{0,1} &= d_1, \quad & b_{1,1} &= \exp_{d_1}(-X_1), \quad & b_{2,1} &= \exp_{d_2}X_2, \quad & b_{3,1} &= d_2\\ +b_{0,2} &= d_2, \quad & b_{1,1} &= \exp_{d_2}(-X_2), \quad & b_{2,2} &= \exp_{d_3}X_3, \quad & b_{3,2} &= d_3. +\end{align*}\]

                      source

                      images on manifolds

                      ManoptExamples.artificial_S2_rotation_imageFunction
                      artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])

                      Create an image with a rotation on each axis as a parametrization.

                      Optional Parameters

                      • pts: (64) number of pixels along one dimension
                      • rotations: ((.5,.5)) number of total rotations performed on the axes.

                      This dataset was used in the numerical example of Section 5.1 of [BBSW16].

                      source
                      ManoptExamples.artificial_SPD_imageFunction
                      artificial_SPD_image([pts=64, stepsize=1.5])

                      create an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.

                      This dataset was used in the numerical example of Section 5.2 of [BBSW16].

                      source
                      ManoptExamples.artificial_SPD_image2Function
                      artificial_SPD_image2([pts=64, fraction=.66])

                      create an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.

                      This data set was introduced in the numerical examples of Section of [BPS16]

                      source

                      Literature

                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [BPS16]
                      R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
                      [LNPS17]
                      F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
                      diff --git a/v0.1.6/examples/Bezier-curves/index.html b/v0.1.6/examples/Bezier-curves/index.html new file mode 100644 index 0000000..50d0387 --- /dev/null +++ b/v0.1.6/examples/Bezier-curves/index.html @@ -0,0 +1,68 @@ + +Minimizing the Acceleration of Bézier Curves on the Sphere · ManoptExamples.jl

                      Minimizing the Acceleration of Bézier Curves on the Sphere

                      Ronny Bergmann 2023-06-06

                      using Manifolds, Manopt, ManoptExamples

                      Introduction

                      Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as

                      function bezier(M::AbstractManifold, t, pts::NTuple)
                      +    p = bezier(M, t, pts[1:(end - 1)])
                      +    q = bezier(M, t, pts[2:end])
                      +    return shortest_geodesic(M, p, q, t)
                      +end
                      +function bezier(M::AbstractManifold, t, pts::NTuple{2})
                      +    return shortest_geodesic(M, pts[1], pts[2], t)
                      +end

                      which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.

                      In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].

                      using ManoptExamples:
                      +    artificial_S2_composite_Bezier_curve,
                      +    BezierSegment,
                      +    de_Casteljau,
                      +    get_Bezier_degrees,
                      +    get_Bezier_inner_points,
                      +    get_Bezier_junctions,
                      +    get_Bezier_junction_tangent_vectors,
                      +    get_Bezier_points,
                      +    get_Bezier_segments,
                      +    grad_L2_acceleration_Bezier,
                      +    L2_acceleration_Bezier

                      This notebook reproduces the example form Section 5.2 in [BG18].

                      The following image illustrates how the de-Casteljau algorithm works for one segment.

                      A Bezier segment and illustration of the de-Casteljau algorithm

                      Approximating data by a curve with minimal accelartion

                      We first load our example data

                      M = Sphere(2)
                      +B = artificial_S2_composite_Bezier_curve()
                      +data_points = get_Bezier_junctions(M, B)

                      Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.

                      The original curve

                      We continue to recude the points, since we “know” sme points due to the $C^1$ property: the second to last control point of the first segment $b_{0,2}$, the joint junction point connecting both segments $b_{0,3}=b_{1,0}$ and the second control point $b_{1,1}$ of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.

                      We can use this reduced form as the variable to optimize and the one from the data as our initial point.

                      pB = get_Bezier_points(M, B, :differentiable)
                      +N = PowerManifold(M, NestedPowerRepresentation(), length(pB))
                      PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)

                      And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the $λ=10$

                      curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient
                      +λ = 10.0
                      +function f(M, pB)
                      +    return L2_acceleration_Bezier(
                      +        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
                      +    )
                      +end
                      +function grad_f(M, pB)
                      +    return grad_L2_acceleration_Bezier(
                      +        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
                      +    )
                      +end
                      grad_f (generic function with 1 method)

                      Then we can optimize

                      x0 = pB
                      +pB_opt = gradient_descent(
                      +    N,
                      +    f,
                      +    grad_f,
                      +    x0;
                      +    stepsize=ArmijoLinesearch(N;
                      +        initial_stepsize=1.0,
                      +        retraction_method=ExponentialRetraction(),
                      +        contraction_factor=0.5,
                      +        sufficient_decrease=0.001,
                      +    ),
                      +    stopping_criterion=StopWhenChangeLess(1e-5) |
                      +                       StopWhenGradientNormLess(1e-7) |
                      +                       StopAfterIteration(300),
                      +    debug=[
                      +        :Iteration,
                      +        " | ",
                      +        :Cost,
                      +        " | ",
                      +        DebugGradientNorm(),
                      +        " | ",
                      +        DebugStepsize(),
                      +        " | ",
                      +        :Change,
                      +        "\n",
                      +        25,
                      +        :Stop,
                      +    ],
                      +);
                      Initial  | f(x): 10.647244 |  |  | 
                      +# 25     | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281
                      +# 50     | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780
                      +# 75     | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590
                      +# 100    | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745
                      +The algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.

                      And we can again look at the result

                      The result looks as

                      The resulting curve

                      where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.

                      [ABBR23]
                      S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      diff --git a/v0.1.6/examples/Difference-of-Convex-Benchmark/index.html b/v0.1.6/examples/Difference-of-Convex-Benchmark/index.html new file mode 100644 index 0000000..bccb2a4 --- /dev/null +++ b/v0.1.6/examples/Difference-of-Convex-Benchmark/index.html @@ -0,0 +1,165 @@ + +A Benchmark · ManoptExamples.jl

                      Benchmark of the Difference of Convex Algorithms

                      Ronny Bergmann 2023-06-06

                      Introduction

                      In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.

                      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ \ g(p) - h(p)\]

                      where $g,h\colon \mathcal M \to \mathbb R$ are geodesically convex function on the Riemannian manifold $\mathcal M$.

                      using LinearAlgebra, Random, Statistics, BenchmarkTools
                      +using Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots
                      +Random.seed!(42)

                      and we load a few nice colors

                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +teal = paul_tol["mutedteal"]

                      The DC Problem

                      We start with defining the two convex functions $g,h$ and their gradients as well as the DC problem $f$ and its gradient for the problem

                      \[ \operatorname*{arg\,min}_{p\in\mathcal M}\ \ \bigl( \log\bigr(\det(p)\bigr)\bigr)^4 - \bigl(\log \det(p) \bigr)^2.\]

                      where the critical points obtain a functional value of $-\frac{1}{4}$.

                      where $\mathcal M$ is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.

                      We first define the corresponding functions

                      g(M, p) = log(det(p))^4
                      +h(M, p) = log(det(p))^2
                      +f(M, p) = g(M, p) - h(M, p)

                      and their gradients

                      grad_g(M, p) = 4 * (log(det(p)))^3 * p
                      +grad_h(M, p) = 2 * log(det(p)) * p
                      +grad_f(M, p) = grad_g(M, p) - grad_h(M, p)

                      which we can use to verify that the gradients of $g$ and $h$ are correct. We use for that

                      n = 6
                      +M = SymmetricPositiveDefinite(n)
                      +p0 = log(n) * Matrix{Float64}(I, n, n);
                      +X0 = 1 / n * Matrix{Float64}(I, n, n);

                      to tall both checks

                      check_gradient(M, g, grad_g, p0, X0; plot=true)

                      and

                      check_gradient(M, h, grad_h, p0, X0; plot=true)

                      which both pass the test. We continue to define their inplace variants

                      function grad_g!(M, X, p)
                      +    copyto!(M, X, p)
                      +    X .*= 4 * (log(det(p)))^3
                      +    return X
                      +end
                      +function grad_h!(M, X, p)
                      +    copyto!(M, X, p)
                      +    X .*= 2 * (log(det(p)))
                      +    return X
                      +end
                      +function grad_f!(M, X, p)
                      +    grad_g!(M, X, p)
                      +    Y = copy(M, p, X)
                      +    grad_h!(M, Y, p)
                      +    X .-= Y
                      +    return X
                      +end

                      And compare times for both algorithms, with a bit of debug output.

                      @time p_min_dca = difference_of_convex_algorithm(
                      +    M,
                      +    f,
                      +    g,
                      +    grad_h!,
                      +    p0;
                      +    grad_g=grad_g!,
                      +    gradient=grad_f!,
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[
                      +        :Iteration,
                      +        (:Cost, "f(p): %1.9f"),
                      +        (:GradientNorm, " |grad_f(p)|: %1.9f"),
                      +        (:Change, " |δp|: %1.9f"),
                      +        :Stop,
                      +        5,
                      +        "\n",
                      +    ],
                      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +);
                      Initial f(p): 137.679053470
                      +# 5     f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127
                      +# 10    f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103
                      +# 15    f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574
                      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011
                      +The algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.
                      +  3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)

                      The cost is

                      f(M, p_min_dca)
                      -0.25000000000000006

                      Similarly the DCPPA performs

                      @time p_min_dcppa = difference_of_convex_proximal_point(
                      +    M,
                      +    grad_h!,
                      +    p0;
                      +    g=g,
                      +    grad_g=grad_g!,
                      +    λ=i -> 1 / (2 * n),
                      +    cost=f,
                      +    gradient=grad_f!,
                      +    debug=[
                      +        :Iteration,
                      +        (:Cost, "f(p): %1.9f"),
                      +        " ",
                      +        (:GradientNorm, "|grad_f(p)|: %1.10f"),
                      +        (:Change, "|δp|: %1.10f"),
                      +        :Stop,
                      +        5,
                      +        "\n",
                      +    ],
                      +    evaluation=InplaceEvaluation(),
                      +    stepsize=ConstantStepsize(1.0),
                      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +);
                      Initial f(p): 137.679053470 
                      +# 5     f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692
                      +# 10    f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316
                      +# 15    f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676
                      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968
                      +# 25    f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530
                      +# 30    f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048
                      +# 35    f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001
                      +The algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.
                      +  1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)

                      It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost

                      f(M, p_min_dcppa)
                      -0.25

                      Benchmark I: Time comparison

                      We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test

                      dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()
                      +dcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()
                      +N_max=14
                      +N = 2:N_max

                      and run a benchmark for both algorithms

                      for n in N
                      +    Mn = SymmetricPositiveDefinite(n)
                      +    pn = log(n) * Matrix{Float64}(I, n, n)
                      +    bdca = @benchmark difference_of_convex_algorithm(
                      +        $Mn,
                      +        $f,
                      +        $g,
                      +        $grad_h!,
                      +        $pn;
                      +        grad_g=$grad_g!,
                      +        gradient=$grad_f!,
                      +        evaluation=InplaceEvaluation(),
                      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +    )
                      +    dca_benchmarks[n] = bdca
                      +    bdcppa = @benchmark difference_of_convex_proximal_point(
                      +        $Mn,
                      +        $grad_h!,
                      +        $pn;
                      +        g=$g,
                      +        grad_g=$grad_g!,
                      +        λ=i -> 1 / (2 * n),
                      +        cost=f,
                      +        gradient=grad_f!,
                      +        evaluation=InplaceEvaluation(),
                      +        stepsize=ConstantStepsize(1.0),
                      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +    )
                      +    dcppa_benchmarks[n] = bdcppa
                      +end

                      Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds

                      dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]
                      +dca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]
                      +dcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]
                      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Time (sec.)")
                      +plot!(dims, dca_times; label="DCA", color=indigo, linewidth=2)
                      +plot!(dims, dcppa_times; label="DCPPA", color=teal, linewidth=2)

                      Benchmark II: Iterations and cost.

                      As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.

                      N2 = [5,10,20,40,80]
                      +dims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]
                      +dca_iterations = Dict{Int,Int}()
                      +dca_costs = Dict{Int,Vector{Float64}}()
                      +dcppa_iterations = Dict{Int,Int}()
                      +dcppa_costs = Dict{Int,Vector{Float64}}()
                      @time for n in N2
                      +    println(n)
                      +    Mn = SymmetricPositiveDefinite(n)
                      +    pn = log(n) * Matrix{Float64}(I,n,n);
                      +    @time dca_st = difference_of_convex_algorithm(
                      +        Mn, f, g, grad_h!, pn;
                      +        grad_g=grad_g!,
                      +        gradient=grad_f!,
                      +        evaluation = InplaceEvaluation(),
                      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +        record = [:Iteration, :Cost],
                      +        return_state = true,
                      +    );
                      +    dca_costs[n] = get_record(dca_st, :Iteration, :Cost)
                      +    dca_iterations[n] = length(dca_costs[n])
                      +    @time dcppa_st = difference_of_convex_proximal_point(
                      +        Mn, grad_h!, pn;
                      +        g=g,
                      +        grad_g=grad_g!,
                      +        λ = i -> 1/(2*n),
                      +        cost = f,
                      +        gradient= grad_f!,
                      +        evaluation = InplaceEvaluation(),
                      +        stepsize = ConstantStepsize(1.0),
                      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +        record = [:Iteration, :Cost],
                      +        return_state = true,
                      +    );
                      +    dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)
                      +    dcppa_iterations[n] = length(dcppa_costs[n])
                      +end

                      The iterations are like

                      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Iterations")
                      +plot!(dims2, [values(dca_iterations)...]; label="DCA", color=indigo, linewidth=2)
                      +plot!(dims2, [values(dcppa_iterations)...]; label="DCPPA", color=teal, linewidth=2)

                      And for the developtment of the cost

                      where we can see that the DCA needs less iterations than the DCPPA.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [SO15]
                      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                      diff --git a/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg b/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg new file mode 100644 index 0000000..ca2e758 --- /dev/null +++ b/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg b/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg new file mode 100644 index 0000000..7baeb82 --- /dev/null +++ b/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg b/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..2131b9f --- /dev/null +++ b/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg b/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg new file mode 100644 index 0000000..d51a3c6 --- /dev/null +++ b/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg b/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..3c244f5 --- /dev/null +++ b/v0.1.6/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/Difference-of-Convex-Frank-Wolfe/index.html b/v0.1.6/examples/Difference-of-Convex-Frank-Wolfe/index.html new file mode 100644 index 0000000..ebb0eeb --- /dev/null +++ b/v0.1.6/examples/Difference-of-Convex-Frank-Wolfe/index.html @@ -0,0 +1,216 @@ + +Frank Wolfe comparison · ManoptExamples.jl

                      A comparison of the Difference of Convex and Frank Wolfe Algorithm

                      Ronny Bergmann 2023-11-06

                      Introduction

                      In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.

                      using LinearAlgebra, Random, Statistics, BenchmarkTools
                      +using ManifoldsBase, Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots

                      and we load a few nice colors

                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +teal = paul_tol["mutedteal"]

                      We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices $\mathcal P(n)$ with the affine invariant metric. Let $q_1,\ldots,q_m \in \mathcal P(n)$ be a set of points and $\mu_1,\ldots,\mu_m$ be a set of weights, such that they sum to one. We consider then

                      \[\operatorname*{arg\,max}_{p\in\mathcal C}\ \ h(p)\]

                      with

                      \[h(p) = +\sum_{j=1}^m \mu_j d^2(p,q_i), +\quad \text{ where } +d^2(p,q_i) = \operatorname{tr}\bigl( + \log^2(p^{-\frac{1}{2}}q_jp^{-\frac{1}{2}}) +\big) +\qquad\text{and}\qquad +\mathcal C = \{ p\in {\mathcal M}\ |\ \bar L\preceq p \preceq \bar U \},\]

                      for a lower bound $L$ and an upper bound $U$ for the matrices in the positive definite sense $A \preceq B \Leftrightarrow (B-A)$ is positive semi-definite

                      When every one of the weights ${\mu}_1, \ldots {\mu}_m$ are equal, this function $h$ is known as the of the set $\{q_1, \dots, q_m\}$.

                      And for our example we set

                      Random.seed!(42)
                      +n = 20
                      +m = 100
                      +M = SymmetricPositiveDefinite(n)
                      +q = [rand(M) for _ in 1:m];
                      +w = rand(m)
                      +w ./=sum(w)

                      We use as lower and upper bound the arithmetic and geometric mean $L$ and $U$, respectively.

                      L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )
                      +U = sum( wi * qi for (wi, qi) in zip(w,q) )

                      As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use

                      p0 = (L+U)/2

                      And we can check that it is feasible

                      Common Functions

                      Given $p \in \mathcal M$, $X \in T_p\mathcal M$ on the symmetric positive definite matrices M, this method computes the closed form solution to

                      \[\operatorname*{arg\,min}_{q\in {\mathcal C}}\ \langle X, \log_p q\rangle + = \operatorname*{arg\,min}_{q\in {\mathcal C}}\ \operatorname{tr}(S\log(YqY))\]

                      where $\mathcal C = \{ q | L \preceq q \preceq U \}$, $S = p^{-1/2}Xp^{-1/2}$, and $Y=p^{-1/2}$.

                      The solution is given by $Z=X^{-1}Q\bigl( P^{\mathrm{T}}[-\operatorname{sgn}(D)]_{+}P+\hat{L}\bigr)Q^{\mathrm{T}}X^{-1}$,@ where $S=QDQ^{\mathrm{T}}$ is a diagonalization of $S$, $\hat{U}-\hat{L}=P^{\mathrm{T}}P$ with $\hat{L}=Q^{\mathrm{T}}XLXQ$ and $\hat{U}=Q^{\mathrm{T}}XUXQ$, where $[-\mbox{sgn}(D)]_{+}$ is the diagonal matrix

                      \[\operatorname{diag}\bigl( + [-\operatorname{sgn}(d_{11})]_{+}, \ldots, [-\operatorname{sgn}(d_{nn})]_{+} +\bigr)\]

                      and $D=(d_{ij})$.

                      @doc raw"""
                      +    closed_form_solution!(M, q, L, U, p X)
                      +
                      +Compute the closeed form solution of the constraint sub problem in place of ``q``.
                      +"""
                      +function closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)
                      +    # extract p^1/2 and p^{-1/2}
                      +    (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)
                      +    # Compute D & Q
                      +    e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk  = QDQ'
                      +    D = Diagonal(1.0 .* (e2.values .< 0))
                      +    Q = e2.vectors
                      +    #println(p)
                      +    Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q
                      +    Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q
                      +    P = cholesky(Hermitian(Uprime - Lprime))
                      +    z = P.U' * D * P.U + Lprime
                      +    copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)
                      +    return q
                      +end

                      The Difference of Convex Formulation

                      We use $g(p) = \iota_{\mathcal C}(p)$ as the indicator funtion of the set $\mathcal C$. We use

                      function is_pos_def(p; atol=5e-13)
                      +    e = eigen(Symmetric(p))
                      +    return all((e.values .+ atol) .> 0)
                      +end
                      +function g(p, L, U)
                      +    return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf
                      +end
                      +h(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )

                      So we can first check that p0 is feasible

                      g(p0,L,U) == 0.0
                      true

                      Now setting

                      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ g(p) - h(p)\]

                      We look for a maximum of $h$, where $g$ is minimal, i.e. $g(p)$ is zero or in other words $p \in \mathcal C$.

                      The gradient of $h$ can also be implemented in closed form as

                      grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))
                      +function grad_h!(M, X, p, w, q)
                      +    Y = copy(M, p, X)
                      +    zero_vector!(M, X, p)
                      +    for (wi, qi) in zip(w,q)
                      +        log!(M, Y, p, qi)
                      +        Y .*= - 2.0*wi
                      +        X .+= Y
                      +    end
                      +    return X
                      +end

                      And we can further define the cost, which will just be $+\infty$ outside of $\mathcal C$. We define

                      f_dc(M, p) = g(p, L, U) - h(M, p, w, q)
                      +grad_h!(M, X, p) = grad_h!(M, X, p, w, q)
                      +function grad_f_dc!(M,X, p)
                      +    grad_h!(M, X, p, w, q)
                      +    X .*= -1.0
                      +    return X
                      +end

                      Here we can omit the gradient of $g$ in the definition of $\operatorname{grad} f$, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of $\mathcal C$.

                      As the last step, we can provide the closed form solver for the DC sub problem given at iteration $k$ by

                      \[\operatorname*{arg\,min}_{p\in \mathcal C}\ + \big\langle -\operatorname{grad} h(p^{(k)}), \exp^{-1}_{p^{(k)}}p\big\rangle.\]

                      Which we con compute

                      function dc_sub_solution!(M, q, p, X)
                      +    closed_form_solution!(M, q, L, U, p, -X)
                      +    return q
                      +end

                      For safety, we might want to avoid ending up at the boundary of $\mathcal C$. That is we reduce the distance we walk towards the solution $q$ a bit.

                      function dc_sub_solution_safe!(M, q, p, X)
                      +    p_last = copy(M,p) # since p=q might be in place
                      +    closed_form_solution!(M, q, L, U, p, -X)
                      +    q_orig = copy(M,q) # since we do the following in place of q
                      +    a = minimum(real.(eigen(q-L).values))
                      +    b = minimum(real.(eigen(U-q).values))
                      +    s = 1.0
                      +    d = distance(M, p_last, q_orig);
                      +    # if we are close to zero, we reduce faster.
                      +    α = d < 1/(n^2) ? 0.66 : 0.9995;
                      +    i=0
                      +    while (a < 0) || (b < 0)
                      +        s *= α
                      +        shortest_geodesic!(M, q, p_last, q_orig, s)
                      +        a = minimum(real.(eigen(q-L).values))
                      +        b = minimum(real.(eigen(U-q).values))
                      +        #println("$i a: $a, b = $b with s=$s")
                      +        i=i+1
                      +        if (i>100) # safety fallback
                      +            #@warn " $i steps where not enough $s ($α)\n$a $b\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs"
                      +            qe = eigen(q)
                      +            if a < 0
                      +                qe.values .+= min(1e-8, n*abs(min(a,b)))
                      +            else
                      +                qe.values .-= min(1e-8, n*abs(min(a,b)))
                      +            end
                      +            q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'
                      +            a = minimum(real.(eigen(q-L).values))
                      +            b = minimum(real.(eigen(U-q).values))
                      +            return q
                      +        end
                      +    end
                      +    return q
                      +end

                      The DoC solver run

                      Let’s compare both methods when they have the same stopping criteria

                      @time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;
                      +    gradient=grad_f_dc!,
                      +    sub_problem=dc_sub_solution_safe!,
                      +    evaluation=InplaceEvaluation(),
                      +    stopping_criterion = StopAfterIteration(300) |
                      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                      +    debug = [
                      +        (:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "),
                      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                      +        30, :Stop, "\n"],
                      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                      +    return_state=true,
                      +)
                      Initial F(p): -0.77661458292831
                      +At iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.
                      + 17.041637 seconds (16.55 M allocations: 1.629 GiB, 3.09% gc time, 92.32% compilation time)
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 23 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | InplaceEvaluation()
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 300:  not reached
                      +    |Δp| < 1.0e-14: not reached
                      +    |Δgrad f| < 1.0e-9: reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 30]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                      Let’s extract the final point and look at its cost

                      p1_dc = get_solver_result(state1_dc);
                      +f_dc(M, p1_dc)
                      -0.784425242474807

                      As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.

                      [ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]
                      2-element Vector{Tuple{Float64, Float64}}:
                      + (1.1886583723800445e-12, 0.06669240322431051)
                      + (1.3411042178831775e-5, 0.0671353506908023)

                      For the statistics we extract the recordings from the state

                      Define the Frank-Wolfe functions

                      For Frank wolfe, the cost is just defined as $-h(p)$ but the minimisation is constraint to $\mathcal C$, which is enfored by the oracle.

                      f_fw(M, p) = -h(M, p, w, q)
                      +function grad_f_fw!(M,X, p)
                      +    grad_h!(M, X, p, w, q)
                      +    X .*= -1.0
                      +    return X
                      +end
                      +oracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)

                      The FW Solver Run

                      Similarly we can run the Frank-Wolfe algorithm with

                      @time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;
                      +    sub_problem=oracle_fw!,
                      +    evaluation=InplaceEvaluation(),
                      +    stopping_criterion = StopAfterIteration(10^4) |
                      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                      +    debug = [
                      +        (:Iteration, "# %-8d "), :Cost, (:Change, " |Δp|: %0.14f "),
                      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                      +        2*10^3, :Stop, "\n"],
                      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                      +    return_state=true,
                      +)
                      Initial f(x): -0.776615
                      +# 2000     f(x): -0.784420 |Δp|: 0.04611942377596  |grad f(p)|: 0.17693408  |Δgrad f(p)|: 0.17555618
                      +# 4000     f(x): -0.784421 |Δp|: 0.00372201632005  |grad f(p)|: 0.17694619  |Δgrad f(p)|: 0.00749427
                      +# 6000     f(x): -0.784422 |Δp|: 0.00205683506784  |grad f(p)|: 0.17695204  |Δgrad f(p)|: 0.00414088
                      +# 8000     f(x): -0.784422 |Δp|: 0.00140675676260  |grad f(p)|: 0.17695565  |Δgrad f(p)|: 0.00283200
                      +# 10000    f(x): -0.784422 |Δp|: 0.00106177438611  |grad f(p)|: 0.17695815  |Δgrad f(p)|: 0.00213746
                      +The algorithm reached its maximal number of iterations (10000).
                      +155.661032 seconds (55.49 M allocations: 94.001 GiB, 2.24% gc time, 0.56% compilation time)
                      +
                      +# Solver state for `Manopt.jl`s Frank Wolfe Method
                      +After 10000 iterations
                      +
                      +## Parameters
                      +* inverse retraction method: LogarithmicInverseRetraction()
                      +* retraction method: ExponentialRetraction()
                      +* sub solver state:
                      +    | InplaceEvaluation()
                      +
                      +## Stepsize
                      +DecreasingStepsize(; length=2.0,  factor=1.0,  subtrahend=0.0,  shift=2)
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 10000:    reached
                      +    |Δp| < 1.0e-14: not reached
                      +    |Δgrad f| < 1.0e-9: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "f(x): %f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 2000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                      And we take a look at this result as well

                      p1_fw = get_solver_result(state1_fw);
                      +f_dc(M, p1_fw)
                      -0.7844220281765162

                      And its feasibility

                      [extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]
                      2-element Vector{Tuple{Float64, Float64}}:
                      + (4.904818928410655e-10, 0.06659173821656107)
                      + (3.245654983213335e-5, 0.06713970236096602)

                      Statistics

                      We extract the recorded values

                      # DoC
                      +iter1_dc = get_record(state1_dc, :Iteration, :Iteration)
                      +pk_dc = get_record(state1_dc,:Iteration,:Iterate)
                      +costs1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))
                      +dc_min = minimum(costs1_dc)
                      +# FW
                      +iter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]
                      +pk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]
                      +costs1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))

                      And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.

                      fig = plot(;
                      +    legend=:topright,
                      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x_k)-f^*$ (log. scale)",
                      +    yaxis=:log,
                      +    ylims=(1e-8, 10^-2),
                      +    xaxis=:log,
                      +    xlims=(1,10^4),
                      +)
                      +plot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label="Difference of Convex")
                      +plot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label="Frank-Wolfe")

                      This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.

                      On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [WS22]
                      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                      diff --git a/v0.1.6/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg b/v0.1.6/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg new file mode 100644 index 0000000..8ddebe5 --- /dev/null +++ b/v0.1.6/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/Difference-of-Convex-Rosenbrock/index.html b/v0.1.6/examples/Difference-of-Convex-Rosenbrock/index.html new file mode 100644 index 0000000..6180fa1 --- /dev/null +++ b/v0.1.6/examples/Difference-of-Convex-Rosenbrock/index.html @@ -0,0 +1,339 @@ + +Rosenbrock Metric · ManoptExamples.jl

                      Solving Rosenbrock with the Difference of Convex Algorithm

                      Ronny Bergmann 2023-06-06

                      Introduction

                      This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.

                      Both the Rosenbrock problem

                      \[ \operatorname*{argmin}_{x\in ℝ^2} a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2,\]

                      where $a,b>0$ and usually $b=1$ and $a \gg b$, we know the minimizer $x^* = (b,b^2)^\mathrm{T}$, and also the (Euclidean) gradient

                      \[\nabla f(x) = + \begin{pmatrix} + 4a(x_1^2-x_2)\\ -2a(x_1^2-x_2) + \end{pmatrix} + + + \begin{pmatrix} + 2(x_1-b)\\ 0 + \end{pmatrix}.\]

                      They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.

                      Furthermore, the RosenbrockMetric can be used on $ℝ^2$, that is

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix},\]

                      In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.

                      1. The Euclidean Gradient
                      2. The Riemannian gradient descent with respect to the RosenbrockMetric
                      3. The Euclidean Difference of Convex Algorithm
                      4. The Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric

                      Where we obtain a difference of convex problem by writing

                      \[f(x) = a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2 + = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 - \bigl(x_1-b\bigr)^2\]

                      that is

                      \[g(x) = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 \quad\text{ and }\quad h(x) = \bigl(x_1-b\bigr)^2\]

                      using LinearAlgebra, Random, Statistics
                      +using Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots
                      +import Manopt: set_manopt_parameter!
                      +Random.seed!(42)
                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +green = paul_tol["mutedgreen"]
                      +sand = paul_tol["mutedsand"]
                      +teal = paul_tol["mutedteal"]
                      +grey = paul_tol["mutedgrey"]

                      To emphasize the effect, we choose a quite large value of a.

                      a = 2*10^5
                      +b = 1

                      and use the starting point and a direction to check gradients

                      p0 = [0.1, 0.2]

                      The Euclidean Gradient Descent.

                      For the Euclidean gradient we can just use the same approach as in the Rosenbrock example

                      M = ℝ^2
                      +f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                      +∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)

                      define a common debug vector

                      debug_vec = [
                      +        (:Iteration, "# %-8d "),
                      +        (:Cost, "F(x): %1.4e"),
                      +        " ",
                      +        (:Change, "|δp|: %1.4e | "),
                      +        (:GradientNorm, "|grad f|: %1.6e"),
                      +        :Stop,
                      +        "\n",
                      +    ]

                      and call the gradient descent algorithm

                      Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[debug_vec...,10^7],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    record=[:Iteration, :Cost],
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03
                      +# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04
                      +# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06
                      +# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08
                      +# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 53073227 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Riemannian Gradient Descent.

                      For the Riemannian case, we define

                      M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())
                      MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())

                      and the gradient is now adopted to the new metric

                      function grad_f!(M, X, p)
                      +    ∇f!!(M, X, p)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_f(M, p)
                      +    X = zero_vector(M, p)
                      +    return grad_f!(M, X, p)
                      +end
                      R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[debug_vec...,10^6],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    record=[:Iteration, :Cost],
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 1000000  F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04
                      +# 2000000  F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 2443750 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Euclidean Difference of Convex

                      For the convex case, we have to first introduce the two parts of the cost.

                      f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;
                      +f2(M, p; a=100, b=1) = (p[1] - b[1])^2;
                      +g(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)
                      +h(M, p; a=100, b=1) = f2(M, p; a=a, b=b)

                      and their (Euclidan) gradients

                      function ∇h!(M, X, p; a=100, b=1)
                      +    X[1] = 2*(p[1]-b)
                      +    X[2] = 0
                      +    return X
                      +end
                      +function ∇h(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    ∇h!(M, X, p; a=a, b=b)
                      +    return X
                      +end
                      +function ∇g!(M, X, p; a=100, b=1)
                      +    X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)
                      +    X[2] = -2*a*(p[1]^2-p[2])
                      +    return X
                      +end
                      +function ∇g(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    ∇g!(M, X, p; a=a, b=b)
                      +    return X
                      +end

                      and we define for convenience

                      docE_g(M, p) = g(M, p; a=a, b=b)
                      +docE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)
                      +docE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)
                      +docE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)
                      +function docE_∇f!(M, X, p)
                      +  Y = zero_vector(M, p)
                      +  docE_∇g!(M, X, p)
                      +  docE_∇h!(M, Y, p)
                      +  X .-= Y
                      +  return X
                      +end

                      Then we call the difference of convex algorithm on Eucldiean space $ℝ^2$.

                      E_doc_state = difference_of_convex_algorithm(
                      +    M, docE_f, docE_g, docE_∇h!, p0;
                      +    gradient=docE_∇f!,
                      +    grad_g = docE_∇g!,
                      +    debug=[debug_vec..., 10^4],
                      +    evaluation=InplaceEvaluation(),
                      +    record=[:Iteration, :Cost],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    sub_hess=nothing, # Use gradient descent
                      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 10000    F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04
                      +# 20000    F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 26549 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | # Solver state for `Manopt.jl`s Gradient Descent
                      +    | After 2000 iterations
                      +    | 
                      +    | ## Parameters
                      +    | * retraction method: ExponentialRetraction()
                      +    | 
                      +    | ## Stepsize
                      +    | ArmijoLinesearch() with keyword parameters
                      +    |   * initial_stepsize    = 1.0
                      +    |   * retraction_method   = ExponentialRetraction()
                      +    |   * contraction_factor  = 0.95
                      +    |   * sufficient_decrease = 0.1
                      +    | 
                      +    | ## Stopping criterion
                      +    | 
                      +    | Stop When _one_ of the following are fulfilled:
                      +    |     Max Iteration 2000:   reached
                      +    |     |grad f| < 1.0e-16: not reached
                      +    | Overall: reached
                      +    | This indicates convergence: No
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Riemannian Difference of Convex

                      We first have to again defined the gradients with respect to the new metric

                      function grad_h!(M, X, p; a=100, b=1)
                      +    ∇h!(M, X, p; a=a, b=b)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_h(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    grad_h!(M, X, p; a=a, b=b)
                      +    return X
                      +end
                      +function grad_g!(M, X, p; a=100, b=1)
                      +    ∇g!(M, X, p; a=a,b=b)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_g(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    grad_g!(M, X, p; a=a, b=b)
                      +    return X
                      +end

                      While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For $X \in ∂h(p^{(k)})$ the sunproblem top determine $p^{(k+1)}$ reads

                      \[\operatorname*{argmin}_{p\in\mathcal M} g(p) - \langle X, \log_{p^{(k)}}p\rangle\]

                      for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with $X = \operatorname{grad} h(p^{(k)})$ that

                      \[\phi(p) = g(p) - \langle X, \log_{p^{(k)}}p\rangle += a\bigl( p_{1}^2-p_{2}\bigr)^2 + + 2\bigl(p_{1}-b\bigr)^2 - 2(p^{(k)}_1-b)p_1 + 2(p^{(k)}_1-b)p^{(k)}_1,\]

                      its Euclidean gradient reads

                      \[\operatorname{grad}\phi(p) = + \nabla \varphi(p) + = \begin{pmatrix} + 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^{(k)}_1-b)\\ + -2a(p_1^2-p_2) + \end{pmatrix}\]

                      where we can again employ the gradient conversion from before to obtain the Riemannian gradient.

                      mutable struct SubGrad{P,T,V}
                      +    pk::P
                      +    Xk::T
                      +    a::V
                      +    b::V
                      +end
                      +function (ϕ::SubGrad)(M, p)
                      +    X = zero_vector(M, p)
                      +    ϕ(M, X, p)
                      +    return X
                      +end
                      +function (ϕ::SubGrad)(M, X, p)
                      +    X .= [
                      +        4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),
                      +        -2 * ϕ.a * (p[1]^2 - p[2]),
                      +    ]
                      +    riemannian_gradient!(M, X, p, X) # convert
                      +    return X
                      +end

                      And in orer to update the subsolvers gradient correctly, we have to overwrite

                      set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)
                      +set_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)

                      And we again introduce for ease of use

                      docR_g(M, p) = g(M, p; a=a, b=b)
                      +docR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)
                      +docR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)
                      +docR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)
                      +function docR_grad_f!(M, X, p)
                      +    Y = zero_vector(M, p)
                      +    docR_grad_g!(M, X, p)
                      +    docR_grad_h!(M, Y, p)
                      +    X .-= Y
                      +    return X
                      +end
                      +docR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)

                      Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.

                      R_doc_state = difference_of_convex_algorithm(
                      +    M_rb, docR_f, docR_g, docR_grad_h!, p0;
                      +    gradient=docR_grad_f!,
                      +    grad_g = docR_grad_g!,
                      +    debug=[debug_vec..., 10^6],
                      +    evaluation=InplaceEvaluation(),
                      +    record=[:Iteration, :Cost],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    sub_grad=docR_sub_grad,
                      +    sub_hess = nothing, # Use gradient descent
                      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 1235 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | # Solver state for `Manopt.jl`s Gradient Descent
                      +    | After 2000 iterations
                      +    | 
                      +    | ## Parameters
                      +    | * retraction method: ExponentialRetraction()
                      +    | 
                      +    | ## Stepsize
                      +    | ArmijoLinesearch() with keyword parameters
                      +    |   * initial_stepsize    = 1.0
                      +    |   * retraction_method   = ExponentialRetraction()
                      +    |   * contraction_factor  = 0.95
                      +    |   * sufficient_decrease = 0.1
                      +    | 
                      +    | ## Stopping criterion
                      +    | 
                      +    | Stop When _one_ of the following are fulfilled:
                      +    |     Max Iteration 2000:   reached
                      +    |     |grad f| < 1.0e-16: not reached
                      +    | Overall: reached
                      +    | This indicates convergence: No
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      Comparison in Iterations

                      fig = plot(;
                      +    legend=:topright,
                      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x)$ (log. scale)",
                      +    yaxis=:log,
                      +    ylims=(1e-16, 5*1e5),
                      +    xaxis=:log,
                      +    xlims=(1,10^8),
                      +)
                      +scatter!(fig, [1,], [f(M,p0),], label=raw"$f(p_0)$", markercolor=grey)
                      +egi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries
                      +egc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries
                      +plot!(fig, egi, egc, color=teal, label="Euclidean GD")
                      +#
                      +rgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries
                      +rgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries
                      +plot!(fig, rgi, rgc, color=indigo, label="Riemannian GD")
                      +#
                      +edi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries
                      +edc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries
                      +plot!(fig, edi, edc, color=sand, label="Euclidean DoC")
                      +#
                      +rdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries
                      +rdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries
                      +plot!(fig, rdi, rdc, color=green, label="Riemannian DoC")

                      And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      diff --git a/v0.1.6/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg b/v0.1.6/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..d0b23bf --- /dev/null +++ b/v0.1.6/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/HyperparameterOptimization/index.html b/v0.1.6/examples/HyperparameterOptimization/index.html new file mode 100644 index 0000000..a49e0a8 --- /dev/null +++ b/v0.1.6/examples/HyperparameterOptimization/index.html @@ -0,0 +1,332 @@ + +Hyperparameter optimziation · ManoptExamples.jl

                      Hyperparameter optimization

                      Mateusz Baran 2024-08-03

                      Introduction

                      This example shows how to automatically select the best values of hyperparameters of optimization procedures such as retraction, vector transport, size of memory in L-BFGS or line search coefficients. Hyperparameter optimization relies on the Optuna [ASY+19] Python library because it is much more advanced than similar Julia projects, offering Bayesian optimization with conditional hyperparameters and early stopping.

                      General definitions

                      Here are some general definitions that you will most likely be able to directly use for your problem without any changes. Just remember to install optuna, for example using CondaPkg Julia library.

                      using Manifolds, Manopt
                      +using PythonCall
                      +using BenchmarkTools
                      +using LineSearches
                      +
                      +# This script requires optuna to be available through PythonCall
                      +# You can install it for example using
                      +# using CondaPkg
                      +# ]conda add optuna
                      +
                      +optuna = pyimport("optuna")
                      +
                      +norm_inf(M::AbstractManifold, p, X) = norm(X, Inf)
                      +
                      +# TTsuggest_ structs collect data from a calibrating optimization run
                      +# that is handled by compute_pruning_losses function
                      +
                      +struct TTsuggest_int
                      +    suggestions::Dict{String,Int}
                      +end
                      +function (s::TTsuggest_int)(name::String, a, b)
                      +    return s.suggestions[name]
                      +end
                      +struct TTsuggest_float
                      +    suggestions::Dict{String,Float64}
                      +end
                      +function (s::TTsuggest_float)(name::String, a, b; log::Bool=false)
                      +    return s.suggestions[name]
                      +end
                      +struct TTsuggest_categorical
                      +    suggestions::Dict{String,Any}
                      +end
                      +function (s::TTsuggest_categorical)(name::String, vals)
                      +    return s.suggestions[name]
                      +end
                      +struct TTreport
                      +    reported_vals::Vector{Float64}
                      +end
                      +function (r::TTreport)(val, i)
                      +    return push!(r.reported_vals, val)
                      +end
                      +struct TTshould_prune end
                      +(::TTshould_prune)() = Py(false)
                      +struct TracingTrial
                      +    suggest_int::TTsuggest_int
                      +    suggest_float::TTsuggest_float
                      +    suggest_categorical::TTsuggest_categorical
                      +    report::TTreport
                      +    should_prune::TTshould_prune
                      +end
                      +
                      +function compute_pruning_losses(
                      +    od,
                      +    int_suggestions::Dict{String,Int},
                      +    float_suggestions::Dict{String,Float64},
                      +    categorical_suggestions::Dict{String,Int},
                      +)
                      +    tt = TracingTrial(
                      +        TTsuggest_int(int_suggestions),
                      +        TTsuggest_float(float_suggestions),
                      +        TTsuggest_categorical(categorical_suggestions),
                      +        TTreport(Float64[]),
                      +        TTshould_prune(),
                      +    )
                      +    od(tt)
                      +    return tt.report.reported_vals
                      +end

                      The next part is your hyperparameter optimization objective. The ObjectiveData struct contains all relevant information about the sequence of specific problems. The outermost key part is the N_range field. Early stopping requires a series of progressively more complex problems. They will be attempted from the most simple one to the most complex one, and are specified by the values of N in that vector.

                      mutable struct ObjectiveData{TObj,TGrad}
                      +    obj::TObj
                      +    grad::TGrad
                      +    N_range::Vector{Int}
                      +    gtol::Float64
                      +    vts::Vector{AbstractVectorTransportMethod}
                      +    retrs::Vector{AbstractRetractionMethod}
                      +    manifold_constructors::Vector{Tuple{String,Any}}
                      +    pruning_losses::Vector{Float64}
                      +    manopt_stepsize::Vector{Tuple{String,Any}}
                      +    obj_loss_coeff::Float64
                      +end

                      In the example below we optimize hyperparameters on a sequence of Rosenbrock-type problems restricted to spheres:

                      \[\arg\min_{p \in S^{N-1}} \sum_{i=1}^{N/2} (1-p_{2i})^2 + 100 (p_{2i+1} - p_{2i}^2)^2,\]

                      where $N \in [2, 16, 128, 1024, 8192, 65536]$.

                      obj and grad are the objective and gradient, here defined as below. Note that gradient works in-place and variants without manifolds are also provided for easier comparison with other libraries like Optim.jl. It is easiest when problems for different values N can be distinguished by being defined on successively larger manifolds but the script could be modified so that it’s not necessary.

                      pruning_losses and compute_pruning_losses are related to early pruning used in Optuna and you shouldn’t have to modify them.

                      function f_rosenbrock(x)
                      +    result = 0.0
                      +    for i in 1:2:length(x)
                      +        result += (1.0 - x[i])^2 + 100.0 * (x[i + 1] - x[i]^2)^2
                      +    end
                      +    return result
                      +end
                      +function f_rosenbrock(::AbstractManifold, x)
                      +    return f_rosenbrock(x)
                      +end
                      +
                      +function g_rosenbrock!(storage, x)
                      +    for i in 1:2:length(x)
                      +        storage[i] = -2.0 * (1.0 - x[i]) - 400.0 * (x[i + 1] - x[i]^2) * x[i]
                      +        storage[i + 1] = 200.0 * (x[i + 1] - x[i]^2)
                      +    end
                      +    return storage
                      +end
                      +function g_rosenbrock!(M::AbstractManifold, storage, x)
                      +    g_rosenbrock!(storage, x)
                      +    riemannian_gradient!(M, storage, x, storage)
                      +    return storage
                      +end

                      Next, gtol is the tolerance used for the stopping criterion in optimization. vts and retrs are, respectively, vector transports and retraction methods selected through hyperparameter optimization. Some items need to be different for different values of N, for example the manifold over which the problem is defined. This is handled by manifold_constructors which is then defined as Tuple{String,Any}[("Sphere", N -> Manifolds.Sphere(N - 1))], where the string "Sphere" is used to identify the manifold family and the next element is a function that transforms the value of N to the manifold for the problem of size N.

                      Similarly, different stepsize selection methods may be considered. This is handled by the field manopt_stepsize. It will be easiest to see how it works by looking at how it is initialized:

                      Tuple{String,Any}[
                      +    ("LS-HZ", M -> Manopt.LineSearchesStepsize(ls_hz)),
                      +    ("Wolfe-Powell", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),
                      +]

                      We have a string that identifies the line search method name and a constructor of the line search which takes relevant arguments like the manifold or a numerical parameter.

                      The next part is the trial evaluation procedure. This is one of the more important places which need to be customized to your problem. This is the point where we tell Optuna about the relevant optimization hyperparameters and use them to define specific problems. The hyperparameter optimization is a multiobjective problem: we want as good problem objectives as possible and as low times as possible. As Optuna doesn’t currently support multicriteria pruning, which is important for obtaining a solution in a reasonable amount of time, we use a linear combination of sub-objectives to turn the problem into a single-criterion optimization. The hyperparameter optimization objective is a linear combination of achieved objectives the relative weight is controlled by objective.obj_loss_coeff.

                      function (objective::ObjectiveData)(trial)
                      +    # Here we use optuna to select memory length for L-BFGS -- an integer in the range between 2 and 30, referenced by name "mem_len"
                      +    mem_len = trial.suggest_int("mem_len", 2, 30)
                      +
                      +    # Here we select a vector transport and retraction methods, one of those specified in the `ObjectiveData`.
                      +    vt = objective.vts[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical(
                      +            "vector_transport_method", Vector(eachindex(objective.vts))
                      +        ),
                      +    )]
                      +    retr = objective.retrs[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical("retraction_method", Vector(eachindex(objective.retrs))),
                      +    )]
                      +
                      +    # Here we select the manifold constructor, in case we want to try different manifolds for our problem. For example one could try defining a problem with orthogonality constraints on Stiefel, Grassmann or flag manifold.
                      +    manifold_name, manifold_constructor = objective.manifold_constructors[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical(
                      +            "manifold", Vector(eachindex(objective.manifold_constructors))
                      +        ),
                      +    )]
                      +
                      +    # Here the stepsize selection method type is selected.
                      +    manopt_stepsize_name, manopt_stepsize_constructor = objective.manopt_stepsize[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical(
                      +            "manopt_stepsize", Vector(eachindex(objective.manopt_stepsize))
                      +        ),
                      +    )]
                      +
                      +    # This parametrizes stepsize selection methods with relevant numerical parameters.
                      +    local c1_val, c2_val, hz_sigma
                      +    if manopt_stepsize_name == "Wolfe-Powell"
                      +        c1_val = pyconvert(
                      +            Float64, trial.suggest_float("Wolfe-Powell c1", 1e-5, 1e-2; log=true)
                      +        )
                      +        c2_val =
                      +            1.0 - pyconvert(
                      +                Float64, trial.suggest_float("Wolfe-Powell 1-c2", 1e-4, 1e-2; log=true)
                      +            )
                      +    elseif manopt_stepsize_name == "Improved HZ"
                      +        hz_sigma = pyconvert(Float64, trial.suggest_float("Improved HZ sigma", 0.1, 0.9))
                      +    end
                      +
                      +    # The current loss estimate, taking into account estimated loss values for larger, not-yet-evaluated values of `N`.
                      +    loss = sum(objective.pruning_losses)
                      +
                      +    # Here iterate over problems we want to optimize for
                      +    # from smallest to largest; pruning should stop the iteration early
                      +    # if the hyperparameter set is not promising
                      +    cur_i = 0
                      +    for N in objective.N_range
                      +        # Here we define the initial point for the optimization procedure
                      +        p0 = zeros(N)
                      +        p0[1] = 1
                      +        M = manifold_constructor(N)
                      +        # Here we construct the specific line search to be used
                      +        local ls
                      +        if manopt_stepsize_name == "Wolfe-Powell"
                      +            ls = manopt_stepsize_constructor(M, c1_val, c2_val)
                      +        elseif manopt_stepsize_name == "Improved HZ"
                      +            ls = manopt_stepsize_constructor(M, hz_sigma)
                      +        else
                      +            ls = manopt_stepsize_constructor(M)
                      +        end
                      +        manopt_time, manopt_iters, manopt_obj = benchmark_time_state(
                      +            ManoptQN(),
                      +            M,
                      +            N,
                      +            objective.obj,
                      +            objective.grad,
                      +            p0,
                      +            ls,
                      +            pyconvert(Int, mem_len),
                      +            objective.gtol;
                      +            vector_transport_method=vt,
                      +            retraction_method=retr,
                      +        )
                      +        # TODO: turn this into multi-criteria optimization when Optuna starts supporting
                      +        # pruning in such problems
                      +        loss -= objective.pruning_losses[cur_i + 1]
                      +        loss += manopt_time + objective.obj_loss_coeff * manopt_obj
                      +        trial.report(loss, cur_i)
                      +        if pyconvert(Bool, trial.should_prune().__bool__())
                      +            throw(PyException(optuna.TrialPruned()))
                      +        end
                      +        cur_i += 1
                      +    end
                      +    return loss
                      +end

                      In the following benchmarking code you will most likely have to adapt solver parameters. This is designed around quasi_Newton but can be adapted to any solver as needed. The example below performs a small number of trials for quick rendering but in practice you should aim for at least a few thousand trials (the n_trials parameter).

                      # An abstract type in case we want to try different optimization packages.
                      +abstract type AbstractOptimConfig end
                      +struct ManoptQN <: AbstractOptimConfig end
                      +
                      +# Benchmark that evaluates hyperparameters. Returns time to reach the solution, number of iterations and final value of the objective.
                      +function benchmark_time_state(
                      +    ::ManoptQN,
                      +    M::AbstractManifold,
                      +    N,
                      +    f,
                      +    g!,
                      +    p0,
                      +    stepsize::Manopt.Stepsize,
                      +    mem_len::Int,
                      +    gtol::Real;
                      +    kwargs...,
                      +)
                      +    manopt_sc = StopWhenGradientNormLess(gtol; norm=norm_inf) | StopAfterIteration(1000)
                      +    mem_len = min(mem_len, manifold_dimension(M))
                      +    manopt_state = quasi_Newton(
                      +        M,
                      +        f,
                      +        g!,
                      +        p0;
                      +        stepsize=stepsize,
                      +        evaluation=InplaceEvaluation(),
                      +        return_state=true,
                      +        memory_size=mem_len,
                      +        stopping_criterion=manopt_sc,
                      +        debug=[],
                      +        kwargs...,
                      +    )
                      +    bench_manopt = @benchmark quasi_Newton(
                      +        $M,
                      +        $f,
                      +        $g!,
                      +        $p0;
                      +        stepsize=$(stepsize),
                      +        evaluation=$(InplaceEvaluation()),
                      +        memory_size=$mem_len,
                      +        stopping_criterion=$(manopt_sc),
                      +        debug=[],
                      +        $kwargs...,
                      +    )
                      +    iters = get_count(manopt_state, :Iterations)
                      +    final_val = f(M, manopt_state.p)
                      +    return median(bench_manopt.times) / 1000, iters, final_val
                      +end
                      +
                      +"""
                      +    lbfgs_study(; pruning_coeff::Float64=0.95)
                      +
                      +Set up the example hyperparameter optimization study.
                      +"""
                      +function lbfgs_study(; pruning_coeff::Float64=0.95)
                      +    Ns = [2^n for n in 1:3:12]
                      +    ls_hz = LineSearches.HagerZhang()
                      +    od = ObjectiveData(
                      +        f_rosenbrock,
                      +        g_rosenbrock!,
                      +        Ns,
                      +        1e-5,
                      +        AbstractVectorTransportMethod[ParallelTransport(), ProjectionTransport()],
                      +        [ExponentialRetraction(), ProjectionRetraction()],
                      +        Tuple{String,Any}[("Sphere", N -> Manifolds.Sphere(N - 1))],
                      +        zeros(Float64, eachindex(Ns)),
                      +        Tuple{String,Any}[
                      +            ("LS-HZ", M -> Manopt.LineSearchesStepsize(ls_hz)),
                      +            #("Improved HZ", (M, sigma) -> HagerZhangLinesearch(M; sigma=sigma)),
                      +            ("Wolfe-Powell", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),
                      +        ],
                      +        10.0,
                      +    )
                      +
                      +    # Here you need to define baseline values of all hyperparameters
                      +    baseline_pruning_losses = compute_pruning_losses(
                      +        od,
                      +        Dict("mem_len" => 4),
                      +        Dict(
                      +            "Wolfe-Powell c1" => 1e-4,
                      +            "Wolfe-Powell 1-c2" => 1e-3,
                      +            "Improved HZ sigma" => 0.9,
                      +        ),
                      +        Dict(
                      +            "vector_transport_method" => 1,
                      +            "retraction_method" => 1,
                      +            "manifold" => 1,
                      +            "manopt_stepsize" => 1,
                      +        ),
                      +    )
                      +    od.pruning_losses = pruning_coeff * baseline_pruning_losses
                      +
                      +    study = optuna.create_study(; study_name="L-BFGS")
                      +    # Here you can specify number of trials and timeout (in seconds).
                      +    study.optimize(od; n_trials=1000, timeout=500)
                      +    println("Best params is $(study.best_params) with value $(study.best_value)")
                      +    selected_manifold = od.manifold_constructors[pyconvert(Int, study.best_params["manifold"])][1]
                      +    selected_retraction_method = od.retrs[pyconvert(Int, study.best_params["retraction_method"])]
                      +    selected_vector_transport = od.vts[pyconvert(Int, study.best_params["vector_transport_method"])]
                      +    println("Selected manifold: $(selected_manifold)")
                      +    println("Selected retraction method: $(selected_retraction_method)")
                      +    println("Selected vector transport method: $(selected_vector_transport)")
                      +    return study
                      +end
                      +
                      +lbfgs_study()
                      Best params is {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093} with value 5510.963227438757
                      +Selected manifold: Sphere
                      +Selected retraction method: ExponentialRetraction()
                      +Selected vector transport method: ProjectionTransport()
                      +
                      +[I 2024-03-16 18:04:17,965] A new study created in memory with name: L-BFGS
                      +[I 2024-03-16 18:04:45,996] Trial 0 finished with value: 5639.789870295856 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00027288064367948073, 'Wolfe-Powell 1-c2': 0.00026503788892114045}. Best is trial 0 with value: 5639.789870295856.
                      +[I 2024-03-16 18:05:11,860] Trial 1 finished with value: 5635.936370295855 and parameters: {'mem_len': 11, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.002743250060163298, 'Wolfe-Powell 1-c2': 0.00037986521186922096}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:05:39,386] Trial 2 finished with value: 5673.101441724422 and parameters: {'mem_len': 26, 'vector_transport_method': 2, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00043339485784312605, 'Wolfe-Powell 1-c2': 0.0027302649933974173}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:06:10,279] Trial 3 finished with value: 7410.818084581564 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:06:37,995] Trial 4 finished with value: 5756.566226449636 and parameters: {'mem_len': 25, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:06:42,755] Trial 5 pruned. 
                      +[I 2024-03-16 18:06:58,577] Trial 6 pruned. 
                      +[I 2024-03-16 18:07:15,366] Trial 7 pruned. 
                      +[I 2024-03-16 18:07:40,605] Trial 8 finished with value: 5581.7437274386975 and parameters: {'mem_len': 7, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0010567355712112379, 'Wolfe-Powell 1-c2': 0.003948002490203636}. Best is trial 8 with value: 5581.7437274386975.
                      +[I 2024-03-16 18:07:46,021] Trial 9 pruned. 
                      +[I 2024-03-16 18:08:11,512] Trial 10 finished with value: 5510.963227438757 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:08:35,914] Trial 11 finished with value: 5521.388656010121 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006738829952322474, 'Wolfe-Powell 1-c2': 0.0010639659137420014}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:09:00,317] Trial 12 finished with value: 5521.36958458155 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00010975606104676191, 'Wolfe-Powell 1-c2': 0.0007663843095951679}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:09:24,680] Trial 13 finished with value: 5520.7020845815505 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 6.743450835567536e-05, 'Wolfe-Powell 1-c2': 0.0008779759729737719}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:09:50,268] Trial 14 pruned. 
                      +[I 2024-03-16 18:10:15,494] Trial 15 finished with value: 5595.119584581556 and parameters: {'mem_len': 6, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 8.147444451747575e-05, 'Wolfe-Powell 1-c2': 0.00012268601197923553}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:10:25,264] Trial 16 pruned. 
                      +[I 2024-03-16 18:10:50,209] Trial 17 finished with value: 5572.474513153012 and parameters: {'mem_len': 5, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0015998473664092935, 'Wolfe-Powell 1-c2': 0.0005109172020536229}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:10:54,772] Trial 18 pruned. 
                      +[I 2024-03-16 18:11:04,534] Trial 19 pruned. 
                      +[I 2024-03-16 18:11:28,873] Trial 20 finished with value: 5512.3824417244705 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.1581668103921961e-05, 'Wolfe-Powell 1-c2': 0.0002691056199427656}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:11:53,327] Trial 21 finished with value: 5529.088227438692 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.3645031886009879e-05, 'Wolfe-Powell 1-c2': 0.0001863385753491203}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:12:17,911] Trial 22 finished with value: 5522.041370295835 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.0030173525937465e-05, 'Wolfe-Powell 1-c2': 0.000543991948003312}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:12:27,645] Trial 23 pruned. 
                      +[I 2024-03-16 18:12:52,163] Trial 24 finished with value: 5528.840941724406 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.000245400433292576, 'Wolfe-Powell 1-c2': 0.000133639324295565}. Best is trial 10 with value: 5510.963227438757.
                      +
                      +Python: <optuna.study.study.Study object at 0x70dd985d9b50>

                      Summary

                      We’ve shown how to automatically select the best hyperparameter values for your optimization problem.

                      Literature

                      [ASY+19]
                      T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.
                      diff --git a/v0.1.6/examples/RayleighQuotient/index.html b/v0.1.6/examples/RayleighQuotient/index.html new file mode 100644 index 0000000..17d1309 --- /dev/null +++ b/v0.1.6/examples/RayleighQuotient/index.html @@ -0,0 +1,235 @@ + +The Rayleigh Quotient · ManoptExamples.jl

                      The Rayleigh Quotient

                      Ronny Bergmann 2024-03-09

                      Introduction

                      This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.

                      For a symmetric matrix $A \in \mathbb R^{n\times n}$ we consider the 📖 Rayleigh Quotient

                      \[\operatorname*{arg\,min}_{x \in \mathbb R^n \backslash \{0\}} +\frac{x^{\mathrm{T}}Ax}{\lVert x \rVert^2}.\]

                      On the sphere we can omit the denominator and obtain

                      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                      which by itself we can again continue in the embedding as

                      \[\tilde f(x) = x^{\mathrm{T}}Ax,\qquad x \in \mathbb R^n.\]

                      This cost has the nice feature that at the minimizer $p^*\in\mathbb S^{n-1}$ the function falue $f(p^*)$ is the smalles eigenvalue of $A$.

                      For the embedded function $\tilde f$ the gradient and Hessian can be computed with classical methods as

                      \[\begin{align*} +∇\tilde f(x) &= 2Ax, \qquad x ∈ ℝ^n, +\\ +∇^2\tilde f(x)[V] &= 2AV, \qquad x, V ∈ ℝ^n. +\end{align*}\]

                      Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold $\mathcal M = \mathbb S^{n-1}$ are given by

                      \[\begin{align*} +\operatorname{grad} f(p) &= 2Ap - 2(p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1}, +\\ +\operatorname{Hess} f(p)[X] &= 2AX - 2(p^{\mathrm{T}}AX)p - 2(p^{\mathrm{T}}Ap)X,\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1} +\end{align*}\]

                      Let’s first generate an example martrx $A$.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random
                      +Random.seed!(42)
                      +n = 500
                      +A = Symmetric(randn(n, n) / n)

                      And the manifolds

                      M = Sphere(n-1)
                      Sphere(499, ℝ)
                      E = get_embedding(M)
                      Euclidean(500; field=ℝ)

                      Setup the corresponding functions

                      Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute $f$ is called with M as their first argument and $\tilde f$ if called with E.

                      We instantiate

                      f = ManoptExamples.RayleighQuotientCost(A)
                      +grad_f = ManoptExamples.RayleighQuotientGrad!!(A)
                      +Hess_f = ManoptExamples.RayleighQuotientHess!!(A)

                      the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory

                      p0 = [1.0, zeros(n-1)...]
                      +X = zero_vector(M, p0)

                      we can both call

                      Y = grad_f(M, p0)  # Allocates memory
                      +grad_f(M, X, p0)    # Computes in place of X and returns the result in X.
                      +norm(M, p0, X-Y)
                      0.0

                      Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.

                      First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute

                      λ = min(eigvals(A)...)
                      -0.08967721009388108

                      A Solver based on gradient information

                      Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient $\nabla \tilde f$. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].

                      But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent

                      s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                      +    return_state=true,
                      +)
                      +q1 = get_solver_result(s)
                      +s
                      Initial f(x): -0.000727
                      +# 50    f(x): -0.088415|grad f(p)|:0.004530500043902619
                      +# 100   f(x): -0.089097|grad f(p)|:0.004589417101266096
                      +# 150   f(x): -0.089530|grad f(p)|:0.0026028331895358247
                      +# 200   f(x): -0.089650|grad f(p)|:0.0012359084298719039
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 200 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 200:  reached
                      +    |grad f| < 1.0e-8: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-6d"), (:Cost, "f(x): %f"), (:GradientNorm, "|grad f(p)|:%s"), "\n", 50]

                      From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.

                      And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.

                      q2 = gradient_descent(M, f, grad_f, p0;
                      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                      +)
                      +#Test that both are the same
                      +isapprox(M, q1,q2)
                      Initial f(x): -0.000727
                      +# 50    f(x): -0.088415|grad f(p)|:0.004530500043902567
                      +# 100   f(x): -0.089097|grad f(p)|:0.004589417101266063
                      +# 150   f(x): -0.089530|grad f(p)|:0.002602833189535808
                      +# 200   f(x): -0.089650|grad f(p)|:0.0012359084298719097
                      +
                      +true

                      We can also benchmark both

                      @benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)
                      BenchmarkTools.Trial: 22 samples with 1 evaluation.
                      + Range (min … max):  230.735 ms … 247.927 ms  ┊ GC (min … max): 2.85% … 2.57%
                      + Time  (median):     231.768 ms               ┊ GC (median):    2.78%
                      + Time  (mean ± σ):   234.409 ms ±   5.319 ms  ┊ GC (mean ± σ):  2.81% ± 0.27%
                      +
                      +  ▄█▄▁    ▁                                     ▁                
                      +  ████▆▁▆▁█▁▁▁▁▁▁▆▁▁▁▁▆▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▆▁▁▁▁▁▁▁▁▁▁▁▁▆ ▁
                      +  231 ms           Histogram: frequency by time          248 ms <
                      +
                      + Memory estimate: 1.13 GiB, allocs estimate: 3613.
                      @benchmark gradient_descent($M, $f, $grad_f, $p0)
                      BenchmarkTools.Trial: 159 samples with 1 evaluation.
                      + Range (min … max):  30.890 ms … 40.010 ms  ┊ GC (min … max): 0.00% … 0.00%
                      + Time  (median):     31.134 ms              ┊ GC (median):    0.00%
                      + Time  (mean ± σ):   31.598 ms ±  1.285 ms  ┊ GC (mean ± σ):  0.57% ± 0.96%
                      +
                      +  ▃█▅                                                          
                      +  ███▆▃▃▁▃▇▄▇▅▂▂▁▁▁▁▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▁▁▁▁▁▁▁▁▁▁▂▂▁▁▁▁▁▁▂▁▃ ▂
                      +  30.9 ms         Histogram: frequency by time        36.7 ms <
                      +
                      + Memory estimate: 11.38 MiB, allocs estimate: 3006.

                      From these results we see, that the conversion from the Euclidean to the Riemannian gradient does require a small amount of effort and hence reduces the performance slighly. Still, if the Euclidean Gradient is easier to compute or already available, this is in terms of coding the faster way. Finally this is a tradeoff between derivation and implementation efforts for the Riemannian gradient and a slight performance reduction when using the Euclidean one.

                      A Solver based (also) on (approximate) Hessian information

                      To also involve the Hessian, we consider the trust regions solver with three cases:

                      1. Euclidean, approximating the Hessian
                      2. Euclidean, providing the Hessian
                      3. Riemannian, providing the Hessian but also using in-place evaluations.
                      q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.088106|grad f(p)|:0.01903913659588686
                      +# 20    f(x): -0.089023|grad f(p)|:0.007792334296299116
                      +# 30    f(x): -0.089501|grad f(p)|:0.008034300330026467
                      +# 40    f(x): -0.089842|grad f(p)|:0.008125526728200166
                      +# 50    f(x): -0.089890|grad f(p)|:0.0031244752821335416
                      +# 60    f(x): -0.089925|grad f(p)|:0.0029682862637714163
                      +# 70    f(x): -0.089962|grad f(p)|:0.002811722437216778
                      +# 80    f(x): -0.089997|grad f(p)|:0.0026658493010157363
                      +# 90    f(x): -0.090032|grad f(p)|:0.0025418974797659266
                      +# 100   f(x): -0.090067|grad f(p)|:0.0024485809550738955
                      +# 110   f(x): -0.090108|grad f(p)|:0.0023894008071780747
                      +# 120   f(x): -0.090155|grad f(p)|:0.002362317662908117
                      +# 130   f(x): -0.090208|grad f(p)|:0.0023611301647631484
                      +# 140   f(x): -0.090262|grad f(p)|:0.00237797866404072
                      +# 150   f(x): -0.090314|grad f(p)|:0.002405563029627607
                      +# 160   f(x): -0.090362|grad f(p)|:0.002438250821406204
                      +# 170   f(x): -0.090404|grad f(p)|:0.002472221074327323
                      +# 180   f(x): -0.090441|grad f(p)|:0.0025051377726827166
                      +# 190   f(x): -0.090472|grad f(p)|:0.002535721310831389
                      +# 200   f(x): -0.090498|grad f(p)|:0.0025633813700434637
                      +# 210   f(x): -0.090513|grad f(p)|:0.0025832821804127513
                      +# 220   f(x): -0.090513|grad f(p)|:0.0025832821804127513
                      +# 230   f(x): -0.090513|grad f(p)|:0.0025832821792817493
                      +# 240   f(x): -0.090513|grad f(p)|:0.0025832821770197098
                      +# 250   f(x): -0.090513|grad f(p)|:0.0025832821747576924
                      +# 260   f(x): -0.090513|grad f(p)|:0.002583282172495683
                      +# 270   f(x): -0.090513|grad f(p)|:0.0025832821702336567
                      +# 280   f(x): -0.090513|grad f(p)|:0.002583282167971658
                      +# 290   f(x): -0.090513|grad f(p)|:0.002583282165709656
                      +# 300   f(x): -0.090513|grad f(p)|:0.002583282163447637
                      +# 310   f(x): -0.090513|grad f(p)|:0.0025832821611855928
                      +# 320   f(x): -0.090513|grad f(p)|:0.0025832821589235814
                      +# 330   f(x): -0.090513|grad f(p)|:0.002583282156661572
                      +# 340   f(x): -0.090513|grad f(p)|:0.0025832821543995727
                      +# 350   f(x): -0.090513|grad f(p)|:0.002583282152137569
                      +# 360   f(x): -0.090513|grad f(p)|:0.0025832821498755487
                      +# 370   f(x): -0.090513|grad f(p)|:0.0025832821476135036
                      +# 380   f(x): -0.090513|grad f(p)|:0.0025832821453515035
                      +# 390   f(x): -0.090513|grad f(p)|:0.0025832821430894675
                      +# 400   f(x): -0.090513|grad f(p)|:0.0025832821408274405
                      +# 410   f(x): -0.090513|grad f(p)|:0.002583282138565445
                      +# 420   f(x): -0.090513|grad f(p)|:0.002583282136303441
                      +# 430   f(x): -0.090513|grad f(p)|:0.00258328213404143
                      +# 440   f(x): -0.090513|grad f(p)|:0.002583282131779385
                      +# 450   f(x): -0.090513|grad f(p)|:0.0025832821295174104
                      +# 460   f(x): -0.090513|grad f(p)|:0.002583282127255372
                      +# 470   f(x): -0.090513|grad f(p)|:0.002583282124993372
                      +# 480   f(x): -0.090513|grad f(p)|:0.0025832821227313313
                      +# 490   f(x): -0.090513|grad f(p)|:0.0025832821204693065
                      +# 500   f(x): -0.090513|grad f(p)|:0.002583282118207321
                      +# 510   f(x): -0.090513|grad f(p)|:0.0025832821159453034
                      +# 520   f(x): -0.090513|grad f(p)|:0.0025832821136832665
                      +# 530   f(x): -0.090513|grad f(p)|:0.0025832821114212673
                      +# 540   f(x): -0.090513|grad f(p)|:0.002583282109159243
                      +# 550   f(x): -0.090513|grad f(p)|:0.002583282106897217
                      +# 560   f(x): -0.090513|grad f(p)|:0.002583282104635213
                      +# 570   f(x): -0.090513|grad f(p)|:0.0025832821023731955
                      +# 580   f(x): -0.090513|grad f(p)|:0.0025832821001112094
                      +# 590   f(x): -0.090513|grad f(p)|:0.002583282097849167
                      +# 600   f(x): -0.090513|grad f(p)|:0.0025832820955871503
                      +# 610   f(x): -0.090513|grad f(p)|:0.0025832820933251325
                      +# 620   f(x): -0.090513|grad f(p)|:0.002583282091063122
                      +# 630   f(x): -0.090513|grad f(p)|:0.0025832820888010873
                      +# 640   f(x): -0.090513|grad f(p)|:0.0025832820865390785
                      +# 650   f(x): -0.090513|grad f(p)|:0.0025832820842770442
                      +# 660   f(x): -0.090513|grad f(p)|:0.0025832820820150576
                      +# 670   f(x): -0.090513|grad f(p)|:0.0025832820797530767
                      +# 680   f(x): -0.090513|grad f(p)|:0.0025832820774910523
                      +# 690   f(x): -0.090513|grad f(p)|:0.0025832820752290362
                      +# 700   f(x): -0.090513|grad f(p)|:0.002583282072966992
                      +# 710   f(x): -0.090513|grad f(p)|:0.002583282070704973
                      +# 720   f(x): -0.090513|grad f(p)|:0.0025832820684429532
                      +# 730   f(x): -0.090513|grad f(p)|:0.002583282066180946
                      +# 740   f(x): -0.090513|grad f(p)|:0.0025832820639189306
                      +# 750   f(x): -0.090513|grad f(p)|:0.0025832820616569214
                      +# 760   f(x): -0.090513|grad f(p)|:0.00258328205939488
                      +# 770   f(x): -0.090513|grad f(p)|:0.002583282057132884
                      +# 780   f(x): -0.090513|grad f(p)|:0.0025832820548708406
                      +# 790   f(x): -0.090513|grad f(p)|:0.002583282052608873
                      +# 800   f(x): -0.090513|grad f(p)|:0.002583282050346837
                      +# 810   f(x): -0.090513|grad f(p)|:0.0025832820480848214
                      +# 820   f(x): -0.090513|grad f(p)|:0.0025832820458228205
                      +# 830   f(x): -0.090513|grad f(p)|:0.0025832820435608087
                      +# 840   f(x): -0.090513|grad f(p)|:0.0025832820412987944
                      +# 850   f(x): -0.090513|grad f(p)|:0.0025832820390367726
                      +# 860   f(x): -0.090513|grad f(p)|:0.002583282036774768
                      +# 870   f(x): -0.090513|grad f(p)|:0.002583282034512706
                      +# 880   f(x): -0.090513|grad f(p)|:0.002583282032250709
                      +# 890   f(x): -0.090513|grad f(p)|:0.0025832820299886896
                      +# 900   f(x): -0.090513|grad f(p)|:0.002583282027726701
                      +# 910   f(x): -0.090513|grad f(p)|:0.002583282025464682
                      +# 920   f(x): -0.090513|grad f(p)|:0.0025832820232026517
                      +# 930   f(x): -0.090513|grad f(p)|:0.002583282020940619
                      +# 940   f(x): -0.090513|grad f(p)|:0.0025832820186786334
                      +# 950   f(x): -0.090513|grad f(p)|:0.002583282016416595
                      +# 960   f(x): -0.090513|grad f(p)|:0.0025832820141545986
                      +# 970   f(x): -0.090513|grad f(p)|:0.0025832820118925717
                      +# 980   f(x): -0.090513|grad f(p)|:0.0025832820096305525
                      +# 990   f(x): -0.090513|grad f(p)|:0.002583282007368543
                      +# 1000  f(x): -0.090513|grad f(p)|:0.0025832820051065217

                      To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.

                      q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.089673|grad f(p)|:0.0033633987039373655
                      q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.089673|grad f(p)|:0.00336339870393737

                      Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.

                      @benchmark trust_regions($M, $f, $grad_f, $p0;
                      +  objective_type=:Euclidean,
                      +  evaluation=InplaceEvaluation(),
                      +)
                      BenchmarkTools.Trial: 10 samples with 1 evaluation.
                      + Range (min … max):  504.514 ms … 539.614 ms  ┊ GC (min … max): 2.83% … 2.64%
                      + Time  (median):     508.900 ms               ┊ GC (median):    2.81%
                      + Time  (mean ± σ):   512.978 ms ±  10.540 ms  ┊ GC (mean ± σ):  2.79% ± 0.06%
                      +
                      +  ▁█   ▁ █         ▁   ▁ ▁                                    ▁  
                      +  ██▁▁▁█▁█▁▁▁▁▁▁▁▁▁█▁▁▁█▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
                      +  505 ms           Histogram: frequency by time          540 ms <
                      +
                      + Memory estimate: 1.97 GiB, allocs estimate: 60518.
                      @benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;
                      +  evaluation=InplaceEvaluation(),
                      +  objective_type=:Euclidean
                      +)
                      BenchmarkTools.Trial: 311 samples with 1 evaluation.
                      + Range (min … max):  13.541 ms … 21.282 ms  ┊ GC (min … max): 0.00% … 2.10%
                      + Time  (median):     15.376 ms              ┊ GC (median):    3.11%
                      + Time  (mean ± σ):   16.099 ms ±  1.516 ms  ┊ GC (mean ± σ):  3.90% ± 2.90%
                      +
                      +               ▃█▂                                             
                      +  ▄▄▃▁▂▁▁▂▄▄▂▃▇███▄▃▃▁▆▅▄▃▁▃▃▃▇▄▃▁▂▃▄▅▄▃▂▁▂▃▂▄▃▃▃▄▄▃▂▁▂▁▂▂▁▁▂ ▃
                      +  13.5 ms         Histogram: frequency by time        20.3 ms <
                      +
                      + Memory estimate: 37.53 MiB, allocs estimate: 4527.
                      @benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;
                      +    evaluation=InplaceEvaluation(),
                      +)
                      BenchmarkTools.Trial: 522 samples with 1 evaluation.
                      + Range (min … max):  9.178 ms …  13.930 ms  ┊ GC (min … max): 0.00% … 0.00%
                      + Time  (median):     9.331 ms               ┊ GC (median):    0.00%
                      + Time  (mean ± σ):   9.569 ms ± 495.194 μs  ┊ GC (mean ± σ):  1.76% ± 2.89%
                      +
                      +  ▁▄▆██▆▅▃                   ▂▃▅▃▂▂▁▁                          
                      +  ██████████▇▄▄▄▁▁▁▁▄▁▄▄▄▁▄▆▆████████▅▄▁▅▁▁▄▁▁▄▁▁▄▄▁▁▁▄▄▁▁▄▁▅ █
                      +  9.18 ms      Histogram: log(frequency) by time        11 ms <
                      +
                      + Memory estimate: 10.86 MiB, allocs estimate: 4506.

                      We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.

                      Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.

                      [distance(M, q1, q) for q ∈ [q2,q3] ]
                      2-element Vector{Float64}:
                      + 4.471485799821605e-15
                      + 0.048047538209352994
                      [distance(M, q3, q) for q ∈ [q4,q5] ]
                      2-element Vector{Float64}:
                      + 0.08269488012454579
                      + 0.08269488012454579

                      Which we can also see in the final cost, comparing it to the Eigenvalue

                      [f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]
                      5-element Vector{Float64}:
                      +  2.76900562450888e-5
                      +  2.769005624428389e-5
                      + -0.000836208332542443
                      +  3.191891195797325e-16
                      +  3.191891195797325e-16

                      Summary

                      We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.

                      Literature

                      diff --git a/v0.1.6/examples/Riemannian-mean/index.html b/v0.1.6/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..4c8676a --- /dev/null +++ b/v0.1.6/examples/Riemannian-mean/index.html @@ -0,0 +1,33 @@ + +Riemannian Mean · ManoptExamples.jl

                      The Riemannian Center of Mass (mean)

                      Ronny Bergmann 2023-07-02

                      Preliminary Notes

                      Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

                      For this first example, the objective is a very common one, for example also used in the Get started: optimize! tutorial of Manopt.jl.

                      The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

                      There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

                      For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,

                      Loading packages and defining data

                      Loading the necessary packages and defining a data set on a manifold

                      using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
                      +Random.seed!(42)
                      +M = Sphere(2)
                      +n = 100
                      +σ = π / 8
                      +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
                      +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

                      Variant 1: Using the functions

                      We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get started: optimize!.

                      f = ManoptExamples.RiemannianMeanCost(data)
                      +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

                      Then we can for example directly call a gradient descent as

                      x1 = gradient_descent(M, f, grad_f, first(data))
                      3-element Vector{Float64}:
                      + 0.6868392794567202
                      + 0.006531600696673591
                      + 0.7267799821044285

                      Variant 2: Using the objective

                      A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do in-place-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

                      rmo = ManoptExamples.Riemannian_mean_objective(
                      +    M, data,
                      +    evaluation=InplaceEvaluation(),
                      +)

                      Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

                      rmp = DefaultManoptProblem(M, rmo)

                      This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

                      s1 = GradientDescentState(M, copy(M, first(data)))
                      +solve!(rmp, s1)
                      +x2 = get_solver_result(s1)
                      3-element Vector{Float64}:
                      + 0.6868392794567202
                      + 0.006531600696673591
                      + 0.7267799821044285

                      but we can easily use a conjugate gradient instead

                      s2 = ConjugateGradientDescentState(
                      +    M,
                      +    copy(M, first(data)),
                      +    StopAfterIteration(100),
                      +    ArmijoLinesearch(M),
                      +    FletcherReevesCoefficient(),
                      +)
                      +solve!(rmp, s2)
                      +x3 = get_solver_result(s2)
                      3-element Vector{Float64}:
                      + 0.6868393613136017
                      + 0.006531541407458413
                      + 0.7267799052788726
                      diff --git a/v0.1.6/examples/Robust-PCA/index.html b/v0.1.6/examples/Robust-PCA/index.html new file mode 100644 index 0000000..d6475c3 --- /dev/null +++ b/v0.1.6/examples/Robust-PCA/index.html @@ -0,0 +1,64 @@ + +Robust PCA · ManoptExamples.jl

                      The Robust PCA computed on the Grassmann manifold

                      Ronny BergmannLaura Weigl 2023-07-02

                      For this example we first load the necessary packages.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using LinearAlgebra, Random, Statistics
                      +using Manifolds, Manopt, ManoptExamples
                      +using Plots
                      +Random.seed!(42)

                      Computing a Robust PCA

                      For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

                      We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

                      \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

                      The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

                      \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

                      where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

                      The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

                      First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

                      n = 40
                      +d = 2
                      +outliers = 15
                      +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
                      +# Outliers:
                      +permute = shuffle(1:size(data, 2))'
                      +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
                      +# We are looking for a line here so we set
                      +m = 1

                      We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

                      M = Grassmann(d,m);

                      For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

                      Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

                      Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

                      The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

                      We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

                      ε = 1.0
                      +iterations = 6
                      +reduction = 0.5
                      +U, S, V = svd(data);
                      +p0 = U[:, 1:m]
                      2×1 Matrix{Float64}:
                      + -0.7494248652139397
                      +  0.6620893983436593

                      Let’s generate the cost and gradient we aim to use here

                      f = ManoptExamples.RobustPCACost(M, data, ε)
                      +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
                      ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

                      and check the initial cost

                      f(M, p0)
                      9.430690947905521

                      Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

                      q = copy(M, p0)
                      +εi = ε
                      +for i in 1:iterations
                      +    f.ε = εi
                      +    grad_f.ε = εi
                      +    global q = trust_regions(
                      +        M,
                      +        f,
                      +        grad_f,
                      +        ApproxHessianFiniteDifference(
                      +            M, q, f;
                      +            vector_transport_method=ProjectionTransport(),
                      +            retraction_method=PolarRetraction(),
                      +        ),
                      +        q;
                      +        (project!)=project!,
                      +    )
                      +    global εi *= reduction
                      +end

                      When finally setting ε we can investigate the final cost

                      f.ε = 0.0
                      +f(M, q)
                      9.412961981726742

                      Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

                      fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
                      +plot!(
                      +    fig,
                      +    q[1] * [-1, 1] * 100,
                      +    q[2] * [-1, 1] * 100;
                      +    linecolor=:red,
                      +    linewidth=2,
                      +    label="Robust PCA",
                      +);
                      +plot!(
                      +    fig,
                      +    p0[1] * [-1, 1] * 100,
                      +    p0[2] * [-1, 1] * 100;
                      +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
                      +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
                      +    linewidth=2,
                      +    linecolor=:black,
                      +    label="Standard SVD",
                      +)

                      Figure 1: The result of the robust PCA vs. SVD

                      diff --git a/v0.1.6/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.6/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..54a7aba --- /dev/null +++ b/v0.1.6/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/Rosenbrock/index.html b/v0.1.6/examples/Rosenbrock/index.html new file mode 100644 index 0000000..3dbea90 --- /dev/null +++ b/v0.1.6/examples/Rosenbrock/index.html @@ -0,0 +1,59 @@ + +Rosenbrock · ManoptExamples.jl

                      The Rosenbrock Function

                      Ronny Bergmann 2023-01-03

                      After loading the necessary packages

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using Manifolds, Manopt, ManoptExamples
                      +using Plots

                      We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).

                      a = 100.0
                      +b = 1.0
                      +p0 = [1/10, 2/10]

                      which is defined on $\mathbb R^2$, so we need

                      M = ℝ^2
                      Euclidean(2; field=ℝ)

                      and can then generate both the cost and the gradient

                      f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                      +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
                      ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

                      For comparison, we look at the initial cost

                      f(M, p0)
                      4.42

                      And to illustrate, we run two small solvers with their default settings as a comparison.

                      Gradient Descent

                      We start with the gradient descent solver.

                      Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

                      gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
                      # Solver state for `Manopt.jl`s Gradient Descent
                      +After 200 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 200:  reached
                      +    |grad f| < 1.0e-8: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

                      gd_x = get_record(gd_state, :Iteration, :Iteration)
                      +gd_y =  get_record(gd_state, :Iteration, :Cost)
                      +f(M, get_solver_result(gd_state))
                      0.10562873187751265

                      Quasi Newton

                      We can improve this using the quasi Newton algorithm

                      qn_state = quasi_Newton(M, f, grad_f, p0;
                      +    record = [:Iteration, :Cost], return_state=true
                      +)
                      # Solver state for `Manopt.jl`s Quasi Newton Method
                      +After 26 iterations
                      +
                      +## Parameters
                      +* direction update:        limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.
                      +* retraction method:       ExponentialRetraction()
                      +* vector transport method: ParallelTransport()
                      +
                      +## Stepsize
                      +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
                      +  * retraction_method = ExponentialRetraction()
                      +  * vector_transport_method = ParallelTransport()
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 1000: not reached
                      +    |grad f| < 1.0e-6: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

                      qn_x = get_record(qn_state, :Iteration, :Iteration)
                      +qn_y =  get_record(qn_state, :Iteration, :Cost)
                      +f(M, get_solver_result(qn_state))
                      1.4404666436813376e-18

                      and see that the final value is close to the one of the minimizer

                      f(M, ManoptExamples.minimizer(f))
                      0.0

                      which we also see if we plot the recorded cost.

                      fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
                      +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

                      Figure 1: The result of the robust PCA vs. SVD

                      diff --git a/v0.1.6/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.6/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..60cb72f --- /dev/null +++ b/v0.1.6/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/Total-Variation/index.html b/v0.1.6/examples/Total-Variation/index.html new file mode 100644 index 0000000..deccc9f --- /dev/null +++ b/v0.1.6/examples/Total-Variation/index.html @@ -0,0 +1,107 @@ + +Total Variation · ManoptExamples.jl

                      Total Variation Minimization

                      Ronny Bergmann 2023-06-06

                      Introduction

                      Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].

                      This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.

                      The manifold-valued ROF model

                      Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold $s = (s_i)_{i=1}^N \in \mathbb M^n$ of length $n \in \mathbb N$, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term $D(p,s)$ to “stay close to” $s$ and a regularizer $R(p)$. For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain

                      \[\operatorname*{arg\,min}_{p\in\mathcal M^n} +f(p), +\qquad +f(p) = D(p,s) + α R(p) = \sum_{i=1}^n d_{\mathcal M}^2(s_i,p_i) + α\sum_{i=1}^{n-1} d_{\mathcal M}(p_i,p_{i+1}),\]

                      where $α > 0$ is a weight parameter.

                      The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost $f(p)$ to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any $p_i=p_{i+1}$. So we have to use another technique.

                      The Cyclic Proximal Point algorithm

                      If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the Cyclic Proximal Point Algorithm [Bac14].

                      Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.

                      The Optimsation

                      using Manifolds, Manopt, ManoptExamples, ManifoldDiff
                      +using ManifoldDiff: prox_distance
                      +using ManoptExamples: prox_Total_Variation
                      +n = 500 #Signal length
                      +σ = 0.2 # amount of noise
                      +α = 0.5# in the TV model

                      We define a few colors

                      using Colors, NamedColors, ColorSchemes, Plots, Random
                      +data_color = RGBA{Float64}(colorant"black")
                      +light_color = RGBA{Float64}(colorant"brightgrey")
                      +recon_color = RGBA{Float64}(colorant"vibrantorange")
                      +noisy_color = RGBA{Float64}(colorant"vibrantteal")

                      And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.

                      Random.seed!(23)
                      +M = Circle()
                      +N = PowerManifold(M, n)
                      +data = ManoptExamples.artificial_S1_signal(n)
                      +s = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]
                      +t = range(0.0, 1.0; length=n)
                      +scene = scatter(
                      +    t,
                      +    data;
                      +    markercolor=data_color,
                      +    markerstrokecolor=data_color,
                      +    markersize=2,
                      +    lab="original",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    s;
                      +    markersize=2,
                      +    markercolor=noisy_color,
                      +    markerstrokecolor=noisy_color,
                      +    lab="noisy",
                      +)
                      +yticks!(
                      +    [-π, -π / 2, 0, π / 2, π],
                      +    [raw"$-\pi$", raw"$-\frac{\pi}{2}$", raw"$0$", raw"$\frac{\pi}{2}$", raw"$\pi$"],
                      +)

                      As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.

                      Defining cost and the proximal maps, which are actually 3 proxes to be precise.

                      f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)
                      +proxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_Total_Variation(N, α * λ, p))

                      We run the algorithm

                      o = cyclic_proximal_point(
                      +    N,
                      +    f,
                      +    proxes_f,
                      +    s;
                      +    λ=i -> π / (2 * i),
                      +    debug=[
                      +        :Iteration,
                      +        " | ",
                      +        DebugProximalParameter(),
                      +        " | ",
                      +        :Cost,
                      +        " | ",
                      +        :Change,
                      +        "\n",
                      +        1000,
                      +        :Stop,
                      +    ],
                      +    record=[:Iteration, :Cost, :Change, :Iterate],
                      +    return_state=true,
                      +);
                      Initial  |  | f(x): 59.187445 | 
                      +# 1000   | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283
                      +# 2000   | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678
                      +# 3000   | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907
                      +# 4000   | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957
                      +# 5000   | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175
                      +The algorithm reached its maximal number of iterations (5000).

                      We can see that the cost reduces nicely. Let’s extract the result an the recorded values

                      recon = get_solver_result(o)
                      +record = get_record(o)

                      We get

                      scene = scatter(
                      +    t,
                      +    data;
                      +    markercolor=data_color,
                      +    markerstrokecolor=data_color,
                      +    markersize=2,
                      +    lab="original",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    s;
                      +    markersize=2,
                      +    markercolor=light_color,
                      +    markerstrokecolor=light_color,
                      +    lab="noisy",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    recon;
                      +    markersize=2,
                      +    markercolor=recon_color,
                      +    markerstrokecolor=recon_color,
                      +    lab="reconstruction",
                      +)

                      Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”

                      Outlook

                      We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the $\operatorname{TV}_2$ yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.

                      Another extension for both first and second order TV is to apply this for manifold-valued images $S = (S_{i,j})_{i,j=1}^{m,n} \in \mathcal M^{m,n}$, where the distances in the regularizer are then used in both the first dimension $i$ and the second dimension $j$ in the data.

                      Technical details

                      This version of the example was generated with the following package versions.

                      Pkg.status()
                      Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`
                      +  [6e4b80f9] BenchmarkTools v1.5.0
                      +  [35d6a980] ColorSchemes v3.24.0
                      +  [5ae59095] Colors v0.12.10
                      +  [7073ff75] IJulia v1.24.2
                      +  [8ac3fa9e] LRUCache v1.6.1
                      +  [d3d80556] LineSearches v7.2.0
                      +  [af67fdf4] ManifoldDiff v0.3.10
                      +  [1cead3c2] Manifolds v0.9.14
                      +  [3362f125] ManifoldsBase v0.15.8
                      +  [0fc0a36d] Manopt v0.4.58
                      +  [5b8d5e80] ManoptExamples v0.1.6 `..`
                      +  [51fcb6bd] NamedColors v0.2.2
                      +  [91a5bcdd] Plots v1.40.2
                      +  [6099a3de] PythonCall v0.9.19

                      Literature

                      [Bac14]
                      M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [ROF92]
                      L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.6/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg b/v0.1.6/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg new file mode 100644 index 0000000..6e14a51 --- /dev/null +++ b/v0.1.6/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg @@ -0,0 +1,1551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg b/v0.1.6/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg new file mode 100644 index 0000000..a2f4629 --- /dev/null +++ b/v0.1.6/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg @@ -0,0 +1,1048 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.6/examples/img/bezier/Casteljau-illustr.png b/v0.1.6/examples/img/bezier/Casteljau-illustr.png new file mode 100644 index 0000000000000000000000000000000000000000..ecddd4acc643c22a65dc416fa64eb3341011fbd5 GIT binary patch literal 131251 zcmaI72S8KJ(mxEMpwbjnK&pZQQbH4w&_q;3q$o{V5FrGl1qi)~sE9P_Ei?g<8tJ`D zFQIn`JrH^gC4nzK<=*Gs|9!tel09?gH#0jkJLl}4O@M})67A)im&wS;XqBHndPzn` zzW4imk&;B|9L9Vh9pqaoDrzVzDspK!*qK{eL&?ba!o0#{pK`yr(&`iN<@SrKLW23D zjne1SJ{SB9D!8I>YvCH<-lTQy2Qx40+pWGg8h!IpxFC-1H*`l|xs9;B8om5J#f9sJ zq@>Ol$=j>dx#2&S>$kiKE~mTZSl_eIEUi*88c@~DFUs33qlX_}cqzPlhO^{0({~$U z3Z}cYjgSkSF!el^!S&XZeyX|=VM^WN?4j6;FWV+K5sQAP@a*0=q?!GhfqcJJ4Bt~x zu$;bX>ukn1>(y-;dS)5o;i;F)60q-QjF-p_in}r_>!;JwerdJBfU)Aka8zsQl6LpD zm|bO%;}~ewUXAGQn=X5-H=^SG`klh3fHzlQAuNU0mcI_%xTF5OR%v<*e~n1&`gZt* zJ4u4Yo^>zaTe{{;R}HWpg5lc6cNMX8%+g|y%J>@P-t>cJ2jxIi!{!}}BjbL3p9f7+ zqf@%yO>bmeR`$7fLAP!}xg~Yw%3I#uER8ZLFRpXiuzU~V)ok4v?=h!MNhADeW~{mi z`rv>t8kon(9Os`(@#>5&x!(ah$a?aFe`B7QI25@_AZOO|YOz}CeohKtA@r59xvDDJ zJyQE385KDL83n0DPWmGwze#rCk2V?E8*F=0^=VQ~pEGBFV`aj>WuSVV$LR01px0^bLb zk)2C9_qPo4y%dUnw|`4(J#L^PeO-b-)pH~xdkFviCb!)&wjuRG(^Bgd;+5)iu&JGm zu!))78>q0W4T*#Fl5qu-nl?~`374ylwXGxARrdBD9AHxWHyLo7>kk%$mF(?TBoh_w z9H3m1!Xm;Vx8*K#adF8wn3;oLK6>&OoOC36+X8`rg8={+7Z+g{abY_L7(f&R0s%zC z0AgZ7Bn}}*H(P{>tB|cD_n$)kmh%YeXzE}IM_Ag~a{ZQT^2W{yA$$AwZ$7U4+JB>F#bBzgY={)c_8Ch-5$JQ7G%_5UAcWAi`NIU*iAlU((e>;I=hM=duv z6z~%2Xy@c$3VrNMGN1c@`3PZY{(rdk_nAL!|0DK)hD7GK!@-Jn)^-k>a1&FgoT$tn zG59Cx-vN~Q9RaX{hO(TPu!s!cUq}DVp#ybrB&7j~>yIJv7w6y9|K`@Rw1H|OOl;tC zqEaHFk{~HD5m8Z5AV>=M7x3Q<{|(i!HbI!%IoQalnwWB_YyQRmFX}(o%}l{hNQ@>3 zIZGQ87!&}vg~x>BqE{p_h^;@{1?xEp%opV zCI~wREjv4Fxqp_1KXLy&`(Hp+(wH?fL74nY@tA!;fl4iYzc zBl5;XLQGWR4;BAg%>Se6sih;Svu^)LDpG3wQCT#h_Ww!!`-HXS9~A;_;@}AVo!7Fr z|4!_Gm6U%~jNh0)#s}Ec!o(H^HIoC#0REHkZpZUW7x1|5%`@iM6SU^cx{T~@2Ap#Z={W~y!+Vuz5|1HGQ))8T1YYP1_ikpjp zge1+)B!wg-NLdY%FnJ>+VgeK)c~8pZjTrQA(f@$|L-g;`2>zXd)=t0OrfqA9kQ0{y z{4er9_sbA0|O8H)OGsyR{x61?X{)yo#lGtNe;3LsSiV zqle7zJmn=p{c}}iQ_d3`;>kx{Q!%xB88O*Er>Zt8R|oy&39~Bn-dlbyn4Rb{!}9%M z13*{fuMCwK4hOU>-p~`Lne2YYLw3{9vHQMy@UP`__KJ5V=iBXbDGayyF4S1 zdws3v^1aHym#Hmh6*DkdH6J2f>Ak<@FYk#jL3yozv?H|Gt+7pfw$}Z&fUn;s4%-oj zBhZP`F7qCklj+?$;zXSnCL(Ds9h(etT#927Hay%qJw1hdtg1UZsq-|8ExU@vXlh*GpD|!FKIf+>UrR%EnfLiQ z5(EiJV61*i$<{~eF`*?*ekUw+a;vngW?dciJ4W)yY4XR9*%p#dSCYNc%?G5S2Ru*x z<@QpGdQjq)wfMR- zq7i|c^QbM+fnWqVw5Y$(-sINFE#rjK(*1riXP4=U>tE2M({G;dIoieg6bYm0vwiC) z&KA^97hnQJM3jr_qT2u`p@EaoF_3gnEPs#pG(Z2RsCNO@M0yb!F6-_#u~_ zoE=If`6uRzdtAQu44+MI#>oAmX8`sw%v2li#*eH;`K=#6>%IqS-ktxjb5K@CR4yTS zc1I)=7O*jzRi);w$*;<#qSHJ*LEF61nwYFHXDl;l)!~ygn^0?e+%rbqBjHHK%??4B zN0{F{!l2#&G~H=6eqRxVRaw;Po(2q+XwsE9HX_C2;Z|E@dEE0Awv{k@`)|r9Y~oG$ zj4H?@Y4%!ZCdc+?B}DPnhnyH((~545OGg9i6@q=#NwmW;J>aI@kIK3u(NMRp=J@rq zN8SCK0xVNgqGEH{eUuNe)?!DvT+8NX)0n?f7zGUjGY`DvJf**PiOi==g>y27$Ife@EEpXoGSq5JM6a+ag}*QGuIaLm26=*1|bqMg9&kVxz8XV4YG*KP;f zdAsyKEwHnn^p6z!71f`EEL0si|}dOFq)ULRF5nt{rTq9CW{ zWd`BG*kS{5^pts4r2$0BAVyxT+$o9e8}D03`?2!>`9jhF4N6LB{kxbrmADUT<2U9C;$zF)B_Y_Q6(R)91g8Rg2NdcGH z;6qvA!eF2)rH=*JxDqBuNub7XaUz4-*Kon-9VBA#Tg+ic`yp1QoLGvVC1kM`Pd zWUs8cSHle?&@ha?yhKCirNZj`Lx-1Kd~0JSUN;*FtXnUg;CMY_g+6JIIt_pl?6Ovm z76p^`e<;b~8rVdr-rmrI`_A*b%k*be7N$;h?+Eym(c1!$^K-pGDGD-)x%4aNV%jG; zAt5!@oI>&%`6qK(2}Ej&9S`RUUCP$CTraAr*2!s-FUG4;e7Z{~Bvv|fL$hhB;dEBoO6c927W z_XTfHvR=p>Ad-T>d9PJ2FY5^|Y8`zI4RxC9W9i9_^@gSpkLZCceuRLGi|lMwT$0y~X4c+#=M z)`iU;UCHx^I_rHY^@Mb zn(b2eN(;zQ%UcR{6RD&^A~^L+IP`tjx4h|?oLf$E+={}qluQ*UWwdLd<yA1faO! zAX}f4B5iC@Wy&cmLm}=LP${Q@z-Y~$85nTjhx&*{7qIRh$ry_K{)VJiDxnO@QQp=|T~~<_5$b+j;dyfUSC> z;_^W~=%XB*1Np_%{Cz&qfx@q)0YS%i6zFU#tu&vS0gzR@=*6U;{{X%-NuSY#0u(tx zWj5?XSC@+ydDJcV{T+E?nz#=AXMr#8J^ zu!2Gg^F)ycXRkE|hD@S&=+Xc}4qEa|Ns;Xp5eZ|J#~}jJ+o=(-;;E{+nb{P}uTh8L zD;fFW_HtsLhz9T_l!Z*jI5In2D{~7ulHMk)veh z`Dx4Gn)28{ijK-#t@?ZinG2`O_DZjN-dZ-k(dRhRXI#K6`9;rc5zbwqn+y%VhJ4Cm zPkDTeVuOKdvdjbzze4ZtIKu;^q5Ir)zY6C)ajz1qD$|3q(2;(N z&Dpu@w4UZ;bv=1=Y->8=)vv+$cc{DWNs$tTVIFFVd=dsn~x7TbS=KkLu%9S zs4+8ZM+3#}O>mUPMzn4B)?YR!m+5Qz6%J6EcYsH4xGF^*aeu^f8sjTRh@RcOD8Yu- zijg&9Ho2KAOQXWM)!V)esVEf{8c)MJzGB6QT`hLo2}}AiZ33i*=@fa)Ft*##e!5?o zWW4!4hF*S(W!FK2&D*7teM9>ZJ;!m+yWN?K%r102j>LwiWzW&d4s>i^_YBjPpRrQ4 z#}w`&8x-a3l4h$m{rRcvq9BkE3bRU72((UmfD$O-c~^Mw7!-g^CXt zNjgjx;yrPTI{0|M$h}fg$Gn@(o@LcB$bE4NWpz7IxVmRqd}pKYVUu;YOKYaqU;x8|ICfunb{wOFE?i%AGq!Zyo#aU z1BP2_@O=dRxFe_g<%Fp% zm!DX<>QxS3n%Ry!B4OJGpco1Y10i3rEo8Y5f7M$_2!=rFAtzxb&*|CmK*y1%CkxRi zq-@KpXwsq5Kn16(PEH?og905(&EiZKoQl-~I<(ZB3Z_rY3svfF(cJ>sGq^8jP6mjF zJb2WZJK(S*yYG^v?uFCjUL$hRK!1C~0vgKL#7_U}OljMLHY8 zXyJReQ9sDZPH6CmdZ%0~xp1GI*x}rs)vjrNIG(5T@H7SPo$Y!&+jy3m%Qmz_fDlDP zr3CZAv2KRb{sh1C-=pfcJ-UkT&>i}nr{nor)9!3sO|#61*-gTG>VdY=g8sYM#Fysp zK+|G{=Ie3-&S#=qmonPFwuYs(J{4c4xeuFLs9bcSdwf$#T>Xc;6P?x=<(*x!;;!3P zy#sl7pRbaE5Kd0BcG@Y{bVCkhUhBs)wj)d9ugAgc+Ema~70yYevJVSkHe|<7INuJ< zyqro#$uxJ^2E46H7#n%L%bp=EZ-`R##s)(6zPY4Nz5pi{-(utWY4Q8^p^t%M*_bp; zz9BZWq!Y5r{i8MAU$C^I1*rDpppQ5iOd)t|$M!g*6l1c!u>e{-L`GbEo2Gn>WxhM? zsb+q$8;}73yi9QkYQNCIAWvVuZAz3P zwN}d5b&8V^bON5`^Zrz>aIQ6~evopf`~uyP`uFo4^-itjoj~I;9wAYK1e1YOP_xcQNE1P5ehs%`P(C@r?^w{1(fyY#VdF<7*!v zgwWBD`o#kdN{tx|Kkl@8vb$pbn8uPt>&$=l5LN_5ckEOr~78l?i<>2@XOJcE@Z2d)IOR;Y!daF3a>! ztCZ)rK+XcU=kk_&)4~(^PmVe!y2ne3#=MRWlKH`BrM2{1M1Whn$|mW5Xc2wY}<&TAivmdM5+sWEiT-8{a;WPAFH!1nG@loI-D~+Ag{@vu< z6V7awwL$d(PCR?tZcFQRI;x4JX%QUG=}+? zUqZr6E9i^{8b7lS<& z)+P>l=(k-yr|z_K}Uy z(O1>1`jrjq2eY*$7G6I40h>R3d{&>F-&gm6;f!Z;UkiB`7t%D)LUXmw4H&$ODwMuf zYsCJ9(rwlO1{JeuXs`7k;ptxn;W>LfB9phUK^>Qq7h6rB}{vf zn8A(FsXR*53vmITMjO}`NY%MsNYuWfSX&Z9y0;st4H%AT5K~jrG#cYXG1hS!P_C$S zhSe3at)+G4;!dsEZN~+aHjKL}>o}oJ z&fe%}OK-SL^(};DR3i5|B0=E=viDJ3^yhTd?$5O0)&L7T<6i?Ut?XBNUeXeN70gr1 zQ?k$Hp0nT3Vaz>$X_j+qj6FR^jL2l?6gr?2GOc^OlNfa-FLN@6_NMj*I-5+}yU3Fk zuaxhI0QZ#d+@CQDd%%*#hFJaHiKC0bKdUagR~@t+q1_Spye(rmNOuTl47=elwS)Tl3ke&xV|c z5x@h#Cdaq}^l-UKRENeW_~~os)k?ZadKp30b5N}+ACQ%C4Zq@ETywoZ$Ca8`ds3Qz z*3;Rn4es6&EvG3wnSVgT2S$cond;T4z2nRqR`X<#O$+Qi7O|C=WNz6BU&8fdEv~-Z z{VH_C9@E3)5PzL_J*c(ogHRo+BP)}`(#5m6pemCZ(brtSYS>SED6CO!0NI3i6|pZ| z|1}=t<5WYw(~b5y-Sw$a%qGo8Jb6SvC@Igl>KyRl6pwYDrUYfJOhoD0bcEHF&(+qN zbD#z02S7Xeg|Y_XI|J99d527kLsog-h+GOcF_U0%;WF#>z2jVT+oOX92Cw{e;fzmZ z?2uYM@ZL*3vy|F{XfF!c!laVtes?@M%ks>He8xQwgEa9i=iI(F+&i+PLYgTvZE;Tr zO}!p?J{6Sc{beMY77bfHqG`3YN*zBq2=A;TI{Iv&iSUJ{f-+<6=Y%VC44+9WJ{-z4 zv)ZIF*WcY{K=CqjSUxRi2qTb5Y^Qn4?z}q94&bfiRO)%UPcx*A$aI_G=|*(5v9#TY zZ1}2zH=d!ng{4dvqK<@?2FZ_zbu67{`&=|>i;AYX*(%~R)E+0uB+DEZU!W-V1JDW! zNYFHnUTZD*z-faL0$QP6Z|macY%bWZ>4ehAw6hAo(~QYF`FInF@L9)Q^XeYo%*Fcb zTuR=$bjAURD)4A!cR}7f7*#fXS4*;cI;L%_%fhfk>2!j$k_r$o-5r8{wtW+c`#Is( zIbIS}o=j|T1B(?2sfCA$Czu@SA8)X9AiY}xLvwP^ZM{Rcne@r<1v-+J7^|uxPFg`% z{B`$U`a@CHY`QwGc*+Z>;+pcp-SbPWjKpBm%uF_EcC`sTqf|`vEbXI}BAI@Lk5AI4 zTHj`?9t@!<0d~0!o$~qWoh=2MF{Ye!XeS0%@89>_N(_o^KY>u4gM}TeUS}9aA73_P zJ;%a!B#WOMU|-78oX_kQJN{(BaXaW%*V=b=&A5I+(;M>Aq3(le(Z}8nhx`?Y&NcH_ z$Rn`_Q=p3{g|$~)nrNjEIZS!tvC;JVGlsp8;S@7{j@H@v#M)j8KX4{y1R6zdhoJB= zvx?$ZGm4J`x7uE5E*P*}zo_e;vV+VytZ9^n-v8F4N_bl`f@#Zy(nDMv9lSw+W&eU( zhANjPQ6Q`K>H0x29{B5P%;6hGKOJr)>r*Z#56_k+uq27aVy%ws%8*!y(KL5mVJ;AG z$}FZ*$JL^4$O)7<6J8=qq7QbxBh(q~HThUhy!H_K)qtY9O|0E-*2T5Mw>(pJ-O`a? zI0U9g5m6yx^r+2Gj&0eZ>_V7Lj9Zi_J$PZY-)>9A*zgd43O>z2Ii0M|J)!B%uinw| znwKD=WKhD>$C+~|q+=Wvh9bB-;`gi?)xFeW&qBYxX`BXD*AF4gcg}cfuKWAkXx+|t zsabv4-31sboRMp7pAml^)FYGlitVy#=A;~7sOWjfc7cywK-5(UiulMFx1H{|`Ac=n z!W5B;PpJIASK3gvoRz;523y$Od~_FtY)_p?=9s;vt5X8B1N#|+8NF`kzswxq;{47s zg1(FinwlN3)zB5t#vHdu)o!mEpYFu?q+7_(Om=qMlf72W@cZ`i&KqN!RIs;wFL;Nw zGuFq5B@h6k=?pWzr{q0-YQz$2)Z%wb|3lcq*FNY1@Y-VWOk5vhd>mQl8l0s@InhmJ zw;bQmTr}pEjG6D3yH|HSe#%wmiSgtR)8KVTqRLCdiEJWl9&iGmc;JxV1{QMqLz{3) zcE#*^^KsQixYytFZEQG;{g<8;2e4F~S!}X- zcS^-=;L8(Z`KDIdiNp?HDSV0gsY~ZiPfeBvSz``?Ot<`?Zp$ZOCgg$e1ySpu>oAVA zVHmQnsI@ar`hl5F&tXM0t?MtB=b&Ex!5=sjfK#^?pEBLY_^c3Hqt?O7J-eW*}-~6ktBNbzhxAHhc0{@Ep6k zYip6f{_`a0N497dBzaHuLMkNBQBTKcNjs$Ub5HEbcznTog(qp_4$%(Ssp;{anJdgG zv*Iznms-`(%e4qEbDF2+uZSxW?%H_c9|{O4Iae5w z&aT=VGAdg*6KKb~8_QJft1S80%4*zqyY&%JpvsU>Es9bCW9ZL|p|m>`q2;%hBIS7C z1m4EZW8%KlwClWA-Cs9$$OfpP9m$@7Ryo(F<+Qb+s&-1{wDEDKhcMEjFjd2i#TFW4jl>!%v_1 zf=tSZIV#C>>zGS5E{)84C*+y28PeHgroDc~D#PGEL=d*mo%RR><<-^$>+Fc z-JH>}sewHWIsvHyrLUiN~BN`>j`ExSZr=tS#+V2X9e(Wp@^1avwsX|02caSe3a=cm#DluCqz&+SW1UJf3M_?A5_v} zc2sFM6Q{RW1my%RHMGiDJZdeD@HkmPR{Fp?Tfc^A_DJmbvJ#e6leWJC@pH1ggLYde zbu!Bh+GtwmDb9mX$1QrZ)Cgow!!CDAlR{S4<`H1*>P; z*BY!G?U!h@tdK2>#)xW#3ra3pvNzhPSVR{NRIN_ZPZk8Y<=*a}+Yoe!0ML0w69RM3 za*Mg89J1{M5bn;z{Sh=zvYs2zwwC70O0u)^Nk0|c6xZmNV4;u2v$xhqYU&`wJZV~E zl`V{c`<~RQ&lNdCw_wC4^)`;O1|6gid|ANu-TXD<#9qh|#A#;NDSLlh%n?fG+T|*bE9dr?~oM)93w$~j)T@0^D`7F=wrq{Q9NIr>(Y#29%#bVv=z4n zkV{SMDM`38$g6X?tlNK9jD^{&q+TBbby*6uN`?&4{=BsRE6rJyuTN6=tNV%-WmD2V zXO4-|KIg%=Ef*{5Ijyl^537{JFD9ka0Z#Ki8}g+U+u9(#>mmZE5X(niwLt`xY{t5b zCo9H=PcT7*huzNT!5}MqM1A=Hs?gui>pV1<5=m+k|5Upy|qYak57&#+j0hhC*{Hl#(Ci!hf`E3oA z%`%MlNmgTpjKk>pTeLEeu=+Q-C)anHx~uP`6b(JCo)ADSmMUpconcFOPn+2+6W_}k zcv!)@7P=mGJ*oc|EHU4BH9;u$7TY46`R0>Whg%e@Clfn@@o43VZ+Y}eKk44_7CN+b z4z~kMz1Se)@AQ7HodG?&xdCo0v06!_i-d3P9F_+!qyRG>uVmM}}-o)#R z+I2+HzW$iBcEmfE>qJzJdfVyO56%MUU9wfc?vE^}EwDSP2WUd`!Z;w{T&24HcNZr6kc!S_5J zSo@$O8IpLQJ@i7}h*vn%0!8S^oeUTJT1xX;kooGTnTu(C+mUe<+UI?II=F-aN0b*E z^eTa+PUM9pT3r^Q9*LX4>Th-jnL^!$BYCPJnq@ECh^C3)n{0jUX$Y5V!P?EUQQmI> zM5?m~Ug;Gyr^pX3ckgh*o*e^g1u!2QD>ORsuxE0d`3emfLV4&(`KD}&P24FC%^Sik z@eB3*T+S4mp922yaMANJ z=WtRsSoBk6lYYt>Y1<3i@AOZnfuvhvns9oS2b?{ll{o}@;e;IkhOi`cb~3)?2*Ju2 zXaW6Q_Cg|NVcHDLH(}c0$tjaK8F0T|GF*uFw8rV)ejsy7{PpBK7F&Gk#m&eB=<-j0 zr{POq5-xun=+0C7J=xfRhc{5&JcRIS@OtXmzoPoQX086`Gw4kRm(Cx7 zUlR)ljSXz1d#k$Mh?g5m86k^l=XwnihobFgdT3rLcODFXs5DJqr#C(jII|nU^%~b4 zEhS*I5LL>r+ustO%tc(b4&464a(q)VUu`~H&9Rg&TPBk(w>s;fqwa^f1yi;u1isZh z%S2_|CGn1~n&$N$^9Res3ZfoeJ2|k&@YG2n1y>qE7u;tH>s{rmf-YmKJ9>>hK_Sm; zEESSEaf-XyipyqIozIL?@e+zrx|mR>QsB3@6Rt!-MNk__W3+EIP8U0);$+2o)rY85I56@MGwdco_5{ z>{Ox$*%0Y3UKZ1u+F2KJrFN@Y?ZE~cSkb!OE6%1?%^{W-VD=+1&sHzG)csLU!eu0w zIP>%5cy_EFlK_CqS5~TJD@EZE`+>WqLvPP*uiJU88k`NN7$3hpW1K})Lvy>YkAIgu zxaCP7Z2uV^oftXt2)CO_pHGL67n1}y|IC;%6e>wBWirQfbs1t8-$g?|%xN+EJ6qZz zgJwiyANH_K!kcKPiprtevLSUZwso!!+9a}p^+apUbxRG}L?}XEI04m=g}@KWJ&)Kj zkxm^d^fh&P)6vuI?up|*H}$dt8;S(zAPMJgC4`L}tQ9zJ>7?KF{pM9*VVE6vnx)U~ zX}2;58{$8d(i+_QSfPBroCmod|3xsXe^uwX(-&EBM^2|7p}!^#pDePMNS)5bN3mWo z&L!py)L!|{7(Xip>~vnDNfP6=Us_=GU!Pbrk5PB)&;%FgdgZ6*sYuV<|70^21e$Kk zbt+C`BDXAh+-H0q-I^Nbev>N#)fB(SwcVOp^QHPwlB-W?NU4tcQL9i5YdP?>rJd}t zw^pJ+B5KR$3e1WNZj^WP)WPf1q1BgsAKU6S?~L4AhKZyVk6Q4U%N@$`-^1yrr)-cw4K`JFt+>e7LcL1o!v zH6w5)I!mSKJpG=oC1ZUYP5?`cc`%lCwkzdB`v28&`($xzeiz)>e80OaRj1}_$fR;r z|5Di#r@rYU{WS0F?tQ;YCs}t6cb$Znp4;eEr&1~!Zy~WVSexrg7IIoe%y-sx-?-L3 zJJ&=*yk{?nO^ux9Kk(|Qe$s}{U8RLSg1l&1Fl;u?r2uCJBZWdU(u5}BB0lJ?3ieFa z*7^- z1q^4YyG;ow-9d8yth413H>s)l==hyd0YCI%{`>gt>eUhN^%01^Jrk~Sxo%jq=Zdg8 zX@{M0Qf^gvb`kK_xEJ4da37QQ0!kZp_#xgmE-N{IabLDblu8Ft+PDsmg~!#`tBPAe z&jZ<8L=4U+H3JgxmJ1)`fA-KB83uz_D@S zw}YB_j$$-23Lek&b-5V%5@>QCP(BS@aMA{swSiTiB?$Mrd7-1jur^`-r?K8sF;v9D zsHP3(pd9H;xl1W}G3Z7}u5WL}u@wfDuRGzruH>_)#5wnMb7qh?Y>ohrmR?Wb#IP!5 zMb?s5sJm-9Aw4@z_bKWsqQBF|;c;$gaxuyT@oV}0EZ|!?it4!KImAW{etN@e1X{=G z!v+;$)EseQcb!r3Ftfu0of3IAeSMS4*LhPb0)W%^W+%H1b;p>nLeiD##(4HpXC`z- z(c^yDk@=&QRj(3lSJn1S8|X;w&)N%TosTCTEuC`Xck>4yY<@XE?DE#(V{><1fH*3| zLD4DJIBOtPYDB;irqZsiO|@GP+vCc73pF0+2zQ06QsC;tPOb^f|GZT1Y9E{LbfFp) z%7sL{b3#^HNIQVq9}GuNd)*w~IRUS>7OzJ}i3`Amex&(Qvpb%fu91_?>xnuw)D)98 zIKfE`PZIz`G(^-j8<^jx&HA!)#=XRuUM8MbW-0+LLZGOJ$wIKxnCyt^EQqp)es>pW zS3Kje%KTh(RnRB;o!qW>@FnoiK2VeQwffn^^&^TWUvG_Gdp-F5{;SS>R+bY9OG?g& z;!bTO*}KUQ_>e8nwi8BY@IN`k6gpRO2V3X~S9SsUEOr=GaJ0F~YX~`?IcZ zs-LSKn{I)w9-eDdD5t)1FP!R2l@(_e@~E?8n>ZrIK%X-SEJ<5o5aW64|= zq@Epp$rd{tm(c7w#Y=T~qj3@$AZBR)HDRWAd))YTV$sw5uiUJap1V2t0l_)%Bo7f_RPoAV(DCs(8Lz^{?+)+AA}=10;1C=;s$tTowQg% z{!F7|lAR&7-YJ~OIh0E<7VmJf=mL+hoTQqUupQl_ugj`bi)Z<)CKqtazv*fR?4tsE zb_nC5(Yx}@y8%AyqU)uNgBRGv{Yqz_ZoQRv2`>eihbbOVT>4rv^2F#^zz8FG)S8uf z7W&pxEm2eQC?zysc~QePvqQ}=SE1?SxEcZHfWzbkeX}JzhNPNQ~`6nzT3PD}R^LTncDi&$f=`)Qtd zHGrk}wqg%vdt=BgCnD>D#6}8&1~IRP1c#H$tiwap?`axP;~t}*kb_=%4WNn1WQKl6 zZ7{7Q$^5NqRIRRn8`er?BMLw1hz5*Mm2gOV>g7lE6E>*)<>d8VI%I;pe5Ux(BhhId zk84_-qF?HYdK^3iA^b6(;DR~qtK+?NL{Hc0-R@vmNbjm;5RyUyS)aWs#(%ao826$P z52iTXy39NXZGWY=DxC1R%mAS;zdw7O=!_gNkN^aJw-ZrE587!}4M<~6b9DxJG6tF~ zk?z~5wDpn8i(`cWQc=XiX3SwQ#@ST2Jbt z*1Vrb;RP1EjAw#g^no=;+(YwuuP=SsCT*uBP>#wT`b9aGoF^*Z@2|;G%agB>>z#>Y zflYh;XpoCK6H#x~E9v`1k6nvD-|xHVxbu4|xeCz~FEn;Cx;rZmWO-_H4sE7Z8~qq2 zl9aV`g+uY&c)c@~7rs>}U$r;UGACCJr;O=WI+kc_oVlyUK3(jtw`iy-zVBEvb(pT- zaTe!*E7M^!03qLPQhR>FHl(7tip}^hV7u_^R8it}LoZ)~)nF-aV z`I@=oT)!?kE*-|5Z!BsOJ-D7H_MwO8XygL#6APn5mR2e^E7q0)y}&jfw$m$hz)KcX zywfW+fUICg*TDJLpvaZj>(b6vNTVxu-#4@ksNM`Dx6I-}{<-SvMOgu<#cDCa8Qa()U!^@7Tk?N)U9#lRa$92)~&#t^Id4xOjRX4bov1PuX z_C-xPJTWYfyJ$rN93CRg-_~>_9S7iSx@*grNK;$V{QaE*qj&qw%}%o8*_$)om)L;G zYQl2pYGLA$Hyze7Gr5XR`bh1DIgS!U*J55`catb+Xb{QNnPlkMLE4v_J+661e*cf3 z5zwf49h9;i2$_F1;-BAOcbT;B;Jgy~@GQ{*j(K@vm7C{tbG%HjHBS2Zyt>ZtrT(M4 zPH(~dytZe(Yrjex(%nX~rrEw#=7cIl!>7p6X2N?l@1eP$AE^bEW}K>i9Vi?Rvqp0E z-R)_Fdrn;JBe#*?SifwELkqiF@lFH`;4GrFvz@mMY3cH_YK}NPNn2mHKbq<95d((W zPt9g&I!ZvAQ7re$J_}}8P%3yJ-Gt;xmW|slol+cr5tje7+k}f_I=hhJ332Laqx5{%Ay=CxqV7l(tt%ge)8|9)@9V`392I^3 zv`wB+Soz?93^Pu{lkf3r23^>p_xk#cC-K&~(XX7PdiP~4ee{_%skw61ND~wBtISlC z?Ro)-TFTR6HTL!J`8a*z76zB6iC+&{H>70Y?KN$or}KJ99{py0D9LSQO1no!vqtt= zGKJ~tLYFq0&p;``JWJ1Cl2KHAq`*nvo@TUCF2O-Jvn9DYsFTx$h#NPtT($^(?Fe(|GgBy7H^ZJeyk z=46DGzc5KKcJGLlIOB^CQ0%;ZB>j0giXT1ynq%=>qI-!!>0fI4t~DL zK;Gx9A{muDEk~MdeNc`W?tfOPVGx^`X}4fyCFHHbi*I}Zv~l;q%-t*VvfXY>00P$? z1Ep4F-K{@I-S(TaPgx_x(I$unvOh{&TN%5_h2+;i`%c&8r5sgeK(%FQSo4`N4X3sD)|A*;(oS2Q?U;fp(n zy0`TO`h|U-g5^MSs7hebThg{Tjwm{&b^CY1^Whn*_OAYY%rTk4^0ueFjR1(3Uhizj zAHP&VwgHcLFfvUv@0JuCA)e@muzr~|r20hCa&hr;dPB5EogM6_kdVZ;x;cZJW)t5t zX;Kd(lSQ^IBV@|Fr0sVW7zr5u#JTv1H-MWHr$l?^PX~!6Wkv%%!U#7gwx7B*pvpy94KAZ7mxxfTxiv-3As%&&>@8FUO%X}m#2PrmJD&gD7Q^J7v9tE3R5B`+j#H+XZN{Xiz9 zR3=L|Faj+4WX_<;8P=AD%u{;w-SWgjo}LMb zuJY65h{vm{^4pbOsLwKoU6>l1g!eE=j4vQixg0m4JR#8m-_gBDhKW_gi(G7 zm~ZpCIsVSy=odyp1L2$_XdESNjE$__ktOXf^TXvt8Yk(FQ)bFR;_(K1+dy8ij7S{m z5g2&W>rRlk)B4Mo{>=z8H9&{VvscP07kTlQ7-Q&edk=aom$CCD0^GvQ>-%nI&wOn8 zaV2E&m&Zm$riafoIoBtyY994Ym$~8lJXHJf>8Gn2RE0yfas^pJa!aOiOXMxCeV%W3 zRl`QULHjaMUTvQsHLFIOxP#F7@?&CpvdcKOSH-8(QH9si#_)_ojT7y-Y`G~zrOw`5 zb*}##Q-cc96>o8wv~%&oo^i$VxQ11K{+zk0xXMNR`1E1J?`O|V0ybBBV&So=p;vr+;?}@&T(5Xsw*;xDWaMEa zHk!Qf`ZWtw>*TVYCZ?;S&SbKfw=v@<$}QtB@WgYjd*R9gT9&}m9vhvyC4ZRY33@W5R2y0n}Q34VC@(H z8o8~cd*7|n;W#mvqm~a}uXEFUIr#arxT=9QJMY~D`LgIQr#k$Y-M4yENfqd8&LIu8 zR~Eac#hPjA$!(OB_2rT0Gm~NAFoe?;8MVthKd6*8R9;29Iz2RJeG3&Bc@3qe|YmMnnedOJ-6(fUAlvVBqB2SMvPUi3gtt-ElW0hL%IoMc-;*0M`1$cY=%nUp*B-BsI<~Rw z7}S?PVB;sQ?(wztuI~ZY8S^jgl}Lwev3iS3>4`u=3V?CwM7rMbvcBpKtC?@7=F{_B zJEEZ1;_F!nUc7R|A{3^-{RIo<^PL#g@jS)Pu($p8`IKs9Iu$O%G(?k+9+t6L7|gi{ z_4y5SQLszZwI|KlrrzO;MdM1R@G0FrKk4SVHRe~F=UEdSkk?Qj`7BtOkbE{t21vKb zG^<~1ydwOno-06HCWNjarGQV4cX74c^$=z)RvthIRdHcC+Wun4$=5HL^G?<74B8Qt zOY^~|+5XkIb;O>{4ZW;n<&fh-ro9sSFkgi8$8JP#k=*w9Sp0C$Bh0vlH*jaAvm^V? zA+gf)#fFI!hzBoQLa>cPjB?+*Ww;)8EadPo$+7+$@=$k>Z>tLD6hKXSwD^K225Qk^ zmHyOzN?M|Yyz*Pu2ESQk_#q$96{ZWDw{g7aONN_X9R z@4X%WIp8C1(?Pu%2J+an`rsGu4k()WwQahrcA>9;E)Q_D1hknmCmwq2U z+UMN2wF+M1+UIfi=tzqb=4?Uhg!2pszKdSV=a5|D>6v>rlD@}=qM2uTTnBV~=e<+T znvgvEh8u2pQ|+x^bK{LSb_Tp-|ETmFiW0E$_U?w)!{HYnm-V=YV?T znXQ3`7W%n)OD`#PnXSoXVL$p z8c6+a;q6!a_>KJ#-qLWiwcpapw$-YJcXIt)b-)|y{*9$jk1WMKf1nWEGPIMKX6C*K z6@^BFG9}D?6BngdmS-T{ew0oEbSjsQkWPb+ zK|w~q%EgOv!ykM!Efac0O(zrQY5~4W9a1OhiO+qTC-?G93P<4{mEJEWb&fMk9TN8O zSNV*mfO={J2GYt(I724X( zn=oeS(Y@5YrPa!CTzqg6qLcfC;`HORS8&9^3GLVy&o0k!Vn_5B;2AAxakB2|0sA7& zed;DoIpRWFT=XV!3A;k-2TdR5GO_WN0Djz~qvFxPv#lMgI=(0`muf8|YF%Jqzn3nWBK z-sDewA2;!#*M`c}@9+js`J*6pVskk4{_AX`@{Ef+DCfSCxBpcCrE=;w!>uw-q*Fg} z4!s)s%0H*o4E*(VlK7U|)3NW;eFcuPaEuFSgh;N_UvfB9eK6!*XkxmNW zv}x{jbYZ|VJhOjJ!%RY)&IRDQ(m9jQj9*9PWTc@XbTKfllyA1rpy}M`w&lZDo-k$M zpYfAlTCO%9gA=}la5H#-@7Yo(gOoBtucaehzQ|18Ha+!Cn6f;}6F!oD+%WYJh7UZF zvq76dC4?6sZU6v407*naR34WJt=#a^2W=f*`)Tudo`rtom%-{dKHBz-4vxb`Q+sCx zEM>GIoj|7r>G~F(j*hnJ?!^b-Yh$vGyv5~S=otvrA!#jMixb+((>{;8Z`-uJZ}B6) zq=z3kcuL!~^=tFD_wt%>*i(1%UH;H*@eaFh_&Hk>vomGa{zZNF{gv`mS`~4!-cjGY z4aUP-_lUIHZo7?j>bzTx4F7%2zHh0~^x10kYbXYVvInLUo4HP_T!$4;c}Kyxc(~&X zxjcAdyxg}=DQWV%cct^oqi!Gu$FqwQZb7~lGHPF8dLl+jPk)t zzLY7SH1&+ZkOwc~$Uzfki6 zGL>;0+SBmS$HmL2vNIU!Yv|Y!cTj7iDwfTcLDolAvJB&v-{q+8`elQ74!e4L_qMLi=lBofZGRMg#yuc?T z_~hl4;6Crc9T%qT3jH(Nxf%e!qE=V`uxNd4a3n>ER>s!C@eji%#N#D_`9u}|fu`m5TJ}Qs;`QC!1cV`diyS%gTT()h$`pvnb_jiik`-{f6p0tziC&r=Q zdFP$`H{EoTLvUYNqr$H$=gmrb@>IKD~wQ7`#8bSn^y zb!HEf(wG!49deu;Lq)B=5mVM>;9j;``z#U z^(R01$v=@-llx_E(#_a8Im^$S9HkmHBUv|* z=q%XB`=r3oz_$tkoGuNWNomXz5C84er`@LI9!~CsE#x`%%yWyM`+mN}PZB0C+(m(Q zF&JSC)o0nD%*bNdWh*ab&l2|eO*^$===O2v@r*Y4nVq`K(o^<4=x+iI^{2b^*mV@Z zHwbV5lpS`6*R%L(q4Mli*%y>wa{n*&jg1%jBNw0co|e`o;!o}oHnDcav(Z^K?Ae-` ze{w0wzvH|Ms@=Q8aowJ*SGOF1v;Q`U0l(J= zxmd9x$z9K4GK5g@*OVdu5Pt_ z^QwB4;m_Az*4aWo6Jx29xnI?XI}T@kbgGUqt&wGrEqgg^l8?yD(m_UZv|h0Xop`;N znvxssmDhe|HD*&5c_{j}>dK*&oG{9y{KwENVJ`Tj@m_Tfby_uKf z$sjgsQm39iz&_`{CJYS3PYadD$@hx}$+h(VpK4-L|KD=seHFizZ+LB;L$8K9t-)$$ z{>)N>f92FV@2XYKv7?o{@YU7PIn2bGrbePA? zZq-1Z0~}8RWN0w0Z5_y+)iE89i`C~guwla{(W$l{*s}1^88GW$sLDK5az9u5^S&f^ zdp&pCvBK3$X1*M3RfP^3syoeCjsJtS)OD)joXEIRPbbr`KDw+;hMJm6)3*(E?94aC_S18cAiIy$XH*e-IIbe2v= z^v^`ZfXGZ;{$uFl>3SXRzM}W++E0J=0sp&2Z!?x?ClvVP9%4d*D@N-Yrw+UQtD50_ zLM?OIH@~vfZnjRbD9NTcbMnmI`J}R?^pxL>zzNfBKGhzX#QAK4vDAL_bd_~c_A!iS znq>$NB#{3$@apI)+jUh9LYJ}^uCGoC@_D70EwgPgt5Zj(+6q zI5sISn}D}94*lSL^9$w7Ur`SGi)vSCtbdCaZ+DlOVhDMCMc6aY#*m?wNc*V z^zkZxpC2grr?r%S^TGS+TjSKX!lC;LkoV0sP#K`_aR{uS^MGbLmU(<9m{Mev2w@X| z0#D-`1TJx&^I`A;Bx~!5;eR^&zBdKPj~x$<8Rh4Y+*Q?pNkH=hFoyEsvx}|oFZkZ;^uxW-8ztcD=^;BnP1?1iK z*VNk1PEOOvDtXs2Wc*#)b5)@13?x^{$ExZ-?{dj9eUd}s(6&WirG|mjC;P13w3S{G{zlKx9cZWqxLEt zeQ`N+Uxw>G9;2}xq%az`Z%%b#2N81bb&Yf&OrowNGxTYQWtZT)zpCwsa zM%sVXI;;Fu^RTXMH7#F}W!^Ta&ylWt&^B!y=82zK`ZR;Z42Z0>a_Yy`%^Dz_I@nMD zzsjlKRP@em`k%OLtV1`NveaJho4>GLYxq`9te~rphBo@M-{R|NUVESnn*#X9uMz2_ zpkr|01~BqE*}e`=VN(8&i+9}4ecbYon_pXLZw}oGi{}BhO9FJ%#i{2Nw(Y9n!7dez{3(mzO*99)5R`XJ+zv3Qe~{q(sTOmej3o%t-5mP2Ed-DrIGR~-|2d_ z_iTN@=9%?ZtKWAJzma|s@0-ea$9HvzSJi0kv2{?wzPXRcbV{P3bry#xW^L#+_$oq5 zK8=G?$IQ;v+pB8gPKvSErn>rWfVOAs)r3m9+)Ikqd9Oh)vhItby>Sk`jGTiDzSI6$wNL!T zwbX8AemYLDz6R9oAsfL_mQ4djJaw6rcgn0&P;SnA)3z8Ut>-AbZF1)7w@&qmE{>A> z5I4I74A#uj9gbV4_MW{)v*lFxS!U_%oxB{nds|e;9T-*qO9si+C zY#ZhAO2FMxdo3$Jq8jqMy~1z+^>}$nol~>NVg#qrHw`#*b(wT9qK=fAagc9QS0!d` zr^sv8{OgiW+i6Qnhz4ZQ=T-2BkMLu~XMp)hAaZqR)mP)RcjD$(%H~i~clK)*J(Jg| zcjtyon^K#mcug-8~sa<3G-Y;XA zPn}*})y;T{gBDH#l-kJBX-)rip4qwhlK>q0w!x~~PWf@_tLA0f+BQqfX6R(g8BIEP z-!@sOPiya{?aT1lJFAlQrqdOjomEcN9+uwE*XzD7tJk2vyq+&?+S2>RIP`;0yPmIx zyRy_?0`HdEIdg|hyb7|(Gt?-wjy?&bGcXDi+ovVbm^A++Wvn|68ElI|R2MT92O5Fr z0k%s5`lfajdIQHky6v)))MrPvC>u@=(?Dct>0O_3Aow`5bY+(<+2coQ()g-c%73z@ z_t(Gv^&9iOmW^=e)dBVh)>3=je^-{;>%Q9b@+)2%lQUnJ!$i|4W^ku<#_G-iFbb3! zFcv2TQde@=7NFY(D6Uo3OW7$u;kL+lmGvM?ZEIC6uhg21h>Je2lD}1z9Y>r=%`|+F zo2BOyN88V#;(U0;#ArnW@>rTANJx#eP&u@OdQBOH3k^vY6uEw5Z#`z2Q`wL28S zk^A1S#@$2%gl`vRoCJbv?>w{fO|APR_3h(m50wA?2&IJ11{3x5X( zbUOUxTV`msl=9m9#3f8!4h!M7>DtosC>R$%3U`vY=!UR=O_G1!IO^9rZ#K(-{G@}n zVf&_?rIQ<(nxQ*8W!u$r+I<$eR{NZ(!GW*HeR>_fer3_JueTAi^tB&#RO57?BaWw=x@*cT`+xhgNXHPvV2uhAnOz-@l&}FZtkWQ+nOjDe21&@#DhJC}`U& zbsdG*#s4xghS@d<--*t527(>-hNaUeY)U;CVRq4->h4{pN5_rs&o`}l`F zqoqD(<_ubY>qvU)5jmv%Ha>AFE4ZFVr6sP#3$8dk(aWU6&wa{RRCri9(!zTiif_}x zTc1{*qeICfOj;`kgPN4n;v^2Pc(M}L(g+X16{5$P>%aMO9491S@RDy7t)y*J*vf_e z&jMslMH+RK4?PwmPduW)EO#-@MfG)84o#e>K2TdMQEJs4#Ox`Y{j`bH$r z2~%dsCmwIPZ`1m9YoGh~?K2wv=fsf#1KK*AlsRdLcAwu#^Uf0w54lG16dn^Qd(?d! z*XM6k+Nijew)EC0j>GSlHIL^}?H;=0()#g{Wk0^HV`z>GQ|HjibMQU8Mx~2y`*-pN zpHnxZv~}jImLO@NpTR^wepH>3Ct-NX^E!v>r!VW*{kl%Vw>$<%wlOTd*R1-A>?g_J z$0@m=uBG>jwfgy2>Q%NE*DCOjRT)mKuI(SVtgS;QxKhS*2TScQtFOOxf4rj6D7Ymn zo#1hgd)$?d)NhbYdDh|8X%bL>BTrw$YiH*=?x@ZSKj7Zg;*E-fA3V4%e~Ayxl-oWB zN7`YKboikEd|2M3$&>tvn?o+P&WrI4n$Y7RPI^ON2 zTY7g$j%?9t>o;kgikAOQzi8>cuJ5VmKT~x6v_iA@@ymmg7O()kwRGquux_c{srFLx z@8P@&H}%&z4#F9UZR!VPQkSY%*MUYkboG?pf;fi2d*@De>fEl-8I>pblO_x(SKc-* z_X&e56c?V_`#w(lJnlYplHPw#{HQRvqj(&JzwU9ZEZ3<{>%_~twqbN}8ve*NvgNoq za<5BSDsI!z97kV#(uARxxH$gcNq27++(Mf-H2U@^@d*#(tED~defT@hEM5H^F7@UU zxwbq{%TM8-Dmk95Rp9GtknkP#{N;DtafjL0;Ls-(W(lnGIOWW{56HAj?HbE_*Bab@ z$tD5?OD8gVj8hc{4hz-a%7oBfYew^E=0c-Y;{JW;!voU$ahFpb_}k*O_YcHeY>cwo zdM&oJFUcSC-#2Xwb+BBY9@d5McD6;==S4-(}r;3{M#_J zTU(2r~;%?D3jW!k>5C21wo>&&wrkVC8LdD>y@8XSCC{pr_# zsBO+}>AlKYyQTNFo1vEg{l|It0hv z(viZSx`_wkE&PM_O;d~8ZW`0ai2Ctn-(@99SJCatwc(hMpB!R?31 z8$6*^3xk_Bf17^Py)rm*Uy$S6(Hm9HQFNqNzTM*ElDgF^)8AfEKUVb5i7&W%33U>J z3&dF~hkhWS^A(=1(dxHr&_Km?jjMsYqUF+Ps|I|zz_|OCPxrZ!Pe<-U@&rdZ$8KMU zTsZW$yng;|epYYBWY*5UuCh_57{s>SSIIA(!%OsWmAq_Q*<`A{0Xgf_`nN;A%Y?&p zE$!Y9@z>_dy|BG+^;vxC8+z*P3W#?lJ_E|o4Bk;8e1jx==(cAc|M03wT9hF`@ z?bp`txoVrI*8#cP>VVvBciwp?|9QWY8kKR$ackw!@4D+Qp6zTo?XRgB_*42z?UdcY z5qrn25-d_?Q6yn|DKlwN&Njqf`y3v{$tTS6TH=D!(oS5;%7Fu&e{@Doa9j9l%*V!0x2CM6+1LJt2zd#s!mavtf{Ou*Jea?OI zh912Beew$XfDXt3IV&H>JRoP5zt8^G1ne8DufC?XeBV;#bSujJ@>lh|HV)l8=RWWH zp7*@xx)Rdgr`QD@e;Sg~8)+H6T0RjsPlzJ*LuI6_gmKoM6W8LQF%FWJawhG#%5*r; zzL1aTC^v>+Tv^*19~ri?-}JhwlfkNi8t}Xh^=oCF`%Rbiy6~U&)sNW$ZLgnmKJ474 z_HTNUD|L*_Jtr<TUy|0Z!f9XqK+Ii>_*gvejkB61>zUrOxI*icmF&V{b#92Wjw^v_Dq7YFO z&xuPY|0oz2KMFUUH8e-zBo192-sq5m8fhkfa86Q49&Nj9OWh~Yg=N<@JWZq9%jR*D z%VTHA*5%$-;wqNi=PkqN&0%y$=~UaV-CM1I$LgOIeYoY(k0!BmkHu=56G!Y z(cCXu7i)XuGwam*U#WN9|H~WR@P@T{H+?M}x_`5&MmS$i`?)2vFD+-zV|E{q;m8~U zb6IL{8=Qa-gSO$_yFh3NDT=U-?;h$W_~V`vKT9}`L#CLP=Y2@W$$m1SsNs8-@;5!t zw$+`kX=8)6b*dX(TPJ=tU2j|dwYk2{X#vkBEZ*V~C+#Fdj~y#(SDx_7ay z>|>n1d=47=*o<=uY(5CR(C8wM{@JZ1_Y0Lrx1_-Ly6b2A|zl}l{T=l(Nj?76#jW|xpHHt>m5h#G=OQA*u@;ZE$OQX8b)39yhqUBl?g#Ng? zwB^Eur<3E|@{zdk+v1*-`_zA%WS~y;H^ydN+H#v@ye=|r`G|bAzso@`U;?Axi#y2> z`>bySBCA$5G$18W}C5-*sZoBPb3Hq(Qwq?GMqnfps>k5F3+~dYd3OPRr@VczS~%*MapZ_Y189Y zm-TPU?v{wfpLEb4_<>1n9{jcskzpo+CPQqg$sYdz(B(s%Ps(KQu(Hxtm48ng74B`d zqWs8;Kj$3Ss@rR&4!s0la@aj*526I~%>*s(AiirD`yLL61mL&`pWxe3Sw>_Ukl+Jt z11D~kVfa3Z2YjoaL5)yHm$$9kQ8czSeOqLpjnyTqNd}?ormyS9&$j8b_HSiuHPXR2 zHcr1k=|Bc##P-b!@)|60>Q;Qw%%m^h07yINi*@L&^D_njX&dQ*iaS+lX6cVE+;0$n z!womAys=iwz`<*3JJ(--{nys(1y3u%bpLZsIGnO&W`bwrG)SCTmQ^%}`&Q{Ad^FY( z!k_vb1yL|^aIm9QsH5_3b2=Grqb$^E9qYA@JZ+PHlW*(-8)s=ahvV9`ZL0G$bs+;b zo^zcQB1d)<#J5E5=(EXu3J1^Uh|?aK!J9~W2I!UV**D>=xW8Td^UpZgOF!DMcN7-$ zvoeQXg6v*XtAlV)sQa%Y;1be4foV8Zd+O0Yy_!a&T|U zK{&wnNq|0>jjiL1jJ~=CSeyj3f7`b?7EawP9ZX^`7RTM{DaRHHTRBb3S?FYzewZz0 zd-)m{=WgOCKj+S|3k$l}*sQ2joC9(@{$h2Nurh~UmF~(eBlb_~HMNJAK+cws_6Umt zTV`%YN>S?LH0UY?ow6xWJ0MB?xX_?R=bmInKaR#W#i#wF51U@M)I;cNRu1nRW@wgK zUp(PuUHDmM-IrNbbRfDdqz7yv$C319^0aPckwNrvR^F1|(UE#67a?wZ@jN6e5y_fey;{9=XIeJ*z!fE#11VOp%UDr z!Y0Ud2X&pKJ`{&TH#@hNX4yyF0GCgtP9noil9l=x@z29p&AZ;)ChK|2XI}KkIqjeR zZzk#OmH{qHfK4Qu$Z1x&puxZJH%_YaGqc!N{IJbsqrJw)hdujU?|Roa9q?5o@Bhp1 zS$Ul{-%{V5s|xyK_zSOi#Va0C2jYIJ4#PdS6!u&R)+zVSi8)0 zK*BNNvr6%}$31Rasy~-{kf9E^jiB8p(T`=MMe7@W=0R=}QJ+XCuIArAvMI z|JVmv{49rT+&N=+Pavun2BLfaPo%XN_z_D-U6lFW; zIV{gfN+X|1)n?}_T$-O?)M(s4_J+II2!MEW_?lpjXwB?9>+zRy1N zb(~HZ+}n5`eNK(h3B61q$fSTKAQHo z4)QK-AAKnf{mwh@^!KQj-uJ%ueMZf||3Wpyg{tr=2jJ>u{O)h<2-WPIP`1smO)@*D z7?erJRsZ2I+~{t!twxP8$t-Mi%~un~7_9XphSdovkE~ zd4a9o%+e>3aoUTmhOhtLefQlRPxbcJDHGJ1oc)dRaor!c6#i12`cfQvEwf+#!{42q zzo+um5dI*3x14%6BjwZy$jsD8C$FlBi{R$faI2uB4wEPe-fTVCH=7iH74=zFncJWX zec5Se13rK2XfQkN453eN5zpHw_eIF*xHS81PdCWk>`|DnXdbtmP0vpjk<~nOGcwLB zecXf+o=dy%Q^0|`cfb4H-5Fe>rpa0;G&=N0=_7-^vF5%TYqHW zZFTv*?|pA~SxtT76Q9`mF}%oAZRWjn_h0kQcfRvMmH%AbFWh+Df7E&~dF$sN(=vOMpy{ zlH=7mHseXX=*iILo6%m2;xf8DO3&Fs4t>y(%hD$+HdDWeZ#Yi7pu_g^Lm&L$2fGiO zp_eiYYRR8}vXX4lWdPv+7v$3}?UqR8J5}2xXKS*0eewDgMe5t@;%~cub*XS6uuz9y zl{{UQIajmuTS@@WD~H9o@2kAoh?zL&MOn>GEj8QAaL>6(cVbZE5uWroJo(XSuSf{~ zx&TGNj|;D(KpH%CR{sG;OMr~laTYt8+oNOY1A}2;3xcu1Ejvm z-lg#^~#(4|*jL4Ob;D^k<`3Uj{a6=b<L|GEzCux1&4ttjWuzb>$?HxwE;Yr*850t=BvV35U z&5EHXhv~|)YqL(gEW7TjEH83z^38)2)ph1B&ji$kjx{{_07f0{XP@du1 ztA|G!I9GAG@Fh;VtA#u#Y}4GQK8MvUIL-(}amLZ>(?5yN{kGp08N?v1V|~bcTjjov z@;;0wwuo&rSutB@vo^JDM%lU4Wt`5XpK!YDHz!F3?n95gWxqLWHkF*nEq0iE;RZjx zBXU=^H2L@`vgX|Tc)>p^M61f)FB^ZM-b;UOZ9)H~D&uu;c*7e`-*nSWb3gGucZXgT zFgrhACk3BWmHmS3ovS#ZW+}sxIU%WVoaRx&8JDgR0_e5Em!=aK(Pr;SI;996Cr>fV zMtAjJ0PI;yu1Ds3= zX#3cQRu5t?tS+)sp4S~(9^1OOk1b6d;JRX)IcfcZUCtFdDnx@#XWKIwa*wVn5W1l) zzU3u&Z3s650xP`izqq6FwKUp$`ReK#ta$(5D(!VXwpKJNdcJ$^wp;JI<&{qa9SXt^cv_(QHB4Q3mnSLZOJWmfMQ?I>&)-8_0z9Q;!j!_xou;;W0WbrbFI|{??4vrm)SE43XMr@& zKt6QDA=xhN)u6e>fS<#x;dkwfC~7M>EeaV_uRvyI!fdotM8dPYwc*=E$e z)1&H*I&pu-dyz9#jd+z z6UDg~m$KwnkJ!aHOkwP!^pvCA|3W^{;8&3ILwN-z+pM|2{ikGWndM`FCrO@LNT1t{SwljFwQRj4V`ey6oWOfgqj6mdsmQLZa3SeLXCuNAoL-2Fo5jpq?A8lOj+d8%P zN$-cLcRzkn&&w`vQT6E4C2MUriOl%-)=supAJ(Yp7?ezhX>rv#4xdac<7W@mD-|G}jhu3!qeDr{ zvXnT>{o>ubfbv}Fbohv~H{ukJj*y~B3y*MtFmYW({lEo6X?adum)QGhaU``gL#LNz zY=izT3_azhpG%WR$Uenh1V<=e@Zh!(n&RB&S*ZLzew%k5_vokGd6gA#xETAA+9Thq4fomGgYP7cqrJvSZIb5;YC zlfgh}r%jZd^5p{=c(_-l^guf(=+`}R2%qvKF8LF}X`y|dG*6pXQk8TyW-40_~D)B{F}G$?ELZhoyR=v)Xu{nxxaI^%DeZ&7k0kj)$iWvo?u8WkRg*KzGWE5yPgzG+6p7qb%r{BWKz4X>D#5vOw zIG$^3vva)qA>7yubo58@;@pGuXZLZ~_{}B01#|-L;R$mk?Wiy^ISTJM>8V5bJPxho zO?|DPk|UdK(xt!7QYX9>oxP%SvFJRj{)Ft)uD$l!pDN#}fi928QuvJFTpapsx81hq zFq}VgFGYLV!R&lb1t^Z0sF5VWP&@*Oa>3aq(9r7GDp`K%DlBGnXz6|JpHmQic#eE;QAT4!F-Yfi(GC zF*a>J_mN-ZlemP^(F~sWQ2^&C2%S-QljI+juOByx4&KQCxCe*v(jiRnQ=4)-=W6Et z>Ysbx&Q85#^2|q_-nr}CrJdicy>syR{TeJj?)1)AyzYHFpZJuA?>z0=hwgl&oVt8{ zmlbic;$6v$p6xm1`L{1+1vg<^m-asViOan(m;CO9eF%O(eqEmNOqPe~!?e7r zGkPXY>|pHXv~+@BJnk0F^JV)jzrVcVf2v+#o7)oITpapme8y*-DyM$2W`Unyv-2m^ z^2C+dIRO)d{f7uVLRxnPNh3@XrcRU~_icVM(6KqhRwm-d!C`6gq?{OradgC^|43aCj@LkFh0&>hVJ`D=eVbMX; zGaA7Ym$JkGAs*T?5)U`!cE|_#?prx|4n6lRt$u##fi_R#f{$;22Y9Jl@DjrBLuiQ4 z{l#+R*PPzldEX!2xAV{5{wF(+c=-O#Tg#an@`b|t3+L%|NN(rs#htgj_fK}7_Jlg% zDY2qLCt=IesCp=S9Kc8CD3}z79tGMw^ss$~qip&S`6gdK-m{Ay2BJ^Vcj?+E&&q-m zJn5~T!1XKy!nAAhq0#1ZpGzKfMMGQ*$tR8tk&b5SFU&oh_P$R`dJ9QU*rsj5JvpR} z=EW~r(4oA-W~I|aOgXd2NuJV&Qzp5^?@Q`)<=0i*d#j!1ayV`-4*j*SeQjsyi@`6^ zF^WN>kWSGk9Uug8Q7{$TR#3-r^%EcCK_+oT^N_{3GDp!)J4kEWWfU&D{W>vHE+Ac9 z0)0M`w>7TfJPQM!gCm|%({bDja{vd9j%C$=EM0Iyiy_Z_;zNg1$E(f{r03pq%8&C% z-9x9%6FSmbJUAfrAtz

                      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≪`$_g5pU!0dqVCc7+?{w6;c^8V_2)Et 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ຽ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%0DsP~>N- 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 IM6N<$g5?279{>OV literal 0 HcmV?d00001 diff --git a/v0.1.6/examples/img/bezier/bezier-acceleration-orig.png b/v0.1.6/examples/img/bezier/bezier-acceleration-orig.png new file mode 100644 index 0000000000000000000000000000000000000000..43dd0a9538f7a91b1c9525e778129e281ac92141 GIT binary patch literal 263498 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

                      Wz=y!s&Ilef=5@ zy!##bIb_OJuZI{XIuFK~%L;w!=9_Qcj9qu)Kgam-MaGYB<`uRp?#KQ*hmei0p;1?k z_IG=4adkf5Z9He(-S{m}o;*9hYVV(ab#ASq)L-Z7ttsBC`n(LlL}ylPlN@7+@g%cG zy_CepMjpM=ga+9vOTnaL6-@J^NW%I29L4i>2@P}TNmD|=R_Dvg5#?C+x=9pw-otPx zO7e%ap_vs$OT(M+Rz76yEki}Futk;uD&9>?N5Gdi)59CSovBy$R%er|EvxLR3m_hd z^Kk_u-NxyKKmOE)bAIhhGqYPaGD=}rG+RIR>|m z*Ojjv4VP>yJ^Zyid8~BXtLm6{n9ai}SFf0r9?dni!eFi;@?K~4Lc=mV@FIK;oZC`TQrc$M2v zg5(Q)-?wnpwZLnOenhDTmeij-cL367fc1v9&=f~lN$~3(`KHy+JoN|GdfQU%rr*n( zV9GFwU-I<9s~rNOlRVN257NC(R+?}pxyD1%*&X!Yr-upCX7c859g^|Y9nZyyCaIm)$$vJ(Vf*iE~(jaM9<#{=p}X?)Hmn*X(`pJKG-KeuW}`*fY*bvWlns;AcgDd&!7QZb#e=+?X!X}mO-FCBf_B}eW( zdSaSavGPuM(bu04nD97E9~!jYXrwUzwYF&ZcyU#)G?Xb;Xp)t7Fbd0k8-`BhlV@9W zoMqUg?<$S<$;wbtv}+x_5-*dkhHDv37AZ6B$JkPn2(|!xY?q0HK9)JB)SW0ex$xWZ zZu4fM04?P!oP&*%&%RB>EoWUSYzF5 zCR+KW>mpa0bm9uH;_LiOZd#hSJ-_SVN*{#D-R|a7ckiEfaQ7{NvK7@XsRv;4Txq>8 zKJ`%s)#k>-L*v=7eWvUT!CsCABVz-ifm88Jm`Gmoj&%+VdoTNK^p{Lnw5%xRqhnT3Hqm2ev8sT}8J!xP0>Gooj+W{pn9{Vz! z`8i8g;RVIJzoXL;_$bNJR+PbKFmCY(Zv$5&m!D!#1W&`y?c29+8_#LJtQG-3d+dESZ?bFwj^uBD%;^%8rOI|4Bb5wNW7;Wjbpp8^K3n-pU7`AU{ zlV;hb8xL{|hdFrB_W}#Q=H@%p^Xv+2rF`Fkwe4MHT87VvUG2umTR+0m4BzF;J8)j7 z>eZI&PX?62YdCsCr*4-Hn;zOjfUhDP{^W~aKOm-%);>j>{0hb=?xZGLs?^1LRJ$uv z!_vl!p9v6P#$&jV=ZGy;?_)nhS(4}LbA=~je$a?a$;*Imx=up$+Y{J_gG{n{>e#I? z2)I)deS)39396ipR2sf*Eum_k@NAkev{64HBu$sPOoDxU5`Z?W^n+1@flNqO8N+^P zJuJUxP*`XbP9w3Vou%U=!sr3I?wKDC1d22fNW*G$q@6nB_vMgRGLUD>E8O_RLj^w# zg&*0QSb6K|5l_3c^zg&;>;v4^c9x%%=Ahg`>?W+|-FXYJtn%g2GAbShET6VK!i3## zy1Q+DA8D{0o~x~Tp3Fl(RvFNb@*G|J-0@MC?xP?5=p3&X&vDt!F$VSxj3YO*7<(!Q zY5xjkzLVeA%{}GKNf0aIbmIYqqm8|8`$HpfSBgr(R{SI2*qdp%hc2R0?7zaTXp! zW21|tYYO0&?N$`c*VTOHm~^!U*Bek_H4@AKmv6lB#z!z{OrbdUY2d}d6%V~JBF#Kk z_tL3y14kN3Ni!h6&VY*Q%ssmTCgO^=b($c8-@@k0b18V0qj9Npf;|u5@vidJ()4F; z-?H_mKSh(Xz2gU1TwA{3xySChVE5u7o}JHwUaPGbniSOjHQpmD!#D>i>nkOH8utb* z*u*%H(4VH&ILlW75q9-kb&VVcG(uD31-$f>k$ZU~-!@<{_v>AoF&aK^Gv5`Aq~&Q| zJbuQd?@mj$%>~3s(^;|r)O&IsLfSaf>RGhg;Zr`d$KT;rpvcrCUz8J%s28zB*MO1H z$cQwbAG?~BIq5nGO51ml0%smBLKAP`G~)809y>WDdkugDc@)5#b#34q;C>}R3(J-S zGV?z)9Z|I!sGf&ph)vvgI9(|-dseo2^j04jC|eB z!M$W5ebdz)d8^BEEOU|eUtlt@9i#8{zvrV1K9W)18IZxzEh|IPZLb=r-ENCMk}Ql3 zZaIBlA}&hW&~)MO<;$|wE%Q@<{7h)f;}<8s0by`O$FO)NCVv7wfg_wU8cb!0o5HAv zJm;&B4L|(!fCMDn;wgr3#Y4wDGOVYrcnCj*3+>pgR>lO9|Hd0k?ArienDCBlw3SDh zXr17!(JmfM?g!7d(-8~}%MV|~Q#a$#wtaG9-pLyEJz-ySKo_}{ojQXjk7+My(r2f! z%SR~N=lB`WxiM~vt^dtj{^i%(Hb8SfhpWe|)L#m@ck&wBDeGxjf2oc(`Y1Nf;LX<)X=KvOEQXz2uGrwkzh6|?#JL4mjg#r2~=x)C&gTOXAMDOnmMmXJm2D8s2 zD45qUW@bKwX$lubB|XfDH*^CYhsjm1>gb_iwHmy9m7z4RewGnf;8G{zrWsE8Ri6EP zZg#c1`{>mCZ(es6-vI4apT2!{{6BeF@5PT?S^T!kkA0alh%r>)W`M#U-Xvu?eVyPf zs}g-Wp|U2JZBy$&bmA!A^cWF4JEu8 z7YV9E6XqrpNcjk#c$pAE$3E?#;^ThPTi`0W876F8yp*}aboBxhXtM|Vu196g-? z8Kg+F{-yh-`BUy?k4i^EbU*_Th)nd%M#{|C7Jc{U0A)?Jl6zRxg_Ermi@*dp#9eK4Wzy^%; z1`M=!50{cA$iGrv70<1`B~}9)I8D2ScNuRX%?_bL^{&b#FT7cnxIMuA@Zwhb`c62^ zE7Yp9+N%LKJ^u<|;1}IWDn99;_R-a;kKK00rfY85&^>{(BiAobJT3pSXCA#{+oqMJ z;|o))q$bbK0M<~7uM;_ZwDL8o9?o%Q?7-|ca!#lc-^fpSx>9!aB~S7#eC?oU2-G<{ zxdTbv7N&u8!15A}`b?_E_Kuw3ZTbtpC{D4`{HzX#GJlKd)Nt=_J ziHW(Um$NM50{iSz9&J~*%6*RR%21T$Q8v8ri-MhRXp{!IOO8$cFj*S5YUym`x%eyDlGMkG#x7SLHj8P-t8AbhGLFtj9KdCluDBc#It(?f|cHI^Z88m|XyT zA0aG}rvBtm9xycl$fQzQkc@2gCC{%P_)Np$O?ZcnWx11*$qD%32VbZBB5UCd8gH&| z3*v$*b)L5XAFn^I{EN_p2P1o>v= zpFWwHp(k-N*xIT5sE6C88Wv|lD$;P~s)mI=oqGz!T4AQ=r&U+s=ODbuWA7*to|uCyi>+DPF^mbQ-GdC*d`Hq~)a_Q{|m_iXT}F_<~IMlUC7hq^LOcqff42 zC-UkVaqXB0>3{OxXk{`lylKMW9}%|EP1!As7uxDY)x~yCozQ=RV|M`@{9!+R!yP8m z{d})|M7rvylYnFpw@h`uzP0WIz=zA)BVQ8DqXK;UNp`)eUx){Owxj7!eDV1BcIX-( z?w|=`-Q*LLeiCK!P<9orx+{~&T{v-r(8_G_q!G3+IEec@sZA_Xcw{oow)PPQ^`m#( zamViV!4}EtWG--%s4S<<;*0Ew?owB6^O%YIW_HCq=j22tvM?RjNW_cG*s(i`z20`o zC6{yz+8v*Do#ouqEUy_e*E_M1Hd#eq9Q3~*tT*~j`jE(9cKDiirys5ShqraF`qGHi zIbR*VYQ?90;bAeL+pwHGjDR^Q`CV*}oP%QgDIMR_%xZyo z)$mbX;!|p4J9O#VaKunD7c6ZxfwonSsD<)eJ1jYzCfi=#j4uj8M#7Y~>tw zyIn&htPOzkU*8E@TzZ1&F)@UAyW08}^U7D|WB0euR%>K6=+`_ssKep1J3)|jv`lZ*(CHimT(5<7BEYg&zUyyQ#B=V(PWvxy-nAEni z>wtdJ6lDI9-^-n7@dSzJr2R^owc2(iUGi{1&Z_zp^(_92j(#tPf=7-T>rAHbBUAHQ zewC9rd;k&!BRJt1I7ib=&RKOWuzQvjH2FnSK75R$4D#rNJb8{BNcS0j)mie^)pB+6 zQ#&3>qwS>u+xgUMzKR9Dj5#srZGmYx>s#{6>XEp2&Kvf^6m{Aitxeb=Ck9(g=O@qN z$!Aval&9X=*La<2_85cPJoaa<9#a69i7bBf9Ne&jUv*K(CIY;_e&J7Cfd{aKW4|q% zDBYwNyeRzob|xHGbnrc(y38v1zzsLta26}%c?M^9MXgtrS3DKEWtf(qw6x9C-|KxD zqc_>!<`ta2ZB{r=7N=aH1KZ(;=l8wueKTG#!=&OMGW6Q(E#!TX0sWcm27e<1`X}11 zaMcHre>raNJH~T+Uo<-Lj!%rw{kMPIz2d0Tp`-6iD5iExKJNS8(-!W#S+o+?B*BfjUL%m7k60X5~eS`M~piPLl(V{FC;5H7s2AkM2+RT^UZnInz2XFEotz}D-pA1EbT3R|e=|%S>g(>*LU5_WK z_&BmAd*(*OYq&8Q8i@9r#jl^MhSBoM>iqol()hD??wJ3XPt4D81JU@_MGw1o-9LHq z;R6?+xqNVOWy|8u9W!(w4{&9rpxj((R~>pjDAzQ3ux$D0`D^i^E~UefZbwcV0bFeu z8Cx9*;L?`Ok4&XUTwWsI05t>VWg@hV-&EJo7N3#7IQ-<#$%KQMvNx~FHh);I^yO7L z>VwAK)xcqX)<;^_S^Qe53LC>my0{JwZud&dl@s2?5GHWHz7`)QmrfMl`jG8qCCo!P zClBI8K0nMQX-sXDs#(oXQ$|i6a8aAKhBBj-5Be;yr-Dp&H6PL)$~GObp>!l#|3hqFxUVnna%BJQc2yDQ4V#e?}ykkx7NeB39I z)CoVYq)FGoPd&tU61$0?Zv{93*vLwA1FO$Vv0d_*Ney9l#A?;=fa-O~?wC2@&JGUb zUB!k^@JcS$!}?ZzDjeCuXY%D)7~L>T6!ZyxGAI8sxUyRIwEH;>sM&UR@&c}OZHvfX z+(ys#PdhY_l+ViiF!tY<%hkIqfC!sc6Anw1MkaVXqCL(c&=2=m4<}6{?w9xRiF)Pt z9(;s*klh2%M12o1pQv473H@cdz3-mr%DX<^{rGh&-Bx<&>e&qFXK(HPx#eE@x^8ao zD|4RXt7cOtDMa7mLjgc9$4QG@F>Wi^)iQpwI3Q7DVIPp|+ z8hK8-G`t7m?k6;%Xgog}pZ+jC<~fj`R$WC|4yhnIVC>X|Yx$;GrfJ~;eu@|Q6|Fi` zNVJX?8YF~&{B$59DsWa9@FBlGtM(Nt2kH#k_}Tgm;-qfrxX`t8pO~GSTirG@eYYPl z|MmBsbuoN(J20W2JTe;n$R*1s{_2yKzqnxkhX!$ycM_dO+wycJx02^1^?pM;lu^RW`u!-2Ta`3PzCfjMGjC!c2qTAjoT5xq zw^o*`uLj7Anjy%!tzrd`r)C)@g@$slCz!~u58H@7DqiQ zV4I2@Bh3PMB|#0Meo_4FcP^?I;;Y0FE&s8ix+Qh>jHQj|d#y;jEBC+q1AncA)u z>baT8%SAl;yWJH#gS@MIzaPJepKoFqx6GaVqUVi@$Ybckpvo2HFn%sSEJ( zRP`d*FCgSSKP!NXe5Bu;^%PG#<+i(9+sB!F>|lj_xBQa_c;Ka5Hq@|*p=TIpny(c5 zKKj|vbCR9@VIIGlWJM3bRiCC=o%=DC6O`Q_jO1~t*L&xEbaX_6F~uZsKd|2I{xer! zeRcFn8h=^t74II;zy8}tC*FMR_=2~-zx$zsuFm;#6R{k7wTV7c`h# zhp+p9-WpV8@S>1!Wm{xB9rZdI(p8qpYC;4LYz7;W%HY^Ts)MGt2+nW4)5!Y`Z5!Lw zzuT2+j?a9ht)c{@Z;%r-*+xUk<~&gKpNF)HC`s0mgip5g;qL=^l>V( z0cYPDqFQ15yxL#VP|$2Q3nvY5bIR3D2rr(*UBrMb(y_DcOh1mYMw zt7CbKWLuVHOV%z~t=?|;?YqqH_kZho`~ANA-R{=zy63%B_0+Rf)l=(RZ+-hY7Wl-8 zh22Yw-8!wqGPOJ%1qk*XFn-FU!SIq+WdwTPae`MJy0Ed6U`T^LGi&*PlzcVcGO30& zhNoWDr_qErjeLnlYyK&&{*nKhAncdh-icpy`&6ZcIN8ClMRAZNMVD3g5_3&+tkjIF^z16d8Eo2h7R& z938Wl({!xlb}@jI{DCn%D?IH-mk5Vhi|9vA^BXw%DR{vuUVIBa;g9k`aL7{zJ`mGB z8bSEA{8@ix!>-(2>036!T#YW0Z~LHQl%svl*TzCy-{C;NLtOh&9{ZIY4EnyJxrj#+ z$kT7+{EISp@=hN=6M)7)ld_Ti61(6?xxp*_BI)wA z+kKX8N|^p%20C~zw0GxzWwM*_*MNDJrAO%TtG=}5Z1uAcTwwvW>(HS?o5=3&z4zW7 z$ak=Z&6(_efb&)Q^jH1VPyN(4Fra_Jn@QjL*0)ywQ~aMX|0g)suKU18y6^kUMt2E4 zz}j_tyTzL>>wfq);BR?P*M0cIVmveMc^}Zdwa4!Q%?^g}N2w3DsIa}&yz3TDeZ^WZ z8VkNUp46^}G)fPjic6~_p3a#{&1W(Ugl_+t_u@71!0>%PdxpJp-!k5(G2_G~ zn22oSh}P;@Up)T}t88TM!k8Vb9f8Vsz_x*k>ulP_M88c^jypx^lox&`3BZ}5KGdfNK7v)642vePilc`-iDqCcJZ-J;^-Zq{ zr*>Lt3a_xfD=y!~I*1k=@T9Z6a00i*nWT71v1%{Y$%Je5RrZ-J-a;7ZCWz?SdMcc4 z{A8%*dk8}xK1DMs7wdl_t>I*AmyX`oDxIA+9kqi=R;CSS@S46=j`}hk%THK>mY1=O z3f75J0E0k$zdQmk-tY@vzUc%1M9$WA$r|H|V!YB^fFw-&kBrtoI8eJ&=lgee(_;Uv zjO3vUK7GduPj)5&fYPt9@w59!Tk^Kdyq72Jz`ui4zlZKJu}6LuCHOVq`+c}ydgN;p z!=}kwp^d+^_Hpyn$8qlOxRPz{y?h_;kFKO_d(?j0UmD}mmyQHWzBe88Zt=DIyI=XxyXHPj*5^O`)_$@2Oi6v-2lUDa z2NbSjF#AIo!dEb~tj?(blWklHG~DV)2SciKE3DyI!9<4+)3Do8yD-GOW5U4vB*Kn2 z{0K`b&&-H<|8ubog6;NW;HH6Nzz*8k8k0W_%0bzIdI{cpY!o&U;x%yF8Z}U99F%MX zr|F1J5O(mcZ7<;trWweh2)egMn+6CE6^xQi&!9mgEQ39*g6pza&2#JGhkj?@!TWg= zeEr_d%`fuy?i(-NT>s;@9A|RE3Vw}O(EQH1Wg?TYYjOmYtV*sr5MJSFzi{migGDN6i;HY^!CB4}&wNMYUZm6UmC0$!Se&sg#bg#tVFlM$pUQjLQ|OgfWzh8Y zWV0*9UU~9BSls*zQU4Ec@;TAzkYtCE{1>kL8f-##rR#$e{p4BtjMJY^xbfRoc9UQE z+p?3<=uNLODctj^l`^94#S*ZPTi)eaIN=W*75dLgX``FIh5_cv&NjA12XPxs z)p_bLOj=zQ&j?Gls!voy6u0AI1Z2Lhq3~w@@X6*G@j~ZnUw8_GvwK@c;wAj z+`&R%DVdaK?nO9%58=I$9oJSR~mTOm!;pS z!JaK;Dct^OFhCRe-d&VcTKoRv3T=^fq8gSzur z2H}gJL7l(=>IDxx^+|Ah&wJjp$qLn(MtPK3pFfqVjJ&r- zw>|3Tcj>TpapGfY{o({bmM zH5y~CMpW($+0k{(1UK)Q|q=KV=HP+L5TTsd|;aHk@_{ot<)a zq70KpGZ zhd)s!71x(PIzW2%ke4LIztP9@Updl~N8^SYPX#I~d6YM<%0#$=GU-RAThE}x4#klN z-eAKf4rO6NIq3|GZ@<;xDNFcEV}A0x1(dCAEPSK`-~K6|ankR3=Y)$F7c#qUgCkyxzm5+KWx7KKYzaa-p7tomV3G#H|*~I%i%vV_Yq}yr~5M@Ys{l6bqsqh z!`4#@8liujN_Wb@HA=T}cS+lAKc@obTkmVvl* z)rgRjLm9xT%uBX9rwlOcs^DtqBt=2UhR&tROM1i7a74RX*tOi9IdXD-*FXL3Jy!|6 z1T(#NWv=^<7p`pl!JCeJ?bPZ{w&2{JPq9GOmsiu%@^qjXPWciS2QLIAPgs?=;h`Q9 z>2)drGJs|3ttAf=h{Q_XL?yUu7fhps&QrF&{Y7 z42(NMVdct(#P=DtKS3DtFT8PH<Iz2kg{m*Dc%lW^%+{44os`{oO0 z`K7*}Btuk>eb)qOTqZ-f8Xme=Rbl~LJd;ILOwpRUG*WqxfrWt;%7lH<|STZpxnqNK1MN|vNr&J8kcmoGkMy! z+JI|0h?ep|zWv=9`#i!ff)q7A547ACJANIspT(I!ma@$D_f0I;e9d{9?Q?H?S)uRD zPN}?c%F9HBcm{fPK~64}ap6QCdkmP9?ewiGg&S;GJv>{$>U$L#+C$2YAMo*W!SOi+ ze|haV3$>2d0pAYZ@6y*#^k*`DI<78}k;fhPcYpbwd0u?3cPqE->~_8M%I=4SX9dqs zs2YAIT@5bJB+m=xMJ1%6yzhPQyMhY-0~GRCT^+-KdP}3XQZiu4)QZ=ia@AmBwa|e! z(P-r5_vha4?P=I-vDi2mfYads*AREHy|dfTqWJdQ6Qj-w_i(+aMzqQxatvDUe|N<_ z97b!p$j9C(9Tk2CeqlUm6zZ-XJZ7$RB-mG~Iyb##na-%u8?P2wom1lAo2Cqy%x&&q zbL`*$-hpdA^wou>eLK6&`_+mXe&@~iZR}cFT0OJAzz-_(mK~W*R>_gk(8vjwJc1J) zQe-K&^ls@*QtGNEJ#G(LhBZM*S;%{&_fQs1ALWXto4}{OvbE}}jAy(}Ce4JtEq`HR zTGIh9WgY&=8#+*NntW-hYzEzcl}^EfPw+-?<4?wEC*qIw-aRX#Q$Bf=yPyNJ~;P0}SFq=Pny9|Ao} z2BYLnJYW?r`wKp4#>3wQgDYZm1ALaI@e6*F7kt9%k#OS^y?_n6G#vAjyp8#eXj}oy z$EO_0y$%$7&OMQk)A=56(L5r9bszFDH^7WbQn*l zydwX9g7ydB^{#j2lS&wmZH=U-=5GDfl+*f;{Nm>8{=@CvcRch&x3=RVj%LkwKmEgh zZ0=)nJ^UW(;P6x9e=e%$bwID{_o#q3aFF3*wnDz(Y|MhC!pi7kkYu9b)A^}YrRn2A zF^#Svdun}|3OvQ^?KlSK0g%0H1?{zgIG9UogTc5?c#wiEnG?Kwxf42DPu`t3Ug;E2 zPXn>ByHc4bM_^frv@A$3X?$Q~9f=MdOEotA%5xJrc!R;gGYwzXt7qos5A0b#eb<9K z4!rlaotI1fLT+2UlN;fF^mV6>-hA-*=E~}o{E`vZ6ZMBvi(!>%`SQ1?Qm?{^@)c?6 zHYQy)@X|MVD0=-KZRkji2B-PfkvP?nn(k`{-*Kdo;^*KEe#d0XUz_p-?$7~2u59UT z*g9Wx7PCv`rH&?8p4Rhbm|EMFYU+Gi%d za&Xf!X7PF|Fm+8KH2++3k}rjz&!Fo_x3ce9`cCkbrn%DDOqNX-t}-lN`MGMd6Rz#w z*d6g~&64KNsQM#43$$T7?GQm*_G#UEvRfSu4|WD@m|zo5{oQd?tu9&Owy^2)u0C`qPjSjM z9A#FWCNIFNj0m39SAO8iS9tN1UF6XhW{?(uv(0TVxUO(X*hyBx9!z_P=VAMI##8Id zfp#~KhmSpZPqWUsqEqz2N8JT*RZjQ`aP#9_;6y(3)}3u_lEh;QO3=_o|do~#1jM2jP&OOM8$oZ72tqNNFb4q-UaA?MsWBYiD?W z{tKVjbM>eBeY)#72zMu&y0`F=#J9ixiHFxt%wN8+WM`1FRJM%LBAU#wYOv@lLUTbT z99>5E>O16_^up7xdaJ?GIukCB%AYX9mP6qY9DX0%-b1)@+y-3sH3%*{B-D$v<)Vv` zA#<&cS~-{e!iQy6r|P79A6Ey-BYt*s@U!KIUwGPDCXmnzQ(kEB{WUQMA3sG)Ud6$g zKJCnx`tuD!4$cIBj0D}VgRl*cG5Q6CNBTHW4xJ(JOb)kU;@OdGX@i%`QPd6G(%BuE zOlnE5mAYxdo$yvC85nQ}Ba-quLy=YHhIR7JP8K+}Utv|o+Jy1=qZ z+pc-HkGQ%-SM|`z3pY^?Q+U1LKHnjcjK_YVY)AOGO$;>hPh$ViuulfQ z7M54941sd$P_*=mu^Z~c!EXz0;Yr)V#d9n>tl?`J%Gw(RX^8Qgc$_wHjs?ylj8|DA6>e+#Mz#zP;N#-0+@h z?|B{2y-%0luU%rx?2k~{54wu3#!f~pV4pHB8`}hov@)~|l2#~>mF@58?qX)PkB08g zEIJ$XK%94spKt)j&wFop3a1|Ux>t$-xil|Ig+-d zDW_x>-n1{Bb-zx1F3^P$rxTy+|R78iHyEEwbYH%@q}VfY~`J0Ip% z{?Wb3nP#h8^XG&%KQbboJb<~HaTOv?4Z2l!rLV%|U*&CC+CD9#l)WmLj!Rk}OnsCb zLCPuo8t7BL7_^_5`c1muqIV1so3vdQ28ig}RO30;p$5@{g_n3!G+THSujWf9&Xz-U zBfRbGJ8$p`)FKH4rn7>W^~zrGGUGv?vO6Fv;Q51UTk zyTct+R__Ox$nW8Hx0_vHfpgS}oBcO*POvST=!PBm`x|Gl1M4Ju`dJ!0{Awz3^Q9x* z_wByV{}!Tu@B6?1`%iPNv^SQH%PzPV{Ew6ET|4M@-`Bdo@`!75+W%|mjo*At_m4jz zqwn5aI(&Gzv*ChSUnrs#^t?Fl(N!>a{=S+uS$=R2p{2yC)@{BV{9>WVK}@Yy^K*_oT9vR07v8il4fX6zSqnVwrCE37 zdg6IphBaxevMyizLCI--lL((Sq04|)u;wc;16GS$mNgL*qyv;!1{ur= zM@ei|dlO&ymNFEEvs2X01|0)^n*S^(b%Kq$sPA?%l;gmtdEW0QdE)U|vH zN7~|_{7G*9dF;@w15o0`9rr_^ObqnnL8JyI=@X_c`vr;LqUUF3;g$MT&e(xpI%N_w zl@|FUx#Q$>hM{pln-n&pXlWDaO-{;-bg}*CQ+S4}JS&ZC<^rIcL1?&^L6wiRupY{e zX!uD#VV5JBMI-Lun$Geq{-#AI^Gnz~2i9;)N7IU@uQ?a(cNxe}(l76)-lZAR8-vsr zX&$n30hL!~uHxx~AL8Bn7wM1fyYI(;oId>`J}G{QeLOs0LcL##4vrgcTWs1tfY&jw zD`ykjjy~N!Kpi6+eESLCxBL0pD>?0cP)=RPCjcf2k2`m|+i$Dlg9?b4r3xC6SK)*q(A{RG8B6J91`2Vldm6+jv^LhY7I)YK;A_VweBFi=~_)g7m96aR>N$W|I3c zo)gfnvbx`azoo%SFR}VmSp9e=8jd))GNeAz(@L)b)e!WHUp3H5s}4Uh8y;de=N9Jq zoCVYT@a=o9{F%EKm$`vx<1U77Z-o1ZVRZ9tnq!FzRNLI&|_iPrdpcF=f>3 zKpJgBnaSr=o~lmdH!gD0*-p=AH&tf(+K*o;R9?*FIHOJ;N>-4d0Tfu_ zDL61zZRU22R|;J&Om%1SethY~O#mt>Bl~ zkvTw}@29`M+A?wcU~u-J+d2cazr+{)p_^mnok;?GEN{y$lLrR=C%`?(p#Mf-KhM~a zMJC~=;LyLFT3=o1{{G#4sW0Ea9sV!9s(YUdum4AzJNQ(sUO_zt8RsWSr*(d`XC8x} zx6A5=%J^0a|G2X=Tp3Y138ZEg4%~|nau+d!?k+0mN>7@N=J@$b3gg| zm9O1!<>@1*&sd%ruGUS}&xB7}?4$&aeDS8!gwKdHaN7`rf=z5 zc}u#wK%=XAAJPR{2Ry+=UtfXD^ZN2}bY9?uyT6{Pypk1tN?!A;Tt#z2?WfGFtxoT? zFQ@-^``iO}kMR5EU*OW3&oap01OJY}{U8VMu4Qod^@|tGgoodvw+UqO1if4Jo{G%{+{h%DqXCWYup{^OFEl*bSKyUn-VbEbP+ccMFa@ZzpJw7>fx-<^Mw9M65{yJJ&N zlJk>8*D#)QS3g_#i@*4bFQlNqfeN{g3US3`fu~?7a4XZ#AxK(Z=F^AEX|xx)Dksgu zFh_mwPGdgi49*FGJg9h2tY^CtxC5x)plbx)YGh-mZI!`bEdbIw4rA;^-W(Ns6giM= z?dXKz99+-mG*)q|A(!!%TT64Eyv$`F0A#c0~iEzNIoXZzg3zrStIRi9@1 z@{N~ouK&gpa|_>k^~UtCGV;O%jZ0S<=AAIr!9jqIx07A92QXeLzm0|8gIje zrv5eBp$-e)eBtVmJdJS2XydX8Ts)jB^d;(O)76-DZDQjw(6@M%;Q$}u%0DvTS*zqB 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 z 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%0A99j5Ri7_ z;U`!fpkC&iE_{YFZdy)eAQd{56X%$K!?&>Ny^rUXSjEps6IqSXAMRozJ4#=Tl{{%4 zz#DVm#yQBxGkN;-4E@_d-c`K!zDqk!>j&}9fSrB2=8-aGIQRxGbu#1G=YzdQevkyu zcJ*0k$Cl4CY1qmeOq;&( z8^7@`F5kM+G#M*9vccnH`R`E~(7*rtzyHX4-}~PCdG@@X8P8@`TFb1|k71OD7;sV% z^gBJG(RqsSQUO9aN&_|Jn(3z5aG|sb0K6;6c>Zgr5T*m@>sIad)O`QYJ8m4^W%A+> zho6q@t4_T0TU%_dx7$0O(i*JJRR<3p6~}k8XBm(l+_PuT873+%R^=mfB=elrh61T5 z@+cqTl=SR0^6D@1BTQT;UKkQG-NIJcyw);0IpMfmLS=UVx0Bns>9ii)u_O3iY&^ST zV2o#R4(QU9cp0=^(Yw+e$0&GEFZcpRrUS0iE3a*D)#JB; z_xm^e&=394)D1V>aKh8^ZpYIG-iAj}@%}38bym~Xg>cP#;Ve8L~Rv55?9@@tlAaauCzMyUoVjLlw$B-_*Ma7A&NKM zdT9KTpMWj(>8e}7OId(YPXtYKqU-BJ^^OnW)U_r~mfuWkhNY`Zemb#E9imR?OQh*r zj~plst4oPc>d-8&&J!l{d*J28dXwEXagVYR7C-uYflIm$;DU%7bPSuIEDCJY)j=3N z8{$ybM$+eq`}oeQpFMylfp|3!8xV)?v8*dGmE^}arWnOF8Vsa__V;|!D&8P%T5qVPnq)Swt1!}Kf=fC+`JB#(Mb&o8}+3Fdu?fSbUQZ# z;yMPdaR+h~-@!2+BiLd2of4jokXKkjrn61zAa2;A?9j?u9BD~|xL?iEa3_wt4Ne@g z0}u=+uVKveO#x1vs4vk}cvrG^+2D1bL0MaHou({@@Jm@^rxR-V4p)iUWntwO@1s( zeq%r?eA*raO$^T>J?tkLHu-EqL)!2J#%NJz4J- zy(@Vq?CWI$SeQ)^b*3`AT=FToG^0h$# z8wID{nk3&{@-Fqliwn0rfIE-<*!byBfBG7}XL0JXwGpj4sonE=~uKW79oPXtKfA(h&u_`={k}dl>1J0FiD2nt| zjvl@uuGWyA@21AqYpGir&tT3pI-c8dUSKlF#A6h>OgQj5pxfan(;Kg*8Mu!-cmtmY zWGp`>3E~pAQ-)H@W8)WmI-rvuTlIwVd6_tXc4p{=!)QROBfN(?Mcp|{Ud9tndZuNZ zV6F59DPpaftO_t(Va%VXVH~S?|=XM_x}Cg|9zVaY=Xw#y?a;O4e^;4uMUM3^Z0r8 zBWXxG;0uV81YJ&s%yS?!Eml1SiX*x0#3$ODu=<+Lb_o6~6K6RZP}|dV;|U{PFKv=m zcMW>#NNj-vDLw1&Zjh5O)A8aHuNr!{*Yk3pcvFLT=$mNeCkb8lyIL;7;^LVowA4HM zfbDKw%&g@|8qqG98vlA+(1U)u>|*&qLR$Xf5+-=}P-Mux$S0T;Cms2j zCSL6dd>t==lvQtf#L=^OT?_ko(m_{wHOrMx?1D6GFDFX5^&UHP;KZXh?3Jrrx9i90 zLveRTu_KdC1{~<63w%6#$9F<+JBJQlq)zIIx`7w3sgG(9o*6X5q^4^Q*!~?#4 ze(sggem7#{t+(FBJFo+-qsJiq!fUJVdS>6T5so>}&h;UKTI9XuM?DH}@??JK1-7zs zOPyWT%^cjlino(avOw5RxlRPv;UDI;HD8yj9uK#~$>$@wLg#&C%Lqr~pDqJcKLh=} ze42AFTdhyxx#-;<&SC(InLEI#NaAJZa-_+XQ?tP$Tol4RrBHlnG!=xfv-OtBOW03* zjtmVkv+Zm5|H5o=heF1&#uN-?pwM0o)djTF^ubyCutAoVuAop$|qox2O>Eb<SKsqJ-*eDg=-&PA zcVEJt@}UQQ4US1brB7Q{yu#A@-QWG)VSc-S-@>)JCpbWNoGm)<*ViC=VUHDv`pZa> zL+Y6I(@;hS$BRi&skiA_2SJScd^=YswXCHbjeer{qVeo9fTE5aJ z9*4pRM>`a}rhWyVB|Tw?KD=wtbDLCP|B}}nteW+ZSKBk%6kiu@0ee@VG)CW zXy!!6c&#^0{*rbnpJ?#jBpHmDQ1U{CM5F#qK*QPvZ23>?!5EPzB}$bz4GKMPE@y?ZuR}w@4jy8 zx=X9Ge9f4Nv`thWn6|77$}VMSccm}9Z(l8Pwe>EpwZ4>dUB@}ReII2GA+rTwynEyL z5C8BF$72rQrTLh5kLZBza|e|};W5j)+c1LiJ?Dz|w)gQ|v|=T8HQ|G7y&gfB8aUyb zf>V&uK;+dK3K%Dxflz46Dd~7MXgo)A;N#TwG<)q!GjmI$TQ;nm`MX<2cKq61!{fsv zRr}bd-qxzV{Pt?=WzVY49{R${xuvR)TkfVfjI|HEIR;x#H^+@`mS?#Zj*|(MS{_1S zOl-QsXBrlHR4#scZiG&?o_c%wK0btjB2Te}{2&9kgS}hmaYzby>zTiL5HIyiUb6h` zY_bvZ!4F|U1Co7SXyLW1Bg{~f)yNmVBp8o+T5bYe#7|tag|*By@DV31VbXW7G#qaQ zSO!MKOL{as75Bu?FbTqZz${|8;@Z!qK3EpzrVE*pAAFH#oeih2p^Pvv@j;oAFOA?IKMZw=N7O%@ zZEihdARsPI4#whUm|(}1_HOdmlw*SZi+p&h2POzbJt((+#jnUGCLJjc<&){9@ZiyO zKz_p*owmbRFzOXu>PM?T@ zNnBjb2lex{EM3T{6RfmjWOa5KN?j6%Xnlsq!NW5<;^ymJL81YZgM8LEeC*{YHXwH3 zkezng^xDo5&T^b=McK4rhxv}|l(_?>e41{@Uu1yvy3F|K2{vbl{x;5UEq6s+0zp4b z8n3Qm^StEA-4taSbj*j2uG!XU`^@VI1^7~C>RC*ROl#1{daDP4OJ2akw}9RpIVwL4 z=38#Rjn(Na8P6?7dHw4Ejp(zZRESW}LMIvt!A1vF$PIxiag`wy!StSdlh9{Yt$n;- z-JTyhH8r~ConKhLLsc66@_VZ@pZq_n9hW`5edOR51NPnTe$Uh^Uh$vqfsO~S;*o%j zDqVgtNwFA#Nsr!De7vsNoE=F;_XMt=5*_C}fzQLe+@+6Bn;mGILfO1B=^a0V%NtH;S6&ERn(SO%z9%VE06fbJLepR z`0Zvgx$QNtdCf6a>?bi`*43*zQ?JDBa`0fhDKC;DP2Ye6gp;e#GkA?N0{AKW04_x9 zFz`*9B|ALR)r-3RrmhCRT3S%}7yR|o?2SWO{_Jy3I@FsB>H+U0$2K$|9XJEJl#9Mm z;CyU!&M-gaQ_F~O_MyNt4!mWr<`OS?N_yhj*UZ-_$2K(Ki_xiRgJ*fhSFNKNL3wS3nKI%MZ z7@K4Lr1zM2kLZA|aJ> z={?oCzj$41$E8nTF#l?39?x)3z4WCoy$>FI_U9IiMq3xk0Z(>PVS_Ky15W_?$7CHV{HuMwWHkNyUBZ<*$9vy zF?n@hM|b40&7gja+4Ly}_H}&uZ96+C;}{-cTi&P7MKm71RK9JmpXIlkEwgQ`+K+mZ z9RoY#{-WE7QGn%GhVqaGPMJp8`Deam8`mI!&$UAxqikBiHJFa1&U0vRW6;lxrY~Kb z7R-X{wrs*YQenzekE4HFtc=1RUOm`d016%D7P9GuD|sOw!|EBjZly1vV?w4UUV|=4 z9X&6I641cvI*L+!;V4I1zLnr>Tg&M9sJyM_NbjY60a&B#Ad)!gi$FNrISbOyUsM=6 z_Un+jxZ)LOIN~K;JSV7JWHoUNJo~Wyrk0U-r0c~9Xw=9mPC1zu_NY-8@q@oYCs64h z=NY`c8rua|Y|CT2HZbsQ#Rkq}ucr7pxW}6}A|d0{CD6Lt$@-ME7~o5|m)FD(9{7vN z7`D=#jsE@n_fOn((@o~B?B9Q1wEOeE^;?en?3;;4yd_oW3S+)?jmezp{&0S-P8&DC z*CH=rg0P)MzjA@$C-;aB=n8@vUL$gBjBJ{3%Ly+4O1FV!RHJtIzUO6WS2{0 zOk#Usak+ofy4JaWI=FfBFMN4;xcb5$v`0Siy4J+*Css%9XG;gir6(u35NAJpIl$V` zkgj#mKqyTB^G9BEHp)?n;?SF`YG=F51brSJd)f>#({82PX&l6%ZD)+vQ=|oM6k=gk zv_m?Akt9rUDrrnCGNI{9M-mO#I=hrX(JMZii_3LT+yQuUQXx(8JVoz88S&)Fb~2JQ z3DyRrHYmbdFnRHOz6U<)SMtRV*TZWjXI>o#F1EcfE*k0;o^{1*Z`?$;fvaV=|Hg0p z#<-tt6~Pnnc18zxj8B_W^Mm{@dHw5Ozl~MT!C$kEl9OfY z=x&K;7~~@kzg>)XY2jiv4^B<57v8**mc~`Quj!Hw_-hEef~(8;TF3=Aj8@XQ7!LH! z%7N;lU}Q)yfL8;`a-ipDay_waf4LZZ)CHJ$g9NyGi#}$7ZXzIkaMlXfqD6F$P|c6?oqhy&m(_G*e9F#Cyv`v!lUVcAUH41FjL z)nOl9xu?G8q9pr!v&_1l(3hu_QI{^1`r1BY^!FBn?;vAB#dy%-4wH&kpy#f=?z&j; z1=HPswyisyF@cmXcy-sa#bR+2mz!PcB;Xm(c*cEu_Ut)^jrN-r?!GoB)P|#vlXtM2 z{9`}%h!5yAL^K#%qz|A39*pyKDQBL_ISeT?Bv-*pY=7Lrt4Z5w#7j8vw26WJeg^x~ z!22mXKYxns;|8c)QHH`u2YMlG!UQ{=jt5wMT-DEgp?wSU3yVxHcrSHubp8`}^sgNI z(0i(FUwU1&wDY>^_=C5J++t;ZmamBIM`<+%*oL?UP)4P1S;9$Qxw&$4&nG&q6BT%L zJKaG%p7q)x8CY@<_w;%mOo>y&@+y9z4as`NYxydC({Mz-Fy#lxg)6%TEjvwgG!b=~ zXU9d}aVNW-m3E1PAA<1nbvb>Vbqj$KZpy*D?5qJRP5BWn^9pLfS$4^<`5-Nfjqrqn z4svwXAD2s*1P<99xs=IOixq=2^NRP`&oDrrW;bOMcfxPw^~kjxatVaXFTcF)g*6WF z^6@*r^E*TQ_Hf8?3vVqP;}V;*?ikT#9+GsTAb(kJ%hVayVEd|?uf#bZIYG<16AWiO zaLG3u`O?D$0KPh--dbnN%C>3J65g#p^ZaF=eiwaU9B95S2koSjJ22u)SKj0)CZr}7 zm*vZ|aQ+OZF*Y207TQFEkZl}c{xq-}$PsnjY%?eekl@FtPJ}Ek^r$C4fO`HU(vt+C zj;_UlNHZx*J+9^1L)S9>McsfCKX@r{Syy3_|GH4%Lzeh~)1cL?W6&1{r_6N1Cyw!$ z9HWO`nlvV?;Rd`g;Tm+3r_5^lfCW#@Nm;WUn`PH@378%$ZzmN5ebltXzfAA-$ilityHRe`5!>tK6m7h~<{XYst8vQrlF=XU=n_4B0rgO=I&(3sK3v`giB#F#{Ip&-0+D2cB{ zM8gs{&qGlj9_eRBHppqi!(91!Gb{T^zPEiPClIftQP$B2d8o!iZee}J#l=dRaL1_} zjI~S4OD$#z%cDahi+rZR_hgpVjgKyU_QqSczV$W#+nS2OyxMgQr}a)pW4`A-@0n#V zKiC+|Q|Ut4ByL%FzFy|Dm^kFZN`8Xb-({>2FJ}PRu5PIO)b}p7f%iL;wQhC<_|~wg z;5tdxw2k1RgOVptmKBBoKjefTMuL1hh;?uxd%c0ZPFI6=>oQy&+Mj817oMhVxh!D^k>43KZxu-fT&`0gSmf9BQg zB%ZK%VOxw-e)Kc+-7RQ8;N-$17Sg{qaWM4?Z6G$>56*Zt$dAjo zXrMbUXE|Ahv#zJoSut(HkSfc~b5HoD4??+fqvcV}dBx&I`iULL06%FCd zYs(yFx`(S`PjSL=_l-B+cr6Na4x@a874JC>zB4RPU0I2&q1AVK$d}Vv%M-(6%d<<1 zgGbJv89%o$%iW08*gxKK+t8bTR2CJwlmx{eiws-vu#Lr z40!T}AJ27A<~Z>RoZIOe7|i|tajbSZSaRIK8{VB&J23f*h+Bt2246W?=jcepLm{Od z01tIMJ5d@}>l9ThxV5aTu6Viv6MiQp(u9p{{-lAf)>oBAhR@OMjPU9JFN`#kpCpxh zW<2}?n`r@K8PEwMV3a~N$L{0sTKf**UTrb>yk$& zsq!WiNQRYN%1fHb z7r}5%S!H>d7e4rquXV+6SAK7#2@7u4Cuvzv9a%wFVl`jj)`L_)b!5<#Md0#hfADSs z=_h_KV|87HVUo=}bo3ly(c~k`HlB1sUPKc&X(kW)P6m{D;7eQd#Iar_oIcTqT!B{r z=7+=f`lg2q6EAym>-`|{eit_Mo%Jqi_-!M7iXE^s`c9g$`*}Y`^pQeNg{TJm_^M-H zt9^cPe$Dj!^2h?0#qB$JsJi){+gnHX-(SVc^B}MjcaCvjmVOM$fw0w-9X5wS+zCV* zTQI>r6+2jwuh$lHcIG~ADD`7F?%0h8LwfW@>Q~!6MPz*)(6QU=;P*i$C?^V^j~nk1 zAJBbu&4Y1#Bixza0UIB|dGN~4t3XphReZNv>PkwCad%MZ@4Zkf;-BxlOK-2^4&d zX|#n2INLAl67nf9$|ekqK&06~>U8!^w-u#R%T2h|9B`n<4o%>S$1k>o3%uo3ym0f8}yny*5!*Q zZ^*|1bI8H6lT`O}@oM-|57CmhtZ&v!KijUx69FeJ^H;+$U%OoEqzRU%UtEOgb5734 zYArDVIfE@cjr|+JM*1r5I(9DCV>{y__pATC^|Y})E6@GrZ}v2PJPx2t&%Z1}R~_%? zwY#-!t?xW`?ASVZne&Y)9=DywHY_pG@J75i4@Hq-2l1o+q+3^YU!{tAGokYE@>lq< zSiZ7I_T$5)(RjqTMOba#^|Kt6>n@a4rPTnss@CW!SQX9zDHMe~x3yh`$LT|!!=GRv zKWAgH;@`n7bJsc0^X}kLwtXhqJXzuy%g|u|z|!K%($JsW{+T^*IP}%^)iQRlAG_2) zQ2phH{o( zqZAw9t0K+!#61t-;kI~QRl1|N|xpL7xab8aHbpQm(Kiv!4E@~8R=&| z3vKyGUX%9#&3q&96wg0t3nxbM8?Xg8@#?Zk_c@=daNE!O^#?JC?(%rL{WPapH+=Ae zAKc0|dtBJVV86oTJKkewyS>f*&3*hf@(J8^+&ggk`s=Sh%!JWf1wHNSYCXzS9`Iu! zX?&xdNq4|aIRsy%#e`1Y#53P;!jTpUjdX$?JrG`Jg5d&d^lQ3;7PzYbr_NX(UFwTv zq@n9=-wq`GR~RDFPM9!+31D8~HR!@iz!iDTl4pKSPNdV@mdZ1EYmn^@LN|4&&XBiK zcjX!#iFPA7SP(vN3QzK(kj3vRuajK&&7`08O@1>y{aPjs{2(p>dQHK|? zLu*BW_dF1%?Ua_XPABiulrMr&o#2u3YdM%FLg6X-AsYH6eBgILI(X2Eo8s_AwG3U9 zfiHZ>KpLiJybSL4+eIeKM``mD4C-s?L+e;H?BFokc5KWkcFRr;V|REYIyBJgYoDH* zTL1YI2QQ!I9NwAP^VRR)|JCZ=rJ3r|!8O&$hVg22^R-p=wjZfpIrhZ!SMIs|?AfWw zLG3dAJ8Ul>Q`y3bd^dSgt2Q3NG89VCPXV zHs9BIc|oq@3Qk5J)BYnqpj-Pqs6=DmOhZr7_~QutBw4Nk(kW>b$bnx)2}5cl&?xA@ z;0mAEJmm_VXB!UeJK2iAhF3dgyya)tuAQg*`}*7O`qE!r`KCi(8NX~`O?&I$NSn21 zYwpy!)|rpo+@6N~!04LR19u%@Dc{%k${&B-B=k{2cykrDr~xN!0wvj^Qd0Ij zig=uX-z{|yM)@_fA?jhzaCPG#nu-DI9V4NF0Ow%uz!V3LgtJc8k6-kf62_|?AhC;K zLJrV|6F%f)0?u$fco0rQWx5k4dt;NgNa7Dx;uNT_uZ=U)bz92zus(6>y@4mM$#3#N z(gn_X$*=qiU%Qf4$1~7?&9)Cb(!?W;eU_ZeDnj`4fEJle7CYSm& zB9!N6c$59~vyJ4#pZvj2M+W%W-nN6`NeVr5 z)k3s$*eC&tFCELQ`2bd9mwho;^j16)uexBJYx$9u?GcJ-emdYXs2_Y4T;q}1!(*Lh`M}sWn!7OBpR-J9 zri~#OyabF97YhEccPrS-^V&?>{}_E}J-4;l>jOu9{p~>>J|q z@Hd}4*gCv4SAE04m|vvvxi|-w_^8hIZPgdotc>qFb$I=?+b%tEV)FFb19u(Re&E1? zt=O(X7k50;y_Yjf+Gjtu;-g#dJ#doL%fDDX=Kd;3SL^?d`?ndPNEOcf7%2C7qgH?{f>AF0lrIx5M&Uwr%9 zsxzBL)*qWZvu?xC=y~RDF_JlevlFnLvON8L-h&?)@@aStBc-y!SI+cekddHuDg0&~ zQW>IdktE-K0gm+`sPP&*MdT&Jhja0P2{I8U$joZ zWM5j9|5C3mzQjpKae#yojsuns3Jur9Yla2MxaG>WI+bmt-=$+&j)=vHmozdh{bpWo z+hje}r4|GFxC3F6R;f^UB|YV5d5NE8>6;$?TaqO%T+K(}Kk1OwaSUj&Lq;rM3tWv? zz@nbyIr;N^gj>_GTO+(M%8qsq{Xid-vSbqLn25Xw46L%XFB4Np9Mdr>Nw4N#|NgE-p)*Bg!e@IbY3 z{rbtLKjZ29Uij_*{^o7Fcb@pmBX_Ko+5{{0sg-5QEnOf006+jqL_t(hSd0jl;u33-c(NN(Qf2F=<$2@{y<1 z&&w(e95YY&jny`O4Dk3mtD`K{B6&A09N`$0GHzW6*LBPEtZ$){N++D~$|Yr!$|q_X zhldI@71t=Ixm7BSC|jeeES;?2y8<0Hjr=adB`qA}>i5(;DXaWj*Hw~D3PWCal9+Om zj~YI4Qx5nVINx9p{{okAWJvph{7j%uF*&lcyA#6%W{E>{5Ar$RJO1Dg{@~P}J$ov) z?c$a>X65nzIupDFvnyv#RjzJ zKpgp&i1Kj9D$e{gkd%?jOPZ_DjXZF27bMUMoMnjPIUQg3@^O*(x66b)giRqm zeB!1Bk0p$^suLz=Go_rw3E)DziAYj>Vm8vm@wW<`!k3nOCo|7|4@VUHi5yh9|;LQn1Q;)J9+4oX^^&?#B>ZB7=OI`qW zib==)^3Dl&y~mBqN~UpuquvK^-;*YNQNJ3;{tj|N_0P+zlkV>R}Q>#HmN@J-dO=RJ#V($`{0 ztB%i2O+4_xgHK=}znqRV$)TuQcz){Z7Z~F^5je2Et)EJIz*!` zrl(8%h^z3zXC`5TDq|>JruX>53s~dzgaf=;KJ+xg($sf*dX~ESp1(J0U9>FnqKx!| zaHozXSWhl8-t>L;?ABq@Z}QuOi!g8+0p%F4vh|c1FwHuVkh)UiXPP9$m!@eNO$P2k z2IqNhklXk1kAM7D-g59t(u&t3ebr4E?~-rxEYReN!!hIBP9p-8SkIdCu0W(c*_tc z;E1POOsbvf87bkA4dEEjdw8!wOCWLMaT~Bvp1k>cI7hzqbfOmJ;77T=I1T>d!WXXf zXLiSjrD$Gm+^=Sq=BxW=&sLsZR>-}jQt9>@5>L^j>-X+FwP)|1qrmlXirKqKqC+&x zgs&h&xysM>NU}BQ22X)%U9Agt&>e>ddG7Dx^Ks`^ZGeC6S|~gQ%b1;_xL>k^W3W9K zha970D)4NCTIljo1TUbxW?sOTJQc71^yJx*2N!1h#=6dQPF*m_-zM!^kv5KijKNZw5y+b1uT9#;bNs< z@UuW?=;jHZy!7G*4dDu|@hCfS0-)zFY0?%=yoAc~(>Fb7T8HGx^qLvm!$-g0ne zH9o_~U+&_a)w_6?JucXBQ0LK5i$grVqaJs~OXzj4d)+pETe+s#@6r#k+HiZB;_4y< z3ujpw*0(nV!)YS(rRzDv_eBzF8~tu0=z4id8Q<2xs1^JQo>e+47q3>VKP9~UF*l*cj_&ZFXQkRj`;Q-+ zton~|&&|wSHB|L2Z{51>FvdBa!@z?b*#j9e(Lr- zJnPilwliJDOBZ;SMM8u#BmFGPe8SQb&eeog%pbwJb6XZk-Oe;&m~5SAfQrvG0wEn; zmoJ>ZPFCIPV%44LDVqjv0e{FVb&{D?4UUk|3%-C=R=O-#-(OZnKja2%c5srS?)vG3 z10=~r!~}1l>SudxfIAM({@l;~++FM>9eC|)UmLHhxD}6qbut>CdiB;rE<0+!@|CY# z%i#YcCINna(ko__gKrK*0fw{S^oxw}YB|=-2#?D)OcZC9F(Q$Wc{N>d;ubORR=c!B zc+;D*O1hwS*aSD_8+kqPx~xQO`tnS?*=Nme>PQ$!>L4%PvRCVO!4*Cn<)$C}5_b|1 zgCKq|t6#!VZb7w-oTP&7T~c;NsCjn-xG?cY2)v2gkD`0{-B8LI$H zB77ORa@sXRA6S{3Zuj5IA-Oy68~D5&}H{P@A2wDB(BGie7x zp%Z*MXlO+6y$QF`PfS!_l1>1ElloL6M@HvQ_zQ4Ke#%R{Uff#t1-4hl@~UoRyLT~fx_Iy#9)C`9 zJSgWaalYjdJmUv|K*bqXF`~hhLH-h;;Wu?B^htX8D{wJ@lyKHD>#J{hO&&6yGHvE{ zl&}!fleb1x9_q(sJ$%H<8+a#((yZ|c4f#eieV)wrCdpxU%cLRwB7>&RCto!k;c(IK z3(aPp@Ud{P9K+=YXw*SDht857GA!vtYnSw-m3W4ujT(L+$UFTuwyo$_%h*!iL-%G) zPw)?MPHDqe|LNu{_TO~-&VhT5R7)q$wx(HzO<}jk7}PHiHdJZMHlONjZEp=$+eg=F zpIEF@e3V$r)VihJN}f9qjeqzvWBAA+%@G*vC{L1?tayeo9$hBf{sWT_Y+Rt>U6I!<2BL+JqXH+F7pm!4zLV=q*pgWs%!=_WOJly~7}CF?{|pjyw+F5(0q zGB5(*ytF|;x7yN(HV16;gp-Hh1D;F>7zyfx!IK8T&dJ?I*v{v>{@#1M;0aXPXNEco zocsoz@)zYa6AYI!thZqeM7C#u5|{t1uX%xkui?e(h#_G}3q1asO=w!3VFbL42Tju+ z#zi5$`ALKN2md@rXMQuh%)9Fka6!%4@A!`I*!J#szk4HB5ZjKGH_h>ph`zmh_qI71 zAJ5l0Ja;8C`O`PtaKlk1tW)TAn@1RNE0yOHvVx`T=m#ZiR_GJ)sB7|r?=6G!oC9+~ zdB`JQ9OtOPTal&4G!AhoN5VBi=F{c`A9_!|1}M)$!I7T7&>MV-Xe-2%f1Ru7Xh+fr z22Ny{t}~so5CI2PIxx1Ez(l(S#S3&9xGtK~`&zE23?~y0hZ1E9U_lMsNLmFkbxnA~ ziDTXD=c}M}lE{nx3taS#0$Afan4nAR^cnc_{d3ESZ$C&Mr#!O^3yTOa(e{nEYKzi4%>uZJq5bT+;?eyNWNY?aMFf;x3GDlV}?)#{t~;!|7Aw_!GQ~ zK1Sc@V}M`UwQbvp!ArKRJv78Ef(z$YP9Hebw`PeAch8#^j%1cYQPpN_{H=U1>NV?j z&p%`@!gRSGVc8NTYOt6Zhrf#9C2LZ}!$j_i6cA-kh+q}5^J8|i34U*G)FV&4n*Jnhiy zr;d*O&bbGNuZtaX^t$W<45$I%T{SSWvVo0u-h^m9VcYH#Pu{fa(8diL7`I0caNE!b z&ra8IQNdPt-Qh}|fqjYr{yZzQXe>M;I&lBN&|*-_DRq zq>k1dh;$XkyimXndZfAC=)1((k)nf;X1(>K5du*TI^vcmz1aT657?4lq9Mz=d=qh6 zJ$EH09nhJ?#Cv_D^}<=OX~}P$Zy5>S2wPWwvE2`g+0fw^UJWN*g5Az)mAZ9j5R+ah z>tSgK$}h?+L~6cEJiX}L7$jFqeGcrLshDPaeIKj#lN_Gg`i3{WVI$YZdV`_mR~(#a zaU)gSIL8G=8(;F0m#pJ!P$$0Wo4)BN`r>`k@!=N?owViG_UU!WU+~p{iyfL0SB@7r z>#xI)yy8nI23verhPBQKZ(M_GxWJQCyF%`v_N;R{fs|v=0oeK&&Nhg45tP0mEng*a z8`C~t_XEO7N6>JEH}OGT@za?Ol&;1sBjp#cU+Yi$4(4BLKri)||Jt6cLR(qNOFeNC z#xjy;qV}PnV_wtslu>6jaN|@qeb49TUi9Q7s@4pbvfER2__qxpm`5!g7nj%G|>I!1fKBrk{ACf2KNdbhvNto@#)DaKjGw0CDkT-xn8Ws@=n*eG}tr zt0%76bo%Nwn+|hvub=fMZZzsqX3IlmR;f~svrXi2=ROAgISlm_7Z{v(pl6HK zZv^`()c6!9itejz!8;0~;>a(kF>|z2)-!bZ#%a7g8dTue4I47zaQWjr!F zxB+M!XQAOojK303n4neYgkge*e(EvF0JIVQHNXj*B$A#?=OiQ2pcD0M0Gc0lD*RgS zt}=m@e$=z@)>o&GOdx>U*zRr7q%z)NSj8Vi0_J{(=k|*-p}ASf{onHLTD`$+))Q` z>x8YG=dO^mxzow2TpQ~|&n@l#$+?A*(Z2qL*8XFQfB*JB9=z+eue5i)@Ecq0mprFh zyM0rfc{{$e*t&V;Tx-kVc=h|&KL60a+jiyT(c{PV_D@YtY~8YTKa+`BCf{+my40a5 zmkg&L^@g{2^rJlCC+)E^T7s_$_`8d~8{7Ky?TgAPW%gL}AJqXJr40emxHnK_{&Te$zwgKIzdw%?zqzIfkHBcVPNlt-m!x1fY>w|KqlBB$QHwBRI- zJj6gZin6M>ievA zuso`qr_aR10K7iouqn#GwyB0jhL-N#w{PcXKl9nq&))Wxm37x#+IQ$`ukLrNVRehoOta$k3`K=Gq z5NlE5vqiDf$f)Fo!_X)#;>}Lp?BMZ?j-9_Ho_kg|e)h9F{`Si^_Ve($ecxOEdo}#T z%UbVx>wlZxx_j5;0|)Ql@~uz#hWjtsxYgGg+lwp9j<60|epuiv6O64W9QJm=tsHL{ zuxJlVt+-u;qMqZcJ;&jBkd@o8vrz{3G5odMF17_lXgR>MO*_Rq%;(*%W#Zx%eGJel zHS}|UPo=Yr)m(JI%qa57X!xcP2spyg!%JFp=n@WC>L^IS<9E?9VjlJM?s~6*-2mTy zx87&?tI56BFlD<59<(Cx@PE;vnjr9~v(1yf*;&5?jk=XccFvSTtryTS&&L-2>SvPT zk=Lw~Nf)>xt1zTyq7$)&j4>OsO}RO4if8GkxpA)Vmw)+}ck_{#7DmixhJJsb<-m@v zx5!)j{`bFsEgyi{#CH5)4BoVp17z!6-STaHVuF!nT3&Irp(Za3Iq8X$F#julO}Bv@ za&E+HzDP4q!{%;U%G@?`5)!QO7lyjPMp_9gH?M7ui&99dWong-<43Z=M%-Y!)%eZ4 zE?<5qPd?=#=m8LVp>Gm-HI8sZ1n%O$2I$l=bh^;2ksI+^4h_8CVA9WY%ZzdvaJ*)E zE&b0cr+xptE+c_Un(5-0955xE^-OSm%X6zRwxAOZ-~Oe`$8!-uW^o&*gEu_HBN^og zU)s5~JpXnOA7jxos{PZZxp?uD*x0!l9z{-T`$!M{pd1e>4|t9QI`S6>PoXd09;#So zku>rTH{Q7Oqo4Sgm1&(jbJo`~+CP8&D_gs_Ts?Q$u1k(=TeEI%+xYqg-YcG;UtG{$ zJ2~X7q^AV8`@c%5eaX9kr-br`_cTF@)ZR%*o5P=wx8Gl{=HFjnMM$ zkuQqRw;cw!PPTWkRY*T}y+?IGf8O(+x5Sm2Zjmf7px=xTUyOnDc|{648r(+Umz~c> zakhDZF%XXqv4FiDzWvTSulT?RKO7%6*nZ{S*8TV1SH0@#-&VckY0rIt@0-pJK5%yP z_ObP|1APOFGjlWEEiFBbsUH;Z(^~T=*(SD#?ng25K#~T@fmks4j^|wr@Y5LZDF*mB z0k7g>?AJKJyNYLvej^IqVt`x%Zk7Rl61uM7=XmVkXa4L^;;MxHthc|qj)v1EpT-G; zTCbLxojHs?c@AQ_=ITn?!h#<7QI{!Ic3v2`+sJC* zyT0qY4)Dp=$&Y;GBRk&s#y4)j_*EQ=a~r;ek+D6h{rmT~c+Y*~w}1P$umABM|M8>T zJa+`#C3MEV2S`j}>Op}rO$&uHEFU=2!Z>xJU;lrhm2KLj+f^3j02=xwOypTUzcALN z6i*;uxNw`G#=n%Xk@h3}aMGt%W3AK8k8&Y$oO?iKd`lE3}r-}ddl``#5M$gP`h zx~Y2Oo8LV7%};;U;KbPYC++tPUKexCLGXZ#xFIq|)TY3WfI?XlRSFvOI z6ebsU6nQ$KOZyV-3Qx))+gMH%2FW$AZnv+e9S-2%F2Li}J*oq`LSh>`W{EWFmr#P2 z7r|*bOjpn$cpHtdzv#ro3C1eHEtF1#)%5h_xs6jZGkgE`D^r6X`>Xrf>!5Myf%D?E zUi6*+VQSOXEoXS2c!GKR!1V0Q=+Nl!c^W>HO@f7%R}!MXQxi$symY1PXnhCY(n&%o zR5EbqP%tm2If(&_yTe)WyG0)dLpT+^g~L=aApmy4Eh$&<{LX_H?`Bd))EoRTNR$zm zFpwTwV987JoAKhyTONdxuaHl|Km)XTMHG1@EfwEpfWR-j- zy=EDP8|fi0=@yufS1C90NRKpN0#$VLsk?LnO?m4gvdW+ECO69!ca?N$ILpsYo_sZ_ zN-K;eehAG>aFl}+q%eTUX4!KV49Xsmo952)gOA9A2A*)XGfBj#%6k0)~88)F&j+{K_S zCd;}4;N}F%avdbBLlA7pDCJd`1031)L@e?fv}!nEkP9YoX#_oR=jT*`iyej+~U z`XOw5ooRM56^biM2Nq79p4_!CeQ5XT_7l&(|Bi~)`9BSA+QEnHkDP3M-}ilA^|Yrx z^(ac`_NK}>kMWGx+!lFE#2!FRTbitzPNUSDaxkNDRf_1;MTxo;H#m|Zl+>{Bc%jU8 zRG#llQ`d9iQpebSveVdse3gUmyZZr{U3NHR5re#)hneu4Ghp~xkd7Tp`qV>Bj-PSE z=@i?t} zgB9S(Yu!(3$nF57>H)hur^KM;U=@RSDYv)mCSJe_hpTy#p9XI7R^!H|7LkJ&og)wkh1EaaEh z&Z~S#FAYdjaiU?#%SQG7@x_y;&Rl-}-04l*w(s2c!GB!8`Q|TtYVdLz?9kK>K#x>6 z+;GDTtEaQjk1uVhOQ7F^uRWk$RBAsR0RlIaj>;Yz@@hsj!p5GW-wQEh6R|j;r=-uklcaUdbu(QSI zU7=Bz4X>8#^PkuvvwU0{mN1-AZBsjPtZ_R@q3O!Niy)>Lq#UfIxhh=@qZZM;i>#KX|&D+6F{@0w3KR&0~P$HTpHlr)n!@uidT^wl#5-W8Ffzu& zmAYowEl(Y|i`x%KG^Ee9{pTtpu=4L&vgwId#K zDtWbWFZHoKYuHAhZddsw-S>taC<5QG_&A@dgc2JT-*OE5(;3Hg`6m0LY!AJ9w}YP~ z&H*CY+I$hy5w8z)61M)$gJ@Y^;>b&eZKH6~lrJLDZqh7$Fk$7(K?SeVK?-V@Ck>o@ zCSFZ50UIzTnIAR{yu|6%$qNRELZd}rb3ro)U-9jTAXw-WHj{5hpP1x=o8`)DtYo!w z*pnew-t07vplfb9jyRYjhd%VwL%g#N+SuL`J_=+dK7&2U1G}EKSKs{5iEYrUJXtsE z8|4FIJwsOVAz%8P?9M-N1Mz(X?AP)azxc&nfAcqgGkD7_x3sUh_6gNpci!Ijk{7>d z<)ttE&Lb-;OMbSrO<$R@uHx~FHik~@Ton4Ihh7K+--A5XJb)Y*u%TBI-cNrzR_r|> z02e+CmU#4Yc%BDtJv3&hdkpAY6gA-M)xtgA+@n6A`y8F?HJw?V4s?(eSn zn8pbSNtcF>la&sZg`Qcp%d#2F&d~`rF)$v6KY59A(@zBQNFuYNz$TjzMu~7e5ST%o z1dW+B3NuK3O^$RFe9rB64hhDG04UdQzdM`uRK15#)_AiLIPoPR>fwO9fU?dr$j|CS zV}Xtu13jHKIwyREfuTINxk3iAOIT){WSAc^31;{!b#kRJ1rNTD8DC!mwzp%8l8vMc z!sr7hjW9k*^PlNw+t%RnEbln^O=Dl{LZ_Gx3xvCjDe=19Bf@|I%S)M zfdE#1$cjfGsgKGm+8e%{=(*$L>c=x1IjDNpVwg75crNno^(o#_U;E(?e|VISzf^1q zs^4uMvs65zZ0+5h>O9)ZvUJ7Rg^?<9 z^3_WxQNqh}z7ksNC~1Mqp8?y+dO8`2tyFx=$&bzuj1|0ZKIoiesz2&XT#+nu$^a*f zD?^jyQ(nC0Ge7u~SJYZ=Fab_2Z_?x=>Q{KeYscdz($%fdTl};K(T0>!S17~a#aSEZ zyCV?tA>4$Ez5uPJv-}z+c_6KMpiG$BHDKzr48V)>4;vs~IQx&2+-ZKHi?*4v!XCL& zrW=o)7Ec>M?}>-pO02x`)nVnSjKx*)o2y`1N~a9!$uV#tU(!N$;t}qWWkHOxD1Vl%_RZM- z&42c1f7af(XR-RylM|pXX|#sUX3tW zISQ_4SS}YI85|?sch!m3JBW2#7rHCRZ6ozR1pF*$gcF9JXl#ySGB6>l4N+Mjz3nNjIl%4b}qa?*3Yv(nAvsoSWhg(5v+XvF0oqMiIXIZQs&o?M z1r>7`*@`wi%SRrLbL-s72R`tDoxI96!g-2n@7}$hY;GZ657C*|@9#}-deb7?@RO_# zPC?Iav~#&(yua>iU%o$U)IYP+nU*qgf?++CW3(e-fkP2A}3_rmFrew-at;?2aeh*Bo z`-vkR!%aBqEB$cDNc&^{qIHxmzK6m*Fgs8CuE$?yl6QhMSK!OooIcVAut7O+57QUd zkQUFqk!igC1ub`n;(c$o%(WM;y6yYekhvmT*r^9^?^ST3BpX z=RD^*$LHr~=~K&&M_yDDZ3TW^zUes22zi@l80Vid_p!h*JDNvHZ*fn=Ubf$rMc8q1 z8?XfHx;f!kNB$R|`qZb!^K;I(SpUbR`!^ZTS&2l0F#!EN1C%qOH7dBBAHk*|qXB3f zR}L!gEYF^=n3|g2vU~TA+lGewr~mwmgIE8LBdz``7w%j+ansxT&I9-KXFj)&QPTZX4>o$Smbr_;2_IO%o{2a=G3#({85l7y8# zyy*P+S&uMi;#j_5ghSr=DW{Za011eT_7=W4^OA^$$##p5n*ip+ue4*rfv*(_9LrLl z#6g}8KJIdO3Tapw6OI9ibO$R9g~m==GOhd_fYcw)6=)zeOv>oI^1|(Am*hC|JP%$B zNaQ8I@)28@_!T$JwOOs7rbisUu+@=%Zd>wa9skb7g1FKI}OguZndN6bDJAt(@t*%0W4Y9?B~}@MryrMjSHT@*&+eGe6}dp5;WH3dYHf>Rvx&TQ%msahvED|g)+S73UWDeO4GqE|M z{20`)W>CKqo$)-7&(y1`5^~_vLzSK)d+j9vd`!@*ztuea#?o3r{1#|4c{;IEdZapjS(NW3}n|d zOi>Ozg^`4o#w3iDY48i_dYc?lo!8E+i)C5`Vfg8ykqdn2L?=1^>j9a3jkk5yI4T<* z$(^q`!RruwILdnCmOn=#SK7jOVT3piZVm+U;4X!S+kAHEfNgqw`qMn();A6q5s$Jg zk6+Xiyd{k=aX-=N+W?lQG3o%9Hnj}$ydu^elqI&|4>H+2{nD4dbo;OT%CBr<%iUY% zq~Ql(`WWD28~*jLfBgnl_3M7%2Y%rAbD#U%W30ej@egUJX^X6X=!(qYC@S7L_RN5a z+@(_iQT~8);MR5VD*xm~+mdHHMmZ&|m!7iFpb8Uh30&Ct>cal|eeT z#I-;6O@7vEfcA{9&>^dB{Fdo&3!Jf-bg*{PT?TD+Cth_eyvSn=-1^eT54|)Wo}!Nt zj53oyo^bG6(v0}ab_pHGJbXJ*^lRZdq=IJ9D1Rxxh>B}~e&`L93;Xx)-|?}J zeQd*@|M{O+qZ2!-#l!cK`?Tsu{_|_+pLx~5>DgKIdd;W@=G-3d)$zi9lqsL`V!Nw* z5idL%j=CfNHN0MTl=4T)O8s_V)QzZz{2?>9_B|-=^K_&f2R^{i*rdSU$W=Kf6v zbQ_>NN1x`j_h%96%ShXY@N5)YE*eIm*J5xuXVOL*^O~2x6Kxa|NCQdVm3v{0ko2$7I-Mb-B_i zG-b*G-tA^})5)8@699Kz)}RyWRXjGa4*X)*1>K(Dnd&a+xRP~pnz|5=Fi4N~h6n2z zIsu$Iq`m}?_;F4G`VOQX8XKT3z2>yVfV##$RD3UEQ9tVyww05XlV%5Ix5UwbY08lI z^|beX2JRW+VWWTz9&7{3bKv)}hO2HL|Aai0N%98yxU_|&lxNt^Qm<$a;dR0$UBbCo z5ifrM=O1vj?CZo1T*!+w`4lGFE8>4Bt-X7FZmu<0B`#fA9C+9a(%%u60t(@BjVk zW#6>r>}daqh11K!BcuH-#5wOE8#@jH<18xz4f-a)ey1*x+4&28Nw<7uS1~!-$Jv!9 zGj{A{(Q`NQ&dHki+N)(`yB_#^xdrl{Bm->N*#_OmRq)?rKvzQ7Uw?fx00YB6An5;u z!g`6n&nR=HU`H@M#1`^Z46YB*88|#LKXCKG(RFXRWzE{l)>SKa+eh}ifTG3rKD2{}gtKgn|17X>b*|%ij3?4V+4T#2bU1Lj zaFa%lAKD0BS2DCh=?cxv3wpwmF7M7L^>Yi1CIrAegVUWxJ z&)$20+m=;zzH9Fj?g=-?%5`tuic}E=L`+b&0{s*ek#1>PfkJ3)QCn?ogV9qPL!g1cz(D>B_wX?x3kMK9!gS$ z>@vQ0^7H9g@{y0n@%sg)!*DMjI{FK9#6Wrc;Jx<597DYVA0YTpekPm>5 zSxz}zmdlr^D4Vlu{o3Np%niHBZ=zBR+L`$g)^*mnJ0m@n4}qc8NO5ZuZ{fQLqGIG2cG`)r>|uh{*1T2^{v_Lbvud~O}^#^ zzneF_;SJ09o%@qN`IGCv{oB9&F4FCy)5zdJoaRx6dUO@%e@7u@MoJn@I=GhZngw+- zNgj5p^0&)QM+=`Y;_%9f@qQ|92cjO5%b=_h_R|n1UK6IC3P#)X;?%8eJ@XUaqAOm& zIcQWyGGGNJ2NZ$x8w_^F4pik$@E|j(KV-(O6kj+~ALKj$b?PkypEPwZTe+XbZHMiE zGTRBl6t8Vtq*wkU_iT&pqa8Q^&ifMB4oqD-cO@u~x!^v=*4XKG{=n}-SJKG51R z7~(+N7aAwTAJ??8q7OoFrBcNoGqeLzlHwe67s_1A~M-8{XAWvsZ zF2^krR)xeL@q1}(tD(sb?EvZA$6sn9gl!)H6#K0_{t3&&fsz&6rrZU3ce_<0hB}D`c)(oso)$m*wWK@;kS*+Psn;|eumCx z$ZX;s)2a~7NB+r2cw@)zOn(`_34YG@X*652Lt{nMLRu^Lk5JVqm~&6~&1$a2Sh{`Y_X_b=o{x?RtD*0b(*mWPs(ztR%q z(Eh*EnM*E7#`4zEZI~vqQ#6l*x|x{e9T#RC(dSE+XT^!hHiUHuo(!T0$2m^gx=m|< z0}BW69bV!iliH+FZfnMD8eub-#4ViVc5mH1(XsH4@tp~e-AZy#b&k$?IX{=bJy1GD z9b_g)-kyrLU1Tr|Zu9h-SI(FqqlXv-d*$mG_;LW%j@tU;=d9lWf~!KdCEI^!07sQQ z%O23?YLa))hpdLJ2Je2_i8{&2j04(igIOkwyl{JDX*&k(Njwx@zL;+xzUs#Kl1(ci zUj9`Y19aOT=#CBpF6C&$f{U=ii8Gz2{xLy12;-Ob&c6BCfB1)gIQx$u{piBlGafzM zbI;YyWwtA(>zrT6BT|(vd1_$vWZS&j)M)?a2#bggD(7&kFPr8U3X4SU9`SgxZ%EghHF0d z>W1UsROU2azq;7#8P3GJiY1@S0BCqtc`Dy(G=1=jQ}EJwu@%S?MB}^02wvlo2DdO}R2uOUoMpx~?>>wj^+~4EVcUSx znHP|_RA?8)+2np6DLt&dqO z_lJ80zlOS1nOY})gLqjx08pVhXlQP@;f7`GE3e0Yl=^U~e*)V9$3bYwv%1*MuuS90 z*vx=%r-K77hmk0&g9WUvGtnV$r8)H^y|^ulvLJ8t#u&!0t2^WLgWnmt>5aqcW|NgT zao}q)b@(!Xg3c_%TUN?;*!^|hj(&h^ZfE`2kNwyxRwfz-u_Ld$F^kL6{jIm&nrCD= zFt>{5WVe6q*M99i$~%0`>~m2@U%=DSxiq$DPT7iCOK7)@DQla!+?BSoDI3+9Gbna+ zxr2_ZScbre7oMj~;#!hV>V)8YjuW`>-vNT1Ft!ghxfJcp+0M{kJ`#f8D@a*I0%inX zCXl0z43hlTf`>m{()D1SGUe)#Pnf!D<$&K6C1t`q=79GgV&1#}){cEYFv?yAm(nL~ zz`FDw8p%_+%E}M6#`1DOKJ@BNT7`*(v`lvfrHOqjzopD)^#^~&l^uOVya!XK-B0KJlMM`j*VAcxB{@2j`dUH#?P59pAI*r{SLu`b znLgay4_SvUqc~Bh(4Ih1{W;zrR6$w^hEYiqbo6J^$=^3QHGOD`EsxvpU$)|kkIZgt zcwXbKqjZM1ez2M0=*_O?{N|a@+}dp3ym>bbHlt#2L{VUaYLpJZJe^4zrW=!rFM%jn zY#Vz%*aA)4P*9Hi^RkkO3SMXXGdRN3;;>Pee@33YFkzCX@fh7jO9`Xl6;^KJ{28vo z=<)@3UkEE*b+Y9bPiLgRPa6@{`AAQ$ZPBoNbOIgemG|YlOr!D=3ASYm86v{y&yqRO zUSYChcLu*4{`r{CBsc~%CTHgNh#MuApe5kDm!=y?w%fYRH6(!aPS7n8fJNZ=fHe(=#P93w6dIidDCKS zBmSyGOb4mocz#}4TqzBtJwP7acO!tQHeNC#LbqZT)mNKO>YBLD5N;mPe+2g9rHiQO z)yT1aU`jujPvHrjZMI5=e=dJQMq&-wLV|8-I$QnN^n|=DTKaa;D{mw=D{nnI4fAK>zzT;9 zO(F}2kc&IfC1*2Re?WNw#%-&$r2hcR^7q;o5w?iW_#bxWA??sP>=P-X^L!UV{)1HL zN@g66&>EEY>DYeUYDO!l#C5U4o7KuLzo8W0XrLrjWT(ks>VR!>C9a;;!V(%``8Kx=2VhqeqG~f z1x(x~NO)^^FiZ0MLg9j$pZJSbVe5x;T*h9!VH#)Or=rz3(?e2d>l&+JmXV*bT^Bq6 z06+jqL_t(nM$%|#ocrLx2KeW_;%=#`g$oW~J(%YV$>s7nU{%tvH+TPCy7!dx0Ti!G zX*QUYg~ZkH?AYuaJ>BZ7c*35`lJYL@gWf_%?rj6}lISe=qud=Zs060S)4_mlXZCaa z4D+x{4lV)b5~p85^O^v@KtaEhhqF8@AiTdkm_m8nQc%IW9IkBSWi8y&<{=$l@p2H5 zd(GxWxSi0%9e3Pu9%ahg?Z8#Xmd?!?9k}Ip>JYSc{({HoFGJbP*IA^8rjGpJ5B}h- zyeECy>t6S|^(GhPhZ;YoMiN`X_M~!KSw}Vzr@+zWnEqP_4HWz z3eWjQ(quZ5mVfC~DKE+L5RE6(v)>HgT>eycb`kHkjNu+6OQ%g(R*8UjU)c`GpGNXL zf$nz56fb_QLs{>HpAWE{J5Rh5g|toRk~YiNH&%#sr4jdG^niE0U8;4AJCHslh@9^<*3RupQ*AqKtdSq{x!-pj?=7)?ItoYg;zFbbvA@ zoh3Ym*AHim{=VKYuy99419kGhz<}TM(O=Leo(c~gMJI8>#TaH=vAw?Ueec`+JHPW5 z!xz?_`{dz{+dkBs^Q~`e?%4R`(GQ=!cW}vB$9En(!Ajr2Hw>6+PY!Lb9&B`W@2tDS zJH`$H5NULq7|-U5Adji@H=#_|1yHHt~7qo#()c z-sRzK9?}jS)}`WTaGzjVjCWz0(_r>>FngW`xPESKb_Zf|eEG5?%?GcWKkK#EPtR>y zPG^3M%Dd|m&8j`OHurD*3Oe*p3^*)gXW;b|8>yAqRjQRsWApmTaVj+5y=`Hz9&9Lj zR1)Cu;s1j+I_SvfM5$~QfR;2XRMn_b2E#F;C?gG_qqVDn31oO*dEhOHzIWY|Xz0+*DEQiX|I&!*} zWp-%vdQ_Hg3EM4BVGQ#hM%-~ohjqwL-sg>d=+9|2@(wR4Q=OnsM+dAOzprq4hgv+& z9#h%!z>Y$E@G1F<2iSCaz^-ib$$qkQ!6$LV2n+6_H#{Mpp!83kc0a)twqtymYVhuN zzk7lXYQQXUz#}3f_|vdmrK~o5rgfgTu`lG%+=vdWA)NydJK$tSzVd#|6qz{g7%gw| z7FIm)&jE+Mc4X8rcyHT@Y~gqHBePR*xB`-aOv`WGu6Q^&BkLpU%m-R_kly?IF25%a z!gENBFpV@AS2J4usUPTw>_VscTMt!+*p^A!iB|?~5Lx9RKL;FsV?3)(y}GN}9pI-l zB{N1^#}1Ctfq**`0r>;|gA6$CC(hLa3+rHZIY0O5*P50x+8z$T6A#_F8kDPa!q~yk zo_0Wg^sjscfAZGGqM7zHtm)SI7r3d=-3tv1nop=S+t?9!?_S*RH(R|Hc zdW6-FU1`fbZV<%TCV`pwyTALp^MB_pZ<)IJ=9?DQo%5u0=EIAh-yFK^-=EY9>|_GqcNgEt^;v z?c6_{fBlE&H(E`*_?>b5U^9R78%H-&aoqK3zUnDY_EoL}G#sy{WyIXC4J#gj%U99B zJ#Qn#Pw;q|5L?9;;T6`jG_nboXApp`HbNSvv#m6|7DmBQVA9aU)%vydlwkGU!7Tu$ z8qU~v^8es&^U_^uyAG=2pew2Mw_z4ey3$Y+IsRuEtMMn!asr!Jc_ja}4a0W%>nJ1J z4e-@_weC6DIoT;VYjR(4KML*;erFQS{G7Q(v4ShKY7r+rPTfmMl@bZ@z=Z$AOOIjM za}@^$Z^~lY>JcTwvXoyC!{WylpL~#aG2oWxU40-gx!PtVae*P;GZVrnGh@cIw6|%) zKgxT8XL&C~N$f%?_~kUOLsInd61R4X(}9B>i?n#~PsNcz8EITfCfT@rge!NQj5)YL z5smoZ%fgFZ^rB^S>ZkMe`zp>BBmuLE5r;+xyv;pw7SC_M{(8f;xC2jp>QnD?#*XZI zvm@IOW&{mdE?K7&H_u+#?P#t4lp9)%lOBzGx$Z$ruw@XJagj~jLB+px*6?PYJPty` zeU#tMFs6mW8lO$jVFYDW7l~7RbJ*sg{K?dgM#7fLv_ZCcd72r!H1ZRV=#_)GjW;=A zILB`Mkvqe1FEx=DU`1qH%4{7;lVRpVC*&tZ^Y{+ou2^}MEdyR=@O%I=H0L`Blye%{ zaZqqrU1diPp0ro-wsgo>JIK(4yK6Jz!bpri+lqYZ41V3FtF%RXwYP#bKEMW4UOjj6 z=!X**oUL8_jSNtZ0Uur2`j)r6W$vRN`N+cB(;qe5dFLlY*KB>}&onnS^P?Z#ymN5= znWJ3`%``LN@#=_tgdd)5nxmZFM(Uq3PZ>dBUYbQTkAueldvq2|%4Rrq=HevlW->75pqM z7H(@pq0u;-V}`Q^{K(&=S5*Ql2tONB8i#4A^eKdEuMLk*eLe2mT9^`QyyFJZ=4*Ja znPAsR>~!|T+c<^q8)-GZBBCr*MlEbVpT4`pVR~@e7z>ASc4$!u*a~voEu49z@wREB z?BILoRp?PTb2P4eeF%l)684M=$}-S-?}H!it$S}a`%U73SMF)&o-FjMIK&$p8j5y# zocyuNbmbQhKRb&qeG6nd%O{>F*fu;C@Lkz;W5$&|PUC*Q1F^smCyvmATRu2r@6h2c zT9Y5?(wP8YzS5Np#Dn}ec=T}JJhHI^9@*Im(&2+I;k9)Nyw}2NMwKlQ!o=CZ>j1VZ zkACTst}R=(9D2noUa^nQw644As;f?Ce{%MgTW%Tn{dI9LsK|0Wd+YA8ui^gsEN{f$ z>;5{k_G8Q(t)rrG(LpPDQ3jf=Pl-w(@(}qVkJ1&M)OJuO?Uk^rSHmbnzAlLE!OA@P z1AH2KrNORxHS5T+af0E`s*4dCWbLGSZ{ZRzu1YJfjPs{~hJp#L1VuL6^a<eg zu`_yQ#KA&tl(hMqS*Mp;TDx{rgp}RVUG)d}g9DYGy9!|W3)h%YV?>o+T_TKiWqhT> z8520laQsuB`qb7x_=7)K%`1otYu2AN+|3j5HpMkB_|xXbwHF2W85eJFRxEdAzoJ8TUcoy1`H35kEYga^QtL_%+E@=(siT`~9Z* zrf>Qtm)m`m>0xiGkv?Pv;i^t54Q9We!xRT;7@Mhx;pEiJzE$(hk!$amJpIZ~&aCsO z)gF#4z3Q>ezRTvX-TTVhn^hM-YPi7r{zGRd%mn;ePRc>$fMVQP>L$=U2F#{%GMR?u z7ubB^%SLNlnQ{l7_#ujNJJ;&YwNWAfSq>`T);2Hm@aHT+WnFn{s}L%_Q%nSzNBraH z2xE2TL^tv4Tfda$9POv7Q*|cXh|4w+QJsRwlIqZL-^%S^3|=O{MEr*Hb|KA>DJwL z=(Mxt46tr*CoY~n$qb&lbr0S{c6RU{8qMtt%36X8-;^E)YGPnLN z8i%;VVZy={xA|iF@wJ~1C`tzXiB3Jvi-+g_51usUAm?b+>NUf?gN@C?PR@Ni{k6@e zOa8BB*MVmAbC2CQIA{Iw1H;Lgy<_=UT=z~Q;FH@q-PJ=ghlZ2rBI^_qJMa@W2lB@=N=Hj_zBi;s8K?Mfg(7%^d{1@@MF)IX2Zl)#tg*SZw&QRWtQ>m zj1g+@;(8C$nT7GrB0a$7K_vJ6{5n)laJxdmOmrh*hbn)0fbv$63Rd~!9S@|Igr%&6 zNtcDIj=+YLwBoVMZMnN8SmHa=#?@@B3vV5kSEu-rAMh%mMTRhGtT5flpMZW~(i0|d z#aEiLvrmd5@};+eueg)!mRE%<<(3u!B|;1S>kJHW@~D$Fc<*X~d+5{7h&Ty<53}#x z+)3Za_tiJ?fQP(o?AU2XLq715m*;-zmwsuE-?^`O&1+Wkob3Huw{G>EL7tMO&Qpi@ zQ_hw*cFLirM@vT+4zrPFttw9^gO(Hd@(ln7J?Z>(3tXnn$FMPyF&_YX5KgynrYUzX zzT;6FU+v5A%*v5#I~>zj9R`>1r!b+VM^`}bTTki4+Pu?#2uuDgo~3y8%h%#bzLo|p z(@YFbr|$Nnt9H||xV4jqYUt>*M2{?at#b`|d8WVvc?XLmWIBS zvPgsYTi$i;6o0m)EL-a?orSlpRPgI;%U`&~SMn%togf|KT*ujTYA49Z;s6@Nz%$>G_V&Z`rctBQ5+%dZLHtVdabx zcql1;^{ZbU!IK7r_fKJXbLjA~sWmGn_I>F3xlOPA{Pf&evkdqSHiQ5Eq{9!KxBlRs zPhWGl*Lj*9yY~6KpFj7cd>n#$OZ`^m1~*|Yq30XpxKAKF?$?My6G7EMn3b--8cSx^ z%uMg2Ltg{_41ikUsfJ_HGKQ5P#@$AcBmyU0m9Fv-B=tc4<`*}1!KoOMu1B+Jq*GJ* zbbjc}zPJh%z8s>FxR>guJx}M+mkW4-ZL1wRX%{@4!>sOhcz84So$sPU->EWDc{uwd z-3$%aFV}f`-Ivj7wgp+CG4zI#u(0Ey^b}2PbS(K(erbZZZ~R8S&c}1TLk7nx#S8%K*v<5nuYBdI@BZ%Z zJ|D%qmAmaLS$Xk3c22-khE7of8u_h!O>5TLt)YnHCGHB)Zp)oG^3Hhz`O}N*z+2oY zyXo||VI55C=)#Hbw@-PxD4ppssdVCW+m?#I-M~@2#0i{w>DxVc!6GY!Im$}=OW^ol z@)x8Rrqevt5tX;`@`B)z_vKgG-msTBsJ4yKvG|noZthCoNgKQk`wn49P-~jAS4V-RaEva^NQ9 z=?t%@&CX1XW>=p#IJ)iXW?|)%n&ufl+i+!xLNv{fUa+@0bIsu+lhgCN+34!%1$*iN zUidJTTb$hq_qHsN-PT<^FF9z*8<)TJSoSIt$x_d*nnq_}n>Ghi$?Jca#@FH6_!h;( z+j_`n=rD8S9YC(#oSnJapI2 zT?d!laKp7xc6Z)+$KYvCds;&y$o*j(jTI(N4OOEf0-(~OV{=KzJrqCnSV}C*gTO{u zO~Wr~#e?up)5-0iK{-obLu0!iT#gX?@FnymOrTg~mc|D^5DJ=c$rGAl_fjUEwAztc z7EBsJ>n>0mp~CEvtyiBM(R&zb#xnyh^HC08qjHbRt2G`V^yF=>k(rhfxv?pOVIFJANQ$rCSg!OcaB85?8Yr=`hGJm1vY=>nCblC&U?U@JWU^?~Z$rEM>=U zJ_6@Qx`ek0Pld!VVXS-8Mk%!LeJhRM{FdPC!vq(6aamnuV>!cT)2NK`JHzmhWq75( zMNqcha!XgaJKpre1a8ezy5l!r>Mb-=A35B~gBbf>_`(++VCis&@5BGx&;4B9hi5jv zz*`OjZjm^c9bJ9()dTk7*YF_C>KDKG#XB#*{PKJ0L=J+-&c*{;MO)cLOWC0x8jKGg zuu~rdb@agx4}R$vG#v!I>u~DERJy`_lHI~|=_-wYEe>(peyxY1t@5n{a#_&|m2a5xE zb(Bl)2WV$I?DQQ})7i~40AI%{nICcSwZ(l50`}Os!)sR`bLf)vpc&_D=B<&Y@TB!S zAg`4M!%g7N{4+2mUb=&*4aXYSB{X?f;|K>cH@^AJZ{Ga+*T0_I4O64}Rc8zyxc7SD znloSW*3rVc)0!LhEexK#X?WzRo3{^^FQ4TZ?Mb#Q$8TAP-yd?~pwcU3lawh3(+rn} zqNDW}&C*pf>d+`0VSt6^v}@^Tjp30Octv)3Q>38`?=&9SH|-_iV91?czPQM8 zy9a`DMT!c`6N*%zm8vqYk-3!`MW`^+F?)3+!rSJbMlTHhs^GE>^9j=J9BA1@hrScI zHdz{ic~w3YzSO2@4>l6qN}n(h$QC&Hv|;`5G{{rHmqJZrMHxF1Jwd~m_hc=C>PJ?* z^5xRq9)5dqyQi6swp9e#p9>+(Xt2}R^|$$9jjxK4-Z#YU&{;MMk2)m*OwnstOfRhO zx6tA&_%U$rKlCLYMHU+LXyjiH%=CSKFKVouNRk0tKcd{k>GYqKQo%O*xO-uir}!*A zy8WdiP&t?YTHTtlQ>np+!F^NoR%V@TxiBa3!@8{S7RI`gp5$#9`6myQy$6aGIH|jv z_u==mzrN;ofA@FK7 z84{kC-sB@cWyo~Nw@p*n2@aTb(;Wm$S-gL$roQVT# zTB63~!Y;fS_{ci}z+vy>DoVcT4Ih25XT~;2J#CVe|Vh6Evn(2wSf35ETVWxJGxM zh6MUgIPiD=zJs_@90n_>)v!!poZ*@-yv60Ty$-ics4(ui=bno>J$n%iWHt2qpvLEU zZ0AM>BloEoL;@eY=xl2VkIY}?K~y?=VK7BUV1#!dLu2qG7oK?kf@KA-&&R5ix&oU= zuzrdERETYw&~}RS|0F(X2Je?(F6{9R5X@Z6I(puC(c7W z`P44{qC0^41?%N|H&d@W!1lG7kKX9iK2rr{Qc(r@^EUgbC!{Zi5@b>ZP#<<6u6(?oMObqKA z;5u(Fy@?Gs->g=_SFaidxW&Dwjw{YYWeN^E9Wy-7VN=^AVb)>r3r~JUh;ywM3gyb5~pw<`zubSulo1%K;L z-nbVTXz>u)QO;*<{LSC|&8>FkuKKV#N@spgV1MzQf4t+s+NWfh{Z=~juUg+6e!`je z`|XVV!-;9yP|i4+U+4fQWM<{h6)^9KA1160hNdD~B6Q2Qj#q}8Si3crL6d>7c*kB6 zjb*|uS->Tz@4M6axCny*88%Lc)*1&68`Q*6}2Wxc&=)~85{ny`(^8GBc_3e*;{NpoAM}GY$Y5Vdlp5jOF=*L*5tkgI=_mD16B;R1? z4$cMcSf5Mh{wSZ!Mh^1zO51OXt8n67WGWwRVX6%Jlc!Qn+wR$T!Ltwk#?{U2W9CuSaP2$K-*K~M} zF`hIE;B5Fy6;JtziqLiZ$DecxagoytvlGvrw##lDh&qdgbTP}Q=Ne9fzKIXmT+iq| zGjYqw&rUo_5Paga9OhAB3cV-XZD6HLDz2NYOM{I9d|u(ZpT_55y3j4H^&`xNqt(wN zWin6$tTbp0|6(Tm2A}-G8aM7rV4k`SuQ2RIc@ZbgnZ*jquNr*Pw&`?t{w4SXNu0RK zt)q-|AO}aBp||-})FQh_Zz;4cPXSx}DN74morZ9ROS`9{yEo$tC$@Zb@M?Ts&@&D* zKu$eqbmDo>d)_U4_3Cr%ckXmWiw&r;;I!=W%P&8NtE88G<};r; z4SYif%fN{*{06t3T$cTb?~L&nXIPezB;)Of4q&k(btRpPgU7xWmoUcT9bXeP-xj{? z*4x#6@+Qz#wcKBq_713*pLz2$O8hBX3n%ju(fZXR8LSA~{*3CEK^*-w9j|PM=$f_Y zj(iWngup7-wxRkNTr`Nsd@8QwR)3XS8tcCL(7}QSTX~b8xwNRG1Y2{GDm}(DA5?U;ruYmR%X*u%(^(nQwgK8yf}^Bjt#Rgy{xUx!+|g7PE2Rs+Q=zlHsiIuOdi^B zWvtpk@xMpjg9i^=_=*#6@v!PLGHX337j)>^?B{jTMRisP9?rHx@{pUsRSNH5;mSYT zf7(ZPPW_hwi^I1aXeM5;dEwa8FFmx)?=sK_hxt^#9gxbJCj^(f-0pRsI*?>tMmTL? z{@TL1bZaBeU33K-JagD5mA#k7xCmSvG$70oXTAu;nUxQ5$)okFSZy>mylRLFV^FlP zdI$=g;#b&0v*CTZ$uEu2hDF0%&0yv{8>usMm(kf1y@t;GHX99{inBBChF9kdx@442 z7iXU)^D{hQ+HJXuUuBCzlNlkSbgw)OXc#L=}lSQfrt<~CVp z39kWdu>}Ii3y6M&8QG^ZW$Lh`=;`PzV;`;uGFFh_J}JHzhBGJ5Gq~s{76#cnid?1q zJ$Vve|7SAsIDqm%=hC?NEwg}24dDive;oaIaCUqpd{KHkGh`=M-I$FZy5fo}Ze(fw z`d|2kU)Y0^c5pmEo(6OR`Irfvg5N_Jv7EY$ef4v>?)E570kd4zb?h!#rX5K`OK(>e z%I|yU8Ay`1GuxBs?Uzy7PhsR!EprPH9EA1T^U`F(`HSK<5;|PEb&&50m2zr&<>w@P zeVY32g2g83SVo9X9@-V&OH*|uyt8v(y<8zI{61h9X*8h~TU<4R4!$<7%1w00t#qb6 z$$-~)A@bM{`fvxc_M7;9UcKPW7PsM;wV%OCQnt(BiK{Q>mw`Izm0$BpScN0oeoU$1 zV@c;AGaI;T?$g4)`O&nm6%OA1_NyNFwr_pbO@Hz6=Ct?RJu!I^Lt8iRo_qejBO6y7 zIKgvZJ0^!&2Je?4WhFlk#7(2y{LHBbo4e{Yj}12DX;d^@$wG8G8Jt$c(&C*5gW-oy1B z@~-o1;pB(;RD&~VjPby`m%NPtUnf|rGAF;_E->sUo)%vOriBr&9ey>|qN`I>z$Hw) zj;P&xqd}g5(!D@iCF%Yd9r?A;;akx85QcPFK7N*20mn){;Rk;6uDUK;+Jsl=v0}nA zT*8;ajx7%JfZu!Jo%cA?p(hnMu>B<+_LzWH3AXvSpizz)2p9m)E_1#7{E&_vhlkCU z9?h8bRXPZ`&XkJEo|GHQAuC_=iwbYF0Zbo4hm0OF7vOS{PRUV&oU$o zcNA9nC^=Tk%8U^YU-91a& zSD#;1KFi;i7s=?Gemm@ke<|+bw}K{o<<(CcnjkH4Ezc9*a~GaEP}ao@(}U}~Z9k?H zzYWIKkWI9i{qW;(5RCt&F3lfPWi_TMQ(IhxyUGx{1zc*t6@J2VzlY#;xT6f>?o?MW zV7uR&E^g1UGIJh-4DY)89B>XU;x1kVEp_Yr{k}sn{NM*axb^3M{^vLGSzkMIWu)Pm z?$G(pcV4yq+28W4oA2I!c>Xs(HOp0srn!M``SOj;ktdw>05c1|pD{DH+h@F6UKiO( zPyTLK+0jm+&pfBH$h7>awwyEoXv+`7EpzECgQ`8rH~AX*L>^Bd|Eqxai;Z_&e);9s z2+Yl@)PwFvib;VV%EEj{X6H@wvbT-C^7cc`_fPI^7WV9IW`FK6hYwz`VaMd|JxA71 zb1a`_*?R(kbo3r&uZ`e&5;O-M@LEAtNvU`$wi`7QmunKtvJcYGJXzTZ8gRlZ5T-BT z!MWHFf7Dqzdy!`vBfM$b^c`^PCpt=_mX5l{UVv>{I|Iw&jNEeqnTY;J)AgWD(~`FqwM@RDi2}nXIOY?hXMXtIWS$-jr0_q#ZTiG8DKQ>$oemybTGsv z|9%`{MR&ysFAr44mQ_=H3{DiMTQAOp^UisTw;LppwrCWmypN&|qEpC?;h078)Z(mq zj`B4OGlu>W{;NFs4H=9rL-r^6lHIN!`H>&7W51m{>gjB5zWL?>Gda&NH~{c{YxhY< z9I#u#mALb{Z+zirKl|BrmX$W(6;QvTmRUO_gg)vmkA5J>^`e?(Uc@u}^0|zK=>L>8 zzj{^e@Jlb`7-RSXe?m|32wQ*AqAee5W}3PrsN^s<@g+N7jD|&V=3~|lXlN(1@Mjqv zdRDdwFZoLOg&ULHbwsT*6glxc&UAcim^Gt6k`iYhBHgKI-@^ zbc>UO)1--d%(ob*SFgZ1NjgUTFaPsD|MN#N=v)2QfBn}BcIN1x1wRmEhVOp&pWgLN z&v@4DCywtKec-y;)84;hIB}-C8*ujd7wkW{Zf@_yaC+6=$-F(ac-7GKG>>N6W z3>33nLlh*A2l>Kast!^o_)~Y-M0fnF^4Dy={J}*XILKKpKFakD-ex$$xvi!AHLr)g ziC{gHrMRk{onL!z^DDQZ>h9!f;PmQd;wv`Zw6J_`*`a+0j`FcoPpIdC{RKKwD>ySa z1l8JCL0ZWQnm;SED&1O-00Kww_=`=9GQE2{g&^fHlM!VKUVjOe&Nkk?=?M;mcy((M z<+$FFFpZ$%ljaoZ`ZS6vWiT&{Gag67KHa&2+4y-LY7qzfRCjpjg>pI@cXh(YUC_(< zGF6R6qqsz>Y4etzvjg*d`&9sR3hSZ6x2G-3qVnVK z_+Q9cz6$3c%J{Bh!<{+m!_9FHF zlcwc^ccR@BcOTJDfi7@ZZu@`wPygxjfAcqga|<2(e#^w(qIoG_S+?e>S?guQ-ulX~ z{_3yxP}D^q{pd$eR~A`*&E6-t{PLMgzdke@hZS%~YaxYw(Q&!=iLAcV9x(%u_Xd5PcXIfn8(9sXR z7w*0CeabRGl{WA#uHfm>P`C2slkVo}h;QE19Qvxw+gL_jc65Gz?*0=ej;muAwF79f9Qi>* zCI)us$PQu?xe-KDb#7UU&m`^YAV4jg+gYVA0s|kEU%#+9&u={^^o9Q){(GdF5`u@M zd{4VFBjo1!zdib%8%E7jj~!Y#$`0fFzu9o~cSid^^YQ(MMl0C?%lEdap;Rc1)XH^+ zK63eo*@TtXr@sVWc;nKcQMt~bT&kZy3GK%oF*@{`M?dW%cQrC_bixDxNruM|K)`^qgM{T*@Ok@iw7o-lT1G^8Ux(|s;GNgF>6?iL!*EsT`+K&LOZ*;!bY zplxwF>o-8J9g725B>4<{aVtXE z0pv?AgLRzpN)tSm7t;=q!FA*-zw#@$|JaZH*iBqzyOU409!4fT)jXhmxh$GD;@ghB zVF`AQr)SS$N&e!$|NFl`lU1ZCX7Y#WynLa~``_6zI0bFR?~=RnL&}4Obe7#Xc`~m2 zv0XgUF1HE$jW{?-pF8-_QtA8frcs{yD?k+{T%}QVmZmG3%TBuXUtpC7WOtfQWDOmp z-;)ww;B^;GZ5a(;imUR}4zI*dI+Aqtoi zqrTP20-fq|X6##-}Y=Rem_1qJ)HjfWeeMW?>{Vi@x6E4`IcR~cQ=z0Lr;mW zu)+|`PPrqT9!T=7acj;Rl>V-gtWf+4hGjH7BUY4?`{0h;kJEwrnZ_;+FiVYTI{_je z2M0+)L-nc6-2a9SuUiOPf>;fBkq|4eW(WKs%fiU`Y)*<^Z088R-88V9Xgqfj@5$*Y zf8ey-rC_xC^oBmdLL<2KM^UwK(yCx5O>65e9Hlr-7E`czq&;xr@FxIe$am6>cLw4N zwHIH53_(p(BWC@{7yQK=>!Ui`MSOAwi5a34qs%D3ei<*lV^2a(sR*lll}}fWUfIT} zzqJ2_&-@qBN%G)^UcbDShfLbA4z5pco4(?z9Qx&hrsBq)w%*!wmZ!=@P-sd01o)r+ zXW9;)^ywgMKhQqm{yOHw*L=;_-1n+iz3Te+z3+W@eBbwd-(e0A4R7JAZVX@-Xomw2 z&9M|8T)+IwzdXw$HfJ+)zl0h78MLQ){Mac*5_Tl7Xgp~0`)`Oy_`3HZ&3 zuKh@xzc#)2#a;DpaFx%v45V9l)0KYd)0F`Nv_&_W9wVL{)Woi>kJPvIK)vJ>uf#1- zSKBsk-t3v2U2MOc$6)QOU;Wizjjm!aDHOQCwY%?1@eZ+Tz1+0J9q6{wtS{J ze(&yOEB?o4XV#e0_Tz)*85^1-k3aK19%fj!uzY@I=kep&mh0EObj8R^+V`X#I$MhB z!{`?2GY+5>0z3R_d0^Uv3#X^G?etx-k}t(uqvgen;=n%AJZ2hJYwoBWC(^>J6i^{uT+VYs*_>)YJ2jcM; z-eE_%GPub*(A1mTF3ZbLI&oF~#beqwzpBr^t!xWlusGvRowVtSM$=`)Q+69~nlEI; z8<`Te$A=vFQg->}`B&P61Gb~g#_s3a>(}!s*4w}Ld%yPx?{*JavUJAol}|hN0Ubf; ztt;6a>^J20y=B&i2zu?!_69nHORh_}y+4yH}F zC~YsDaLRPHif`sudA4CiE5YfEh7Qug~*ODgm*L`vwnT7VTpbHpZ(dN zt^diN{K@8B?|N6RFw&WOJ7Q!<_)|aiQ@iNsKhKMU2RIQsH8GsvOM}gczx?d%rjP6z z3^z?d6T^w`dd%MavlIJfXP2+p#zj|2Fgxkfwp@@9`J-769Y}g0Xc}4Z%!KXSf^-9u zej4Lj`bCz3Q{lpISn#)Qtnrr{J%dCZ6Ugk(KI0kB_?!{#_d|3(;!HUHoW<~84!U4l$*E`s9(M_ZPOo0D+PK#joLn|ewEr*)pnTCz0RNQ2 zu2JIF@2tg-C=5`7*-Iy^%hNRce64DkGdPsXF-D_n>BujoBV5lCrH?|~#K?FjD01%_ zTBJQQa>GE^uOHnZ6uTo#_){3;Rr)Chw&^N;aN7BRUnQ@<;=&`s#tdl{9<)?`!9%?F z`5A#{S#jR-nMRtyr4hcAwrMK8af=M;WVHEb*-SThY}}6ELq{*csqiGMM`I5>?b^FU+_Oc^( z>de}`y5^Qu!>ZDVx8zeE_FX4m{NfkSeE;`<|JJv@^{p4uQOu#Nk0UGI1b~Eq746!K zerLiorWc7KJ*xPG4cV@Q_{ zrTk@^A^baLCqn)+3~0Q2E^G#1>(FcC;Bh_pIjdwu*Kwxl7Plq1>Zj;+ z^<+pVJBzG&a(+L}U77>mmZQqst%?v{yb`YXS2)e8(>cKAz%*N#7cdyTk%MsmRe(q0 z>u{E5a~7IoPdT^wal){#H1L&lL~)^m`2*`3`YH ze?0)x4LAq~MfQ%WEc#Vyol-L3R7TqP8C7ZZh|skD3>U^_s=!DGVM%1(gr{{87DJeP zQy~bG2F8HOk3{TeFtd?z+o5&*8K(+9^DSlB29K>4XUa@|;W4(6-iba4PDk*bamWhC zqQobAmgb!@kcS-5mfW367 zRD$GfhXV)ReE7xdY^O4&6Gr81eU;nrFGU`NF^x--^-`I17d-?Apz{-#b0NsIN_Ud- zop|z-pL`#u-LL!Gzx~@=IYf5=Ssu_~=N>!qpQU&^cX7SX0C_shp|4dGF_P>QIxl?&N@Ro7@`m}cL3Ky2Tm|#HS>FuuWiH{Ml zWRw?M7`+vyyYecxOsshA@UR!w#nTabrPVjs?WoMlI_NsoHjQEZUvQe426{RnY13DG zHkzREIR!mSOz`y66Q6wAGFlI=60W-Hs;eHwUik*<$j4(mgzNd0#z7mi@y68|mfEjp zroNGFm&b6OV{X~B--BpIe|635rqApd47V~ZaOnDPAGQ0y)abynZm#&jCXTIq{N+Lo!~dC#p*btUO22mUrPX=^rb z-u!D%eBu*b1(m{_uHdaTzkBEB2NUKnCI=c$FFN% z|0~ZOe5Sc_H1o^fb=m<&Qh|HI6Q1x>j2sX0Dw=Qb&e9p~Gd&6-vvmd6A3+fS+(uj3 zrL-(#H}bZDBRoU)Z9G)8K!>!#j(99H5xmY#n0SJ_7oQC9d*Z@b`u#XhAUNL5&WISl zvmHCRNrcMJA8vKD4(-=6`rRgtC`*@F#U=h2)9E0-I--i#CiuZdo&=}(2TYV-8`be; zDX8QVCXalDP9a~!FZ~#k0TQ~37Wr+1op4aXK+A8cd(ft4>81&89hg$6(&DdVF37e#mycs4_8fL*J{EPhScql&LqCCN4CsuV>$<4P9x39#&YJ#?=xZ6UrCmI2C`tGj3>$Rph^J!*S6p$$5e`RQ$F|FT;M~iVw`=C+X7}EG_qIz8?AvzM&G${NdCT?7 z*4QF$J~9|Q@0{lFMH}v!nV4R=Z)Vxl9?EPzgm>hv{7O^lnDBsjm-J^DTpXtJb*mB5 zGI+NdR8N zXT6@0_YV&az4ra1)2@A>`KjH`Ntm5KajLoVk6zZiN+RC*s9eWsp8oWwA4cG&F24BU z8!o%-vbVYPj?y?20q90pC{UN&Z9v|Awc>5u5$LhkKB}A9h(407@F?6={2_#DULjW) z+ISNwEXqbT4*3*;#8yBBw!`*{j`!02Uiv2Jm~*y9oY#U*cb^=X0ZWpfWAuB6_@LPt zxpXO<$rRgs%uof9H@n-o${+7PX@o81U&<16r+yEe@Zi?&yTMU1QM3`=@g_7&yJ=9$ zeuniZGm;J14rWxADGTn{Z8>#|#9uW^oSo@tfM1?*$oU9XHj0K0uyu$pbb`O|8de=* z=!6zwsyu)ORhkX8XGD;zSR*G^jvK>H6kua;&@0K9e*RflEUHk8%E(W_`ei^=Sz-&94jUeL7|sukMrM8p^X7acw|ga)5$LOXcFPhFXo=N-Kp*wu?F# zVT{i*7^Bkt%r4g0fC#q}53bNU77_)_e6$rFf5DFpcus0g(|C8%p|7W7TgQlSh(gVF595o*QaZ_>^tGKJPEanS@mO}sy`Flw*YFkxR*ZBdPvSavMQZoM+cG4K zaG&$V8ehk2;iNNo4A&I?c*gbAI)gj$EvyPa`o546VVJlCz;Fpk*}x$UG3JeNHO9N$ z-gJmE>&N4+`b@C!m~vZR;itI9&aSg5dOE(FPYdUC#@hu&OK2p0SI5F(r1_wZ)}Qo- zR@(6+kD{COE2C2t>5~sYglUE!i!?l|L_n0;PaZ& z)cEQgD^sac_|v@eo$s9Fw~>?b8?U(HioKkw-*Mh~=j~xepLgnk@r1gMJ{<+W=|m%~ zS}AW!-#Eh12aQ0=W>)VQWL8Y%22YTjDt#}^!Y7@1>u&wyz_vb(!}u>hc|pFD=mD>) z?L;0tDCxD!YER)o;Z6pp{-;i^cHFNcl7<9lzZH)&btMg*Y?CkK3>TQNxUDv1dt{~W z2Jlw@N@m{XYMo?xokMRa2p{J;&N~EmyS2iqn}_<`QcQ+qJ2-sg_{^&L!J+&1Zr=8L zcdS^=I_v0~LxaIf&l?>$f8D(^GjnV1XI^xCfpe^~%}mHUG(org?`V}~@|ZP`&6_uS zg;?F2l|^7JU&k}?v_>3V1ve`(002M$Nkle{2jmi84sOu7yZoC*j1W?9koKLFG~S#Gxr(2mrc8 z9i@4tXCU8P(Q9D>YhwKA@GX0btLnn&ML0#Cz}`QCite&2c9Fji*K-$a=;(**)?f>x z?I5kY##9OWX$)KHFF0)JN!gJ3v?uDGrZahhj(a~Jf!WXJTKCdMr{43P_iW@VZd2~Z znw}?T{pLb!>UPA7V?$o3TS?SP4qYALUi+R$Kl;(TP{If35dBJ^D;_?I;$YN+qLxoo zM4iOKqS@jKL{rY^lC679$v_{0?!aodND~H%(gFG_GwqVGlpVjOWcoNA)LQh)wC$gc zrN3Ge834A+ll*iqHHO(anD>f5NTPz}YW~klDDeXAW5JKADaXcTZOyaZv9o3uXs-~%&0H#kDL=IMYB*r6+QZQ3Xh z{7I`|8|Tk>ZRw-&c>Qe?9eJKnq_G_I!3JpZ*~RX$k(L&fQ*}l*#0amr+j#Nge9)Lj z8)gF*URzU*U3$`}CCZ34jo}5;Uwsgy%S2fGIizSr&lHRWErnTO1ce{I2kjnMUY$ab zdFo$!(}Bb1>O9Otdi)hGopHBmTy`_9ouji}mrX5~Zu7O#hhM-1Po>vxap){#n((TP z3+>WIct=Nz)3Ay+E^ck&b(1V*GOl=vbF8GGZ-Gwgu&0}mA-szZ^0oAe$MPtv-B;5@ zf-$aWP2QwQrofg=6y5TmE5C`$wE5@_jyN9Vm0?wvi2`-;pQK%fq1*U2>kgH&8yv#6 zZkKBX9MKWX(FP{yxF6WMb?Z?+?y}3xl z>H(e2GJYHB&^J0Lc+!)ew41iRpA**yX;0qqAE2yN+@W6vn`hA=y}0vz2jnr2x*$7~ z;AajwmQ!r&O&*pkrYsf|Q+!GNTE1~`;N`c*Fn`In2LtMH`*l!D$Fdt54$=Po_>*}Q zE_sc&!=w9DCiUCWTj?Vk0=GCS9o~FZP#XNsg2LA@*_mfGb0cpFtb_MS%ejUH^qtpj z7kE4-VK02)3y-|$MK9V0zx|4&lcZ_tv-p#;nvr9p*<~k=Uw`+^>i>G}%!)O$qvlfw z2E*^$dhEzWr|n^MJv?#WefOTfVZ-`cDZ8^|Co!f^TfrGR@f&QoH-l!817D^)O5H|J zw(yC^U1iq}9@FuwIt-u4Yk=PIyYQ<&{NWE@#M!7FY|%=?9QFTJvh(#r`?*ui`U!qy znJ-I+{-(bg3-z<#IQssN?QOogIoKTHk+<0`^UW)N|q zbh-^8h;kYyN#jX6(wk0UN<50i8NDZVPq4hc89LT8JKbhS&Mf^xmhn$_lrFgWnZAC7 z2Y+UD`u(-ECJ*8|LtOTkh*uzuFNG2%CLl0X#>5+jsWQuhc^8dxwfl!Ew6;MLHAYWb-IZ3f>8P>OP+K_N!iC4q;@m^mPd@Hb z>jqVnr#Lhn-NG#~=AlVC?f4%27i4+?$m$5r)Kyzn-Im!l;-NRoYG>>qg&@g{90><` zr<$2_g z{4JvejO>6bPc$1(xJKK2Q$_=p7>Y9_HCld20Az(IGGV(rtV4 znd{{YF!sqOjH@?&xi9{PIl!09$S)6}ipPhGJbZbKLE&ki{NyLMP?qf+qP_(k{1n1J z3oXtSHS+EM@6gA*`2Y6*(kn;P*IYR``l|Pi&i>O+H$QQ&N5&?b*^39wwSV#-nqMA# zFUuh>WAya$Q|H4MaZYgJeUg2)ZFH0$;IPe>ulu^Mn@2HBY-W^CCFVg4r2-74a1;au zzGm+6D-7nMFbGa1FVFz@(xI=%AE7p`#bbQUFijRiXXQZPAdT0r7i|%qj{HVusrwXK z1nGVc#L>xlzdQm7j2(vVC?NdF8@tmUeRrFc@Yz?A4%6~eFw;Q`Bc9giP=Oex>En$O zAS{hS7|Lo`k_z0z5hrm53*b+_8qnbsNWXC4nm`d8;CHZQD1=vCB+p7)c(MD6Lv#cs zOn5u*%y{9ocje_>Xdup(+^0kMqCd0(8`^r|Y0PapVZtkH-RXEqQ;l7GRp-JLj7rE~ zZMhiU@gLl-R5N~e`t@*!`;CI5vf9#xrQ6PIw>gEt*K;3ofk zJABB1%x`s{c--S2x1Cwj1J8WsGnZd|_0_BCa8|$J4R4se;f5Q6m>GQ@w!!uu_vjX0 zrla#8IshQwRp0rY-+7F$z8zp0b?@fQoAmieHUFm2M7Pe(di=GmA-f>+!q=I z8khPLhBlEhIg@7aeB8kU=M~m45Zb^S>&rQFR0G)s`04enOnSI+kUY6hqV6nosW^Hm^AU;BfQW-3zmG8@EkP zOde+C<$Cn!S#+)!FiYM>XL`5wBF^f7!IcA~@MjtwIm5u>PU6FZmM1b=zA1Nr$4IxH z1b{1F&4lI?3>rt=fZD=9Wg~KNFDpE^kpDTzKttUB1lN7wksqg=EC%}{?4L^NpUqrJ z#azkqq8WVnhUS&qCY#fnz0HBk);IHy-^h7)mBBk<_!pkhgtn(W?P*n+@1~-@gOl%v z>Coq?EER#uV>P(8QOU^Av1x46ML4kaR6~AHN*K*M%0=+@@`%FeZ6iF0fOVa3PpA|+ zyrTh~`5`*4b#&%i8Hw&9{q5v!LvuhdWWaH^9hBQ!7~U8Rwz6yq8V69pI>( zGZSg!D}U|q09(`LH};PC3O(+Vx|iCA(X9+D8dMlqrsbcsbD5~J?8=u8qsl~l=f@o- z+Tt;NbuRKsxsgZmHg3KAbdL#yzqBO}Q8`?am}4hl<=_v<}0QyxG%xv+dyHuEkcOx!JO`K#VYmUA*Q=#P~Q?60?j zMNSe=T-qWCtT*+8gT6{D-g0aEE4~VEJ)|vyQ{HGw$OM<4)z1I6wI-&XilSq!$xfB%L`AdmEf( zU~B%}pP4Pdj(}aKqZUdxw+D4jer?9>6fUx`RQ+KHi1jN}bR7O?KL^ zIzpag5U=ePCv`hyV20&Qy6`K!u$DLq{6)e6hk;25MhXq;r#=OQ}rIaYCQMy|HA ziaUc0oXx)Z9h9*c;y_Bd{1;*Vc{}uqRD=m_}ln&SiqH1uc9wfsKkdxlEvA=>+XbJe4^ziF7a62g!OEkiRTE zk{7r<5am)VNymi+xFfDj7-iJDjgvM_g^SC&sXgn2_sSSx%h;w7N8Bxp>Ej27oop$Y zq~l-cL1AU)0gSVUl7*^sl6CwOe(7MUaA{Y4nkKlxX{Abo#xP;Rqc$!PiF`2J*;eXC zc)gfC`V9NMYgmO_`})_ve#X1&q|Gusol>)T^XBk@4$OPfgZ7ksI(KIL3+(?M zqI2KRKwz(jx>#{TrysJc?ic$_1kYmRWitHIZaF2|d^#D&ZA98dTjsm6iS z2I(NZ@Wmgq)<0M_Jvw^z?aMa&%r(=?FI%xN`s{&W^L^*;9bT|$-@%!=)3$qHuH~zP zw|pwrd+T(x=lhrz?i+~r#J@bqN&q@^CH&$=xj7%*%0XoEsyfjLXa-m%_ww4d=iBo~ zkc0K;{`2AY5x)NSIr;@xOed*_(~vEB@V|ijq=+yzs2lqp;s5{HI&_|Qo!~{dEMI=j ze`|i>`f=Af{X`BpK50wy>OYpTd~JiZrgm`|bj&Fl>Vgw#$S7!z&W7F+JieyrvTfldwKc%9*Q? z$bDA0fGOCN%QV8rX$k+5-%v52Bd2bJ~4|8Rr_VR;^{`KE+H=aFqZqAoJ*iO_yJOxlh&Z_1oQ;e2Edo?lwTaS#O@uT7#Lu^vhT7vZcA) z3D)Wrf@4K{Ls$bQ;)piahTPNZEZ*Hjgh?iXF~Yi z&3apU4Yq9licYd`IN3g&_|vQBPP1D)G{a1q$6dc^>$c|fjVtat!6(-l&UbwXxE$D} z?W6auWiR`DRzEMneH~>wBCpKDy?zG$d&$7InbYos7foq9`uS;6UzG1CbPpM*T))GG5qtr_A|kI4|%=Cgy42{^k2;E+%k8Sq38dc84a#_{#Y=c_gl^P z+&*f)hJ$eXH?M1!U$C0q{w|EQOOU3bSoQSm_Wg|1lclZbp-5C=?2aalqqE zhh&ekfN)*}t{IfdH3-aMI-A<#OanHNB_W;4YMR;moeVY}&5FWCl+kv>!~(XhU1Jii=U20cJHHl(*_~>(NA#kOxbjK9q%n__Py9Vx;?opd+`xop;Ht5k-XBrp zJL0+>fjdiw=VwqKYbpOd0T2rYcjZ+LReb53i7UPcYP>TOXT($RZOTCxbwSXi%XY;h zVf!X@Cllzxgs=D=G&;@imj4M005Ik&Y~f6D{1xAINQ8;61{MY1l}r369cO4+9m1bI z^}>x`+|!i9Lvx35+X*@-&DIZa=4HGx>09I-4TSmHTf$p7I}^aO)SZE;_>C(=Jrs<1 zi5|!6Ce9`KtXdcjUjsw91C7jRaEr=LCf|G4gS+EDa0Xd^_p;}(Cn&#lhI4!ZU3Y*0 ztME2Wf{_`QP=z78iG|JVk8jzsvWlNOJv!3F&PB`vWH@s%Im4kPO_#LEE+0T;jA!hx4AjvDL4)~=j{Kp;n#;@(q zvZkHjE}4~29iO4u+2R)D(=#OdY~z+)BNN1rA^BLo2+l0i08Ho?0D4?^7Vm(G$P|O( z<#f(-bmGfdR-b1{eUhc~B=R5m`sTWJI&gGX7sp|@1C-sj0d_)H&Kc0rS)Ryh+0bH` z+1m!B#dja1PY^)p3|YpRV+rq0I+7zOg3Soh;~1UZ%4q$5m7_vNT7Tjxp;7o;BHzQ|in9^46?RGp zTHbS4I29;5=8MU5NN0YvX{+Jd2=HqZz6c<8gqy~86k6`0!JmT?*(omDO@L`MxFg8o zH_W(ReBunpNGo82D0E<|gU+ER;*wq%;?iibD~(R`4BxQ(Ch+}$)@|B?uk_WKRCygF z+4w?tYbOnj$-|3hFss@@nX^LEi%$b>X)<^b4g)A>>V`&|Q>^gXSGVj;5)O#vl^-2H zO;@I$r(wWJb9f|fOvym-RJyXo+q$E0ace85;VE|Upz2Izl$i;(2ehV?0wyp1skX+>f4SS$QQ(tgGqRR`SZ69bSh+T%M9g zUV;`}>EIaz=$9UU9R+&f>(Qvc_LCrnw1++dq!{5rs0;lWRxD>E*CFGGh-GhvuxIem`V=RB(v zQ^t(8=9Y&l<*v(bJ`#A{bpn3tiCaD+Y#yV6cu*QR0XqC7z zfl(Em?x zH_c?}W;=BTD3>w``wSiOEOD+Xc(pIGM_OgY^tJ_Y#ZR3&AX&y>W-BtVmQMTu4oBXh zd{DMjIO#mUw2YOE)8Nqq5dId@`|R+)xY@bowgLSgH&GZ>R1_c!V>bYZV73Gk`X2m);2CZES|6;YkN!)sYyMPKxk? zvk|0GwYc$`BxwC-qt;*W!A)4#DfZ$`YZ#8D6$H z_*vH~n9QUpo2vybjrzWTowbTdJ|rI7`kY3Qf@ZJ|r6bD2DA!|cXW@rJb{UE6+37he zGf#iYV(J&WW0-D?ctV@>^y3rJ`}f7-i3`tLoZ&g{$eMYycvEi63|fM-0$@5n>1&w{ zo56NK;Ky@TAk!{&dPQl-O!+L*+P13mr^pjW_~j)%f-^fNFFQ|VG93uv4roN_Kf@dN z82%#%3+$2a;fw@cW;&c|9<>>b0yn_#a zYfW?c<^Ku&$fxpeodnKKL zbNlCi{^w_)|1jH(M;KJNYAD})>nGjjzCJt& z-ZN-#Kl}SJjQT%F41+ee2OoBBS%ZG}^{@BN7he8>_7gvOU-gAsk5@CJtE<7s4OH*F z;@`J^L4kR}hbq6gRt(g)Q)m&+ihc9{!mRo=beM^kyyPXLmtA(*G=}^}I-bjEJ&wBB zt69Zp*AtgR81=mv_x&1fo-;b80|uW0#OpLW=r}8%@PsE^i_ka&ab|uN0@tFW-zZLg zE}LhmQleEtdI}`I;U$iA_t-}1yyqa)w>tZGG)cU57v7P-?g0jpIC1*3oWN5~6s>sc zGF7%wiaZPItldsxNA~#vG#OdD&V<=)sNh`F7TbKuHC-IWClb3KDczWqz)9xuU z$U4naza%&dZ(z;iGq9mO8S6jOG@9^f-hDQd_Bq_Yd>4bM0}PDvT2vSOgVxQu2m>zb z6Q8hkk}>8Xx^uvb_AE=@E_LT{BjtPgR|D41PsLFNapLkiQVp_3%Gs%RY-+UK!<+zb zFLZB58Q+JJ_kH{*R_Tx=eCwQg*Wu7;BG1xony#r^sYfCiF!1bPAj%S-Y#q=7r@!3Q zFv?DhD83mRusTnWiIapR*6|8QVDU3BY%&rM-m@hb&y%js(05jX+rHu}CnNX{^hWtP zILb|W=D}(CW9aQ`{51CR)xFZ(mS(zTkvBzZRO!FUyT);VrRMA{W8gB2FF*+Ds;>PXe)WPZ{MB|+EBF^WhMbR1lXOy+x9pJIL$2exPu(@ z*|d62BMvRfhWk>=Mp;o%?w8lEJln>~o6Ie7`Uz`ifAhbuKkr?4@nP$JbOJN>PyG1Z z6OTJ*;O6n^e%91owTP^cg;1wWEmxdbrBM!iwykM94-}8VgU!_APF51UVm4b8$_D%t zMw&GIYgnl`4c-l+x9{cWa)c{E9>62mxf4M-LBB4BYd8upk%WPZf;JsoCz+|b480wtcbzzD zI6F>vzB)Qy>0qXVrWslLtTqHqI#Y~q{cOeq%5E7JmTou zQ)>)mXeO`ug2ycUBr1o5FlL8ni!HRldg^{3Ja*YLjy#2y;3@I?;;R*|`?}KZ$=M88 z2p3~i@RT|PPI?H4AaI5YPVv%)zCLAp=LSFgVz})C8SzU3vY=sc7Is3P=NNDBy3{Q0 zIB>c=t+MhgMFuU>j&oMBLK#9)W$;D@KpOrDqzsh$n-;@wyvXs(fUOu)qlNdTooF=a zsc}lXZKZ+43m*%Q^Gv*DsNh_tl%J6geA7)cqitL`xM1Xbc!GTksGU1P~D<96fxJ)#4lPGb!Og&8-XgufTCvYyc zrXB3R4C*IYLO;NsdoKoXyo`Fb3O&`Q2Wexa>9EFZiG=Ua8YQkL(HLxb{~GBL*a6fK9}N_h=F^w&I} z{+wb9VjRPEg8UPn1ArCYp4SVl%1(Kkzaj zo(zWkI-@sgu15}(7yGNLDGmTy81VH>(zeoGL$uHFr#(LtOhRKSiR{@ z&uHE0r%^xk;_u3sN7+a?dtg_xB;##t>sWrD!GH`R5HaX9bQGb+Sy(SH*uH)H0ZvGs z#t3m6Bl`_Jd$Zd?I@T--sTYNm3p`K^>oB~14fuKr=^n>ILZX< z{ti#PN?Tf^;0+54jPZ$60h6v`*O}im%LrUono;J_0OWmq1~I3r=z$5mJ`OLw@NxCC zcvG$bDsUA!3O4(*0$R5D4f1pOGao6zFSN#R!`~qk-k?8u4Ly0Eojl14UX6rb+dEks z3`cR!zB4lfF3z&*pXK&~&vp`rzB~!P@Y9dP0p2O#dJRr^-9!lyb#^vmP06!E+6?AC0jLf6{K-$>U-2>krs=_=66Rlquom zD?hg@Z2K8-&1l@2MNcvlcOQ8X-EawKZ06ZM+k=rD-MxGFD28H?D^L4B``OR-g0F?) zr`V?b4CkacI>DuG4Sr7L)1JzmJP3?F^ktTBU5%73VT7e#Iiy&}=j;b{kSBf_(hF!> z<=yZgT=w_$r$2q3vp+LTJSLdMPB06f!ca}RY9$V6?{fu!Yz}(!TZST!HErQ-oo?8+ zwmyaKGPwwd=LGxt5Za09o`FBUYIu{RMC|uXuI1v7cmaMdYzcT zSKA`}A3~LF2adC>+O0xHRx@!s0M7T;byHt0saGoZF!_7P4EnAs+I_p8+M0PQ2jSlR z#p-tsyX!en4V*hr{nP*ZqSl+`=dPzz^Scau7mj_jidR~ycf8{ryBWQH1yoO`!_G5O zcSOE|j-W6_x#?MyLV+MHuzY(P275oV`YkNcd01^ToqiuP_JeeolPHBlbad?a=@Tv& zlixis_i19BJ7|M4H88yv;5^rVQJjPYG^{YrxC~3#I}pNSER(sPUuI=?E|pzJW8Ci( zmADjGmn}^2nuzmR;Z6L5&?1b^PM1313mdv?`t1OX(IBncS(fm+(s9$Vq^HiOl1P4h zqB!=-tcyAxWstQE1$K&cS3#2|o+$4+PjEuF@&0L0Rerhff==rGXWk|t&7@}Um1nn2 z{ED4dZhG*{y25)AUz;z1l7!wcSgNm+2&>eciK#?| zi{UAGm-(eG-ff<~L3&d@VQGw^uH#cz@D`XNpTfnNhO>WoF2q-@oIz&^)glDKFUF(D zM`Q<{kkq8bIMP;`)q}_Pxy!&R0|d(QRky6J;5UOb!o$c%bQpch)fAVY{lLf&OR%%d zZ1=Ih?EBjuR2*c0IgHU5=8)DPhtLLCg&SZ}FmT5mcl0x(_k2x-(Xq~@-l^+@{FSyW zNs;4kAzy*dSLj&MpU0@pjg5^><9plMBy=xepr+7At_-;a<;7XO&~AG>Xs~aT)sb#G zZ4g-147g2`E_vUy8{ux+4GTwJ*2(9q-nAwUzNmI!s%ri2#Zyxk zZeQ4Qg3EWkHIC-s;79OgfIzv?C&~o4bkd=pXZwu}juBtOVCfj&zXW}~oi-Sv zJ=U?3cam*{TNsobH7`2bL9ulWGUDt{4ZR{qw``@o9n^dhydO=04`X9){U17m{@**Z zmJffm`n|8UbE?hc;ov(!IoX+F=maVRNB!PTG{LFR+ZYwDU?8wb!_Mm=TNx1C1HK7H z@xJ%E2cah`S!I- zrp|zZybF)d;;}Onqg|3MH?y-Y8jM?lgM1`sY1}eQvvV(j@fkYGl5?4D6d21ciaBvS z7v)~+UX+FD!s};HqalaSXRzn!EWMjwg^un#NrzW4PAUP6qkCivw1ux9Iy35bwuXXU zLE9AL9m5H%v*Q`~>;*T@+EHg+Acb1=_Re7@P)SYmtpLCRg56PX?fjT|B zATB(p^UG{s-I`@JCf|{!4$1;WEaAC%3-5wQfNodgb9Pr|JOy6bq}4j*{n|QQ=r8F7 zK4`&b8#{n>P?s_ZN3QW5Oo)$QM_$ZSgBjEne4)LDOPqr#2Qk3d=AP0QZ{fM{$y57y zDJXJM7nuE1qoL7!d}X`sr)VWerEcGFZ+O;nESqNs0WROWbnlYAMt+Fr0hX`VLsJf) z(XY=3blO8}^u6)1v9Ti<6HqVo0OKBa9|LT+?0j2Bqu-0X4$?!uJw3EdT~^wqHTXcTc@UrkX!G*)#mX ztA{rVaDXP*&W6G>E}mk~qGyiW4A`6)fS;`*jVy>TJJEJ@LgI9Y}=Rn0^pzBVoU%et@+131Awq=>tAL z9Nj}=&@X#$XDR&`KiIzP@9wPrEms7#E8a9ZeWZHNo1WMDcy&R0;PPMj?v1$(R11sB z*!RajMn{=s#y!Hw+d~(FjQAV{o^V;MhE<>qr=bxl54L#{c9IeNZRF9gd%6E<2!skE z$_zo7r_=K2%3e zCASEq;iTb5SoI9!gl%TV*3G;%4l64_$`zPr@kp1mF#R}T2$->ynS8`8sY8uBWz>1Z zSvs;fgGZzVCrT4NHRL|@3?0{3O72Bbxz%7YDU_kcJBO*PqqzA<4!uyz9^Z3xLlWQU<8U>$34W%qlRoU+5K&jSzXGeQcM) zN83OeGPtFU&FWyoxNPGXp|c3`*(V+B&0!2ZkeF2+46yeATtNRl&hHp7u=CoWhFes&xwBOmS+tScp<5G27~YQ#xD6Dtm$uP(kO#ZnypJN zhoLN2iIiCfCE){MSFut-a5xM1npO?C18ei@HT&XLS)A4pKZXr|xf4d$@Rx9R-!#6Y z*$z5T)(1q{JLgu}`Hz2X)z-|;hnSsDR;^cFGIMNf)9jHGlYIls&T*Z5{1+K6<)+_2 zw?LNT06domF~OQ*}3MA!vQY?o&Ed)GNtpo(n@)_dssv^jwcpLi-+SOsXz=LF?h$KEgw=@?l#Rhupp8$t25{m`z_JMl zld_Z8$&gH@|tWyNtdXzUS376y-5T=KOru#XZy*1@LI(qV)00 zl6k3@zQ3Y;me;Y=L%%3Fz{7j%TEga&hYdVI`5hXJ$AKarX>la!OwPf}L?@}kXVS%E zdpo<9r`_~~<{E~i#x*=9Ch#?VOY%0*Uq4{|3ccdgSw9Ik;4{G`a$uY;@XOOwto92B zUciXEyH4gwpX;L6xCU1#lekj2G#VC$axL(#0*%`bF~*bB!*eul@rd6~BS$td%5Eu;eb&?ZzJ_%t zd5%%OIz*=FE8CKoy5RHJ86W`XgRhe*pJ@Z)3YDa4?9WKaTy@OCS+gp1Gs<5Ij!xNCVGF0b_DJO zcsvATr?hi5okU@(pCimXr>gjtpAL-gvOh9DbQD26!k*uDRv27*_cgoBJjq0s(3Q4XXPI^~0KOFBqho-pLn#}IMmlg3gvBVvp@QB4^g?MtD?17rCG zcYsP9@yeKSX=i-v(S*s*W5*#o&I%o5xJ2zCG6#DaOwV3;AHYfao`vPm9kMs<77hk} z3kE(X^pVvG1_Q4A*k9c85r+f%UUZ9wWP&nJGRw@Kc3pI#ujvoOr(W>KNq_@9yiT$- zgFo#d?ixqonU9H+H(lxBOV@Lqt>KMwY`*S1!W8})E;vdb02X`BXXXb-+KV6g>d2+kV6ix)QRL%R=Rlz3p#^q;sNhnpuI-H#k^>(=Rv-T zUimxn=?YDqr-$i(QIOwJ^)KrzwNLH(yY{JHia(DpN)@r>S&eB>kZyt?vH1mZAJC&iPyT0(b6{ar&HE$g_vKE03&>iQ;n+R?>3q$G!-Y=nhs`pDoC?M zSr}OEy5PktuzvE^X-#=`-h$V7J6i@wb=i2$N<|b0&vwex)%=Dr$oJ5(cT)F!5swbJ zhWf8inW})D8M$oBU}q0)klCI}fZqyc_p8b0^^TsRw%rPS`o$m=-dSW(2&R|%72aiq zMVjiLGEj_zzI;zT>b!Wtq3^3TWJ}$|oi^%<6GnV4twQpgx0>+SnE?|HT|9?>JPYoh z<;vsGTI1)jaYO}=zH*W>j4Ke}EOoVvuh;g{Qradsc$O~(je*piI2FG2>*inRCyrz% zu01N(5&BPzCG~Zw+i9}t<_j)-UFbHSc=7F%(rJ95J#E=}%&bow;W@rA-F+f5NnCNk zVc8gISJL_%MAo<@DCGlOcxD^GV^%})cr9$bsa<8kD2T-l_qepg_C z8RqSEp@4K`Q6DGn!u!IjEIA9Wp24$@k;NL`b}(u0E!|l0y5BIJ9o3#@5e5j+{@x5Op|{dJklkd z1tD$jo}~8(_%8e~x^gSJcq2UQL(iS$#QOE}j@O1ap$9y}w++QfEy2YUJh6TEI&E2KRv{qNYI??MQ7wel&=>NB@i zZ@9Oo+Q5$2{Kd@9pK^Njs?WpD&IK|{gz_O{GNZjY40`ppx4rH5AN;`|{A)Vqi}|E# zi;H2r=)x0~r)}T9{R9Qt*o^@8wt5jjFZWvLFKFqMvU&w zPGW%8a(M1K4{NZ*vx?VVHhHBio!nFKM;I_11a`uaHZCLZTKKG^LfBY(BXkNsFrLo# zy2{(x@4pbi_psbiguMIIdpaRfY_=lQhIOTbI&&~Akbc7CQDNEvlCSv7;CO8Cq{A2i zY*8pFqs}Y;N*Vg;Je{Ir+yP5j@;HjfXMR45&&wcuRb`IlwR2IlzScFUvZRCW#UD4# zGT@{6bJ`q!xa8?9(0y9JL0?Wo1KK#tE;N@;ZMh|0K;!*IIo5QCUjW6p;0u>J8(8KF zuH25sgKd~uTgflYggwCKDR1|6{Wkn5)ThkqEuW-L+tm0|SK_jiPh4oi&!7cdh3BbH z{cKi(Ni$rW@~8Y*p3D5HP)V%)I7*&A@csexzEeJVy|ivtB^*TI^29LR{nuyTtJNu9d^ zK%e^6=@wCVExkS$$7AQ&JYDeFKM<%xYNwo%X_+qq%aa!U$XflJIB+z4>M8?1a{YUoq_FTB4y?EV;R?qJ~ZtC!sHFJ{_)4lzGMCQRMJuWq<+wxi;d>KGL zu4YyA6m;$id4PUAz~wQA(2vvf?|HT`x3j|Oz=*Cq7n?)=thhO-g701&wGn?G`Md9w zmwst?^<>J40Obv%J5Lh#>A(1kzxbHxuY29=KzIKj!?=g5`_2ve>s@MZP5;~Xw}0ew z_f#)FKFMcyR#tr%t*hSpJI`xfRlOizTPq#*A?Ginvc)Gp@rlE{ZZgH8iuWT_FJg(j zpC$8oMtXhBx`!A|yEk)}2E+!(m@iH*P7WTNy?6bIg@eP0{^G)9&)W5?wjCMl8=RY* znI0G!>6=Gjobhj`Gp|K4IBP%2K;akyHAMUdN1zz^4d9=~;2&m|?J|1at3?^4gVV_s z##q+cFCA9pi+uJ?I3k7a9Vm)xYeCLUbTSKpRdJOLNw8z2>ojqdS(Kgs0Ueff4MQo@ zY`Wm<1oN*lC>kd8)-Wcj@Ki*$p=l*=_Y!avBWdaAmdDTfxe_siQe4SzwVl3JfWr)4 zj=;|Y(#KCDos-Jsvn-WSZeueIWiW;B=B38U7a^rVC(Q|yu5Z3>#YS}EiSEFXUmp2f zTMmhEI`FC`H~Kflx2I>i1afv1y@dIqogL0gKP^B&dP$Yb@`#2N5D(a)VM@E z2%ROpp{YdFzPKEmc)p;NvkWA41f;XCTNf@qw~!=edHrom+sFE<#LX*x8hL#OTKy<( zmrBLsU_xWpZCr$lkr7W<8ALz8iNmt|J?Peg^whL2m+R0^dJgHCpFWjKc%VBxB~Dic zn%!~67vt_>wdh0#+4Si{CVCp1S>`r^`K|*x!9o8qd~ZV<{&MM}`JBxY*)r&GVXC&*;#?+@2$S zD=)ucXuZRZyWsrA>)X|joIkm5cCLqktDoV`K~&EXMCNUGcruEPUC-ocEd!rkblC~^ z#&2VVGzV4Tm#-N*qh1B=2S4~p_R_zEL4N|H!8Xe<-oftWGn?sjM+OE5CQ!M3 zCl(HGxNhn*rypzI)5{rDLNnLA@m*H?B|J7#e%bg+gm;8HHh%; z)#$O`w1fS0?}~2>q+sPoyn>C_$=*Sc4lmB4jEG+1N=GiU#G+h^A`v(U>s-d`N?dpA zl{`tKb9r#cPU$GUEd6`vMni&7Ui$dm z7@l>`6fsnrLFY<<+ePCT8I8NI)n(>MT8y#J(kyK4N`2F(OXRXN;mOwI6Gyj9imc?< z@8+%eE!+I2SqJM}@@HU0a=Xv-!9aiRrs4H}ySJzJv1{53Upd_B{SQx?*tdDj-1y8~ zU+>V+0Iz=Xp%w<^=&4ck-UbZ$8df%YF~l>RG1`ZYJcusK76*pbyCJ+2qGCWa;}X0& z0{)HHdLsu7p+}d~{_+qxf~}Kl(Vd5(+q6YlB}eI3pJw22g+PzEr5yOS z4SEFSshy7Slkcj2kxO=;G&@mEp1r;rIcG!lYtMO9>lin}WyH9&sE7WES-OJiso`k^ z=D&`OjXi;xb3da-ztGh>cKle2S>74z`qo`Hy?AoN;e~rnpLP4#WdHy`07*naR9QSp z&mQ4;>Hw8s^a-i+)lBQQh0m>9n4YiB?Ros|BP&K`R<2s90a}fbc6J#hgFy9Q-2Fn9 zOXkN(JHqo2OHFH8PF}|?bf?j&z596_1APqN12z*1WNqAi9VUzrhl1}OI{7bRrhb|V zgAS29%i(kBfWj9gP<+!InT9UHMOzf#&a6T+uRLlLTisby0CpJRiZX}-G6T+x;#Mof zU?j4WC&t8?iE-3nScM1OD+#+2k{j4)k3A^4901d>`J=O<4-W2xXY1(fhiiDtD)q{1 zUh+ozoMjRA%Ta!w^9a92UP&)`Btuu~-i^=r<#5ZNg>UjwM#J~I4B;D`q!$B9a!%FD zkMIy*LkG#7yWXjDMkEq}E9C}1us(<9;ED3;DsQ<#E6S~DZwb)_r~bqYE>0v;Bt;A6m!u<2w573XFI^b)4sLs~^ib zAMHft~>7@ zLy(ZQ5x;eeY~}EWr1xON98&sKw)wHKv3>mZBap)w=XDGy*7K@{#@){ZPGI~s?#D4= zxn7h`uHwlI03mN7sJj{Uo`(TD0nBj?oq~*@+j(`R)0gK??EU}7m(Fa5wzK=JD+a_U zl|+F}qR%+fq6mmA`HFHkF=>vp{o%ZfV-20y18bw?_hO6*l-_=n*+~aLz<4q&oxI?5 zB<=_tK5eFhpQMg1Pr95gz0%{KKc~9xYvz4)6shGmuBNx}BJd;z0e)z$VKT!KH_t_p zE~$T=uhjiP4F-ATL1uO}orRW^UE=V?9lD@>jyCoyWV%9Y!ZmH?E#-EnrykN<@B(LC z;4K5EaZ)CDY-EJTrA`=e;0LE+T)~wvaq>u*$O+F4O~&yoe4$T22MaZBw6pJ6qhE8# z$u|bXkwWS)UT}-1;4sQEN_mOz6l2m7S8%2MYM4S#w_h^ZuQUjLILBpL2M3LS*Fcut zIB*J+XK56k2O~Ts-;b<%SnFP7RRis*epiq*B!13xLIX}*pMzTag!}Ex;{ArV@46qe zUqFi=sBusm!wznW$`X3vm*sVc=$p@r$9(k~7bM##xDO-U@G=d8tMV zGQ=TBi?3%5Z}|Mdp57;{U0nFblRdpJx@7Xm)QP)R-FDN_wMUO0S*4!C`Ei=#tWF-) zh|`bVT5{IzWjpzh6>^YrrNeTl^8&haHNRm$#8Q{95|xhBL28M2MWY`+j>EgQgCz2n zYk>u6vr>8*>C?iXQ~r+G`ByCC^{;=ueex04#er|jp!52758pX=pRBriclBF*zw{JD zZvH}SBeV10{Im(XIKjHBIp|}|KdaNAbEWIZ3t#xc$)En|pZ*gB;!=!h?^B-g6y8N0 z=EDD@Q)~H<=hW0>&&crT;%IA4&#`JR;=G7f(WqY3P~yWbHPXq~2t-GpV)VVo83{1i zE0!NBF4HN;4i|+3uAD8P-UmM) ztbcc6>I5C#`4TRfYd>X5FSrX19-{>PGfo(N^AnZ0vZQRhzc|xq$4Qjg+8VB#rfgRL zXg`Xg#V><5;Tk-ILfTM;?f1^47_Xmx7^@{?tRivOn54 zExTJj3Vegdd_=|=;Tz76{EHZpEy_Lp-&d`gLAErB2swAaYTg9~sz?067hl8l?8r)1 z_|8y%i9c!@GNB>#6m15&;2SNb(UB06iKEP% zl^~MSD!p^7Mh9l^*jKIjgKLIP;cmX_A9=%fNB_xcX7499UUg`4ec#~9nf2?|9zmZu z8F5R&0aD(jXTajtn4^PyFva>?W=&rijJK)(TIxUNWX86zY+w}PB{UM3R|bW}IYIFD zw=A{Ohc>|HQS|2Rlz$s(@3CTRulAw)ADNxYj4t=>8T9Kr9q&bd+O6vG z7E3uxZd7^3}D zym8>RUV*pFuY*rKskgA=!4K{_PquT2Cpz&3#^(ms2VE&gJoXcu%iz8S>7D)F8KK-a zZC1l~GI##PDV`XZuJi@uc^G4I3jOnD+ZZqnVrjc%qs+_@EuV6|L%~%guXuG&`4Dj< z^!;@hz)k#4Vc>g=v_sJ6Jp~R3oZZ^*K#@u>=eP8w3=70{w?iVxTl#$XL8N&gIiGtL zpUhDw`5r#9-^(`H%)p_8hc^7(RU5Z{?P#m@1FIGm|7ohX=RaI}^!TH8Y&<@?YU{+B zHLE6oce_TtmT$R(OCxI?OMfG(vu$KK{4xNctlX`E&R9u(kD)94#A{YHYF%h4-*?QsnnLxM|xrb+(bM}L5bMA*Gbxp252G1j|iv!=fL08#!6jOEU;p%s9 zacsn=QO|2txBS#4)$jiUk1u;?)w}EEof&*r8UO4-XXz9&{G&hmqlaJivX{M`ee^ee z_A{TY9{U52W$4#Cc>A84+GAUHRwqx+wuaWUs&$Los`2U&L)m$xN*2`pgg({7NqAKp zLeooUKFWLOr_dQ!Aeg>dR)Et{$f#gyAT8gHQv_YBem#O*A++whkCSIL<@qh~-54@Q^J*#$ocJlme%mPNbYAjwG+@UdmX2+- zbQUGqJ=*U!K;{+Bk+rzBy3>UH($NNJ*+6)}rF80W4`crQjX=T*zRXyC)g>VQ)k;qURvjF+Dh0WmN-!oVHuVi0TQ4TLtGhfgpRIw z^Z9EGhWV6d+fbQA;k$oca5gl6vuOjel==x*!um_{)pV8tM{w1&kdy(bc}m+51Q~4# zjK(;ITUzLM11yo3o9o15K3#XampJ3iuOEDboh{B{j81jnirk+7=P>myXAvwjbOKAT z^NJ>Uj7y&o74dFEc?+E%VseXWHNOo^I5yRW-7_ZXXYewz9U|_h*T-_;G`zDcBkOWQ zua6;uI#7S>7#T*V_@12yI?}Hx+wH*B2M!!ub>i5*75m3m_5SMavDVI&)#5*m_xAj+ zr!LGr^NB0&+O+nflT*_bhk0lF$YcL@HZD)pO{L8wL*CjR(p1`;sx0_9)CKzX8g$1X ztCjbXU)mg0NVD&m7x|Um^c&(_@tdKquLjmZ*#rlhcY-T-RKUY)ne==>I9zw1@5DUv z9}ax$2K|NUfD6xiXZx4FG*LZ)``TyDTU!lYvZ;FgE1ujs%4=!^oP7VDErDRvXZTg` zde^)DPY!JSYp)c%`fFD&K5hNeTf1+%tF>wKDV&~LStKLqMZg5XN*|JdL_aC5BP~*457* z8gWJps$TD%o<}f`@H@uHx0eyT?{Q{no)hyMR7iB5EsR9_S(^_{sR+s4Q zSpJCabaKMFC@{(DJT?k+$xMZ`rbE?m@hCU1htL__2i!npOQpu|IJ8ScmI$FChTO8d z%dg8Vo!*Xay1dGdaF&00o@e!94}2Y?zK7|^Iao!!4zMW9Fq^tBFq?P(F~)?ng1-a3 z^gm_RNFc}JV;{{ETIC&aMTw*x3yM0vJ1+dJ)1yqga2JCtore7>|IXx8fD`b{naL{Z zko&?(Q=yf7rJQ1n?2G=K1ttyHq*;$Tp9;ErnO1x%T-!5Bu7>lYCeC0&vvK@#U{T!5 zc|x2th2Ox*D}UnSG4Iyrf*0D|Gb4;ir(70wxm6=qWDW2*^Om^yb$QZK(yU*BNv0ac zxWZ>)4L34YU}``4YI;*A`jZB|O&@dc7z0Ne2p2rbP|H^>2c@jgVqJircUBFqQ3lnw z<2$pIUSSC~@{~H1`qwZ57%wmFtGQbOoO2Fh=|_HJV%WaLcHH^Ud6NFU7k?aB2k#En z$a=pMKMpT4kc6)1&}5o&L3=pM^Kl<1jer^M(R~G4a6Fbh_ao=^0@`5I{$T2okPYqoM6K;SCM z^l~0QMB{+Q)eCiGWS?O7l6x7y@I9o%fELF!I&?; z=tVCYdf)rrH~m9D^h3Wxr~Kn9K5@n3dFPzhGuC%zd-ol?TNj>taW#8Xsn*PI zsgC#TWv0H5g@%##Tx+Javf4Ded0_kgd0vHX&o8$6hx^+aUq%@@jMoq|_tm^lznSIv^$I_V zz<1-1(>YEsu$aI=sIXkNbLK7)(xbDCVz7LOf{+#yNVh|EE6wCl;Yhcg$fa<~T!5y1 z9O^krSOa2*%CdKzKXoFm(LR*HWAmzxbyv9=XV9?p;N=_Iew4u*_cmH4TMu^#;;)AB zpp39BN9fdZJ->e7J*cG86>q-8CA|1+XEel5);qzR|F1+$NaripOYU-ErcrI-#v3L@xmo+x?$-s?2kIRf9}C0c^D-POmW?OF%FO=b+BQL3_Rha z^Cuo%slRv%?b2dd@;4dqb*2YKJQ!bB4qQ#rs3pCo(fn~f8xS5ZKt6WG^>_#iLwg@E z^3@Ib$cpf|<@HVZ#D}&noTZF1hy`710eSW!DQ}(|!LV<{=$`F>Ps0vRCy;xEyYy$t zD!l4cs8fChcF>i*2H-0Vwkv+E&64emA@nOu@fr@uU$DbvHL*Zy4UVr zIdbNTYVjJbb$Zbm^D|G_Idzb4(Qv_Q)#~fbRsv|#ZZ^Dz+)0Upn?}|;q=nY-K-zJ$ z4uUY~tJphtYi^F2{yJ#Y2xpZ}yg2cv%?XFU#>;DYgB}_~*WJmp7jb=&I((9J`SQq8 zJ52a`?prhHpNgVd{PfqV|9tgAwMw&aK9@2*{>`|-y*11i zU(X%>S9=C}MyBW5Q~kZYefbu;cMr2HuAx&v^MxgfD4k2G)M%+W9D>)pUGUKtfy1BYETHGA{ADN9lX7W!u5J zE!oecoZ_0csUy@L(k7i6!O&ULR_YO6mAJb62c(gny4HAO1nRJ52yeR1I%gkUxvB9= zmvB6$ZG^Yn$PH;RmR)!XY|5$gl`^e|VR3dVSRNnX$lA={Oa2B38d9ekf8q&;ejbF6 zLGMn-p!@ok2Stl43s>kV{4cyJJ|I@NQ{Nij1LzT`IB09|c9kFeJU8tFe5QpM5|_M{ z8F`{C*$LBI0M({t%6>^ zG`WIsJ{|?#;yuA(Ht&D%6`itLLHX4@D~~Jx?DH$msa!K!Nxi`ToQtLptY0}lb$p_C zppR8?Qo4DTx=^k%S7bc(<*}(J^-8j<01PY~Q1o+t=qS84-oc-Bk6c*~oOyNOeJ7ak zB6Zs7svtVS>s{SudxPnmlj`L|THXD=&i05`IPgskdVPt^+)F>$e)1={5sr%`7uT(< zdUmd@e*d?h*}9r09=PH~yvY6Hg7SOoGgJ5U<2*OJy%J;bkJns%P2UeZ`mybE2hVTa ze*N9;wNF}C4bF_VCZ{H=q1A)c>Ae?J;|s^9P8~S+p7s4(PRzDv`nU`cP0L!-^mI#u z$w=`89d0AWHaACg2_(T7DwURD1=VnOhfva^@bRO>^@}4h^{vJ23Btu4MV?6pXSLI84`c#=z5wr|DRE#msWZEAH&2@t7GBz8^ku zpt4y7h9bEOJjaL^F0)#~je`z5bn1ei`qt0s=nY`q$*mV<3TNF*M~*_{Iok#(u1V^7 zfPu@YDl_4L53S;Z4rl0|o_E_K%a`Ia4OifNRyh>fOw)nxe%^MX@()>^RSeP%N3qm? za1l;^{>pQ~AJ{rRK*Cy3?U!~B52@1>JoY_528f-jLhEvhF*0A1$3n$ZyHaKzOFkZi z=dta~e}T4hHeQp^D9Plh|5S*sW@zM^`0lzJDUK%b{y>wVlz}XHSrX&S0dMZp1qOV! zu{etSH+ciK^v`++u9QoDWuv_MwiLQk-{tgKX|km5^1%VP@5Xzvk37*iND5Dd6)AB9 zgDSFC$9Z03-hqnC;T}pAj(dv28_W9|@oH=!9dNwyTg3(!X zRvT@P!gK3e_+?%E8JBw1Vfm54ANpw>vOnph1KJ%}DSP1=uwjBeKbhvw&!Z50rOdCEO)}c`9nKl^Q=B(nttQ__UD{WEI1oPFL5hJDds$*zKr8cl`@YI=b}&R#f6v0sAGjy(lXW$Ze4pXmVB*CFno| zp0594WD@Ab-|~vi+&(IZEr-uYZxb- zOgC?7Q~hpdWrMHID}2G_us6`(cd{zDmG~3% z3kUN3@ZDSa78$rtpaXKLi+$UEEh*6Jg#dZ2%yRgZ0f>bX?rk49uy^N&Z`{rvdDTAb zMI30m=Ugy-Xzl32?9qwd;r?D%V`7vcIr6VBuJEbmK?dc-S)uf6{IowjTyPS?WMdUH z-p6xR*BqDtQ`)QHQ;j3Mp>AGQgx6o82W}#5gx{5{LcR-M9xb0Z82yM_#({5W&`*0y zZeg2x?jN;(`BO)$M{(q5aqCFcbKZvPH(>C>6Mw%w%t5%ky0i@M_xdqH^R%Zu?bmO+ z?Y95rD_{A_wp(twb^4M^FB$skmDjC0ee3q!!$ZUC=8yHXR-C$a-^~2fAfh?QYi#6G zcI~S_~1v}&9I3Bw$mcsOSkMUk&C8C~O!SC_Yhe|5U$86RHP zae*To{?+LvtkNhmE{iY9su-X`zdTq%LtREOYAH&(V43glL;Caz6mP!EE#4Zpw1`u5 zg)Z}o+jtZ7vTf5vPg(8A_EJ|~K*AgGCBK<#7yg@W8b9SuLm-?6+Szu>tzo1`SiE|K z3#|2_E-RHMf8r7VS9t7m2`9ln@qkyp85X7(d6Nqc!#dLnT<9jQ@Tc&`Jj#-7qyuff zH$E&~$c%UCOK-{|J?(1U0^OmJ$IcrG^dnbNyvlWeK6VE(pMe&zp$)hq7j^b5yElEI zM3Ud2Gvn}&^6fWn6XoVQXbV1xWiabE3I^Q!#$bC;Zq%7K&))o!cfO%(lzuz3ef#z! z4B~HKV4lHkU54jzTI6+aTmCxGlXvn&8MBy_$J^rbCy(zvK zR`rW#&QCx7?8zgOGkk!hr*jCBybWK;pL&R2SMU*R20DZ-!=I)#WTeNlN9d#O z*Yd=x4k-sIiwrn3SI_jJx6YuS__<{VRI7mhU4E8p-AY><^@#gA9Qe8h{RJOt4_yAj z*3?@*)86v#FIKNRqS@wiCTEXSfBF6wxBe0~_kZzMzAufrRkdgJzWBv2KE}K0zseHO z2XH-OV`I#F7Y47q`pVPKKlgkN_spz2cxd0w_3Jm>$z6yM{;rM?Aw|$s3~jz3w4W~u zodJ&ffYInEpemd)GwfFUL@#xAh8lOtqkxuCr)3#ma0ZyNJ()VeDD`$my=T(FooOGZ zBWG_9p?5h~v%W+Oq9kjGk|I0XTUegH{UNpUwCnb z?}ksiRFBe_()eTCvy2H%kekBi8EYgS_QYf zw5)Cz;iOH!z!@$sZDBo(fR;w75|=vzh)(7jM}r$!@hX?eixC<@4s(-N9gmlEnlrC< z3D?ljVZ;3=v`H(xF{l%^@YAw%C4UA<;3&`GKkyx(PP>XvJRS^lA3XO!Agg9`;Fx*^ zfInet{NixQ+qXwt?skP}FMY@@o>E@2)$j#{`P{}*MigMnE3<7cLdxxi;1w?4a)4*P z%`(DkphLCs9zvc6k&8j_NRzkD&C&qrxWeu&xrY3y;W<8?BZhNI+wFG3mvLw#eEyW+*C;1)$v z2P3E@Z!reNZv>rkhA`rXP&Px9eHI4qIy%X$N=Rjdz-xF*2Wz>vCT%z`lJIsnUq9Ql zbLUQR>;ZJvj;3+fM`4UIGG0MP%&lhRbNSE9V`lA?{KoY$_OlvS%65jGC2p0OotU4? zeT4?=YuJtoXv0q*GOM$blAgK)lO<_r%KUh-!3q=pf<1(4LdHs{`CW<|h=H#F7o zX+P=Iprgcnmp`)%5rC&DOL$!95{#n(H%OZi?Ddp7pOz7^F(7^jq68E|X`Pr|$m}c04sIzcq_i+ci;60b{K7RYbC5&e?x@9NrK|LL4wEFw|rVbxHxurdS zeEosxvBUrAmi|+QxD}55^6I7A=Vu;0HhFk*+BYm6s5bqfw2LxgSf0s0d1<>69l0>7 zw3Tn3_c#xZ}o5Hr>geal~wD~jnx}p{p8l}?YlVD{=)D5srGMD zxAtY1UDo%hPkm}0|1}8B4_|S`73;X@U>ZX{$b~U}jctli;O*{N(a|(m**im^RAll- zp>}VlhYmOA(l!HwP2};mqM{T5=?EzBQGVt#8Nd9BQ2J~*orX@Q(5KT7*Dd^k?-bG5 zgGB-CL1_%Iq;($4>|ayS*=cc6TG9ZDC{hLhlg@Hks^7tAew4iXP#m7n*LmR1{q+g+ z;GD&KYBqP%qlEGi29*-a;C^sr9eI3-UPUwyA7=fb{M?%_hTiwV-%xTn72xox*xb>@*LfgRw@x$T-u6tD@{4DhVug-R{UU+Fo z2L_fQe+vHt$DcIFf78PA+V3!yhx%FHylJ;OoO0?oyroN(lqMX)1NfzA^D-Z{9jsM(T)P;EXJndvx<8>7+@5vTt22 zF9RFe!;fo>5~T%j5MWwlmY_I8lks)A28*-J1Sm_vMdst1mvn#TweJ~p5VG8uo6yW0 zYdB%U7i73knS|DYzqFAcPMK4u8s0MjGZ>-u7~Hk2YI*Q9vP!)2nH4HzK753hlmSdG zuhB@;M>O8U`aBO}l)Nd@ax!~HpQL{kDoZYee>pxx4-?PYc?=D z?-?3wwWoWl)(ajrd0@rh;>|8K;B zA_xskIn@rsTaWuM)t9fHs~$5?_x;gz)y*IO_pNgUG)=*2GJXFBte?U(|B{!yGI^{O2!z z{No>gJDu|golRwzP9Q(z3$W%X`3W`(x5O2`=@$bh+;SIO1uwWWb7q!)o=U_0Z#!2i-u79z}kjC(1xN_!;M3+Ptd} z)M*g~b`#}}($OcmaOYHB+1v8uCqMam%5k6HdPE3?C9k~lXQhIla4{_M#&#;N6BVT; z|K*>4X_IcAo4>(T!xVlOMP)wo6xcFAFe-Ve(;SNKZ1~}|pZk#+SAh!6;^T42yS>T# zAb+VJ@#eAoG8ivg4xxkiQXkW$r~71ZfzdB;rS3%*eKxEMKWQJAZZ&?JkOPh1?z#>o zk2D!Bvu9Y|^ab(gtY>$;@S&r|Rr;Mc%3ThILvvSN2P4)g{SrT`IQGR)fBMrGcwmf+ zrS5VCN`s<&>69@&;dROyUN5urbDZ(ARpnQ_h9uDX+SmE{od%c5{n-Zwkx37zm4l5M zAHOcRfUIl0o#pG#FsSyXHV49<0V(%aIAF-(HHyi=7n+LEQl1+cNpI>6J&`+To<{aZ zn5~}eMMK(YU+73M>q4pyyq*JYh!7qH_3l}n3x}Cmzgu&Gy zbcj<~m;U8)6+W{vcrm=+2h34m+ydN%UVc4c3zZ+Cf#*lux4?m-6dKTXUDxT%&wgk1 z>ia5;`9w8$$;PVxF{f3({BfW(_%OL!Ni=!C4+HHNyx;}x%P+sYde3{_^8r5I^22}n zr+@mA&wlo^i$C!bKe5QneBeu8`qEAe#VrWnCCo_AMi_6T(_{~q`ZP+zPQ}dD_rH&_ z^uG0Rk9*t^I=7wCYB!34a1^eBh%+%tQ6L4h%cTPv%@6PfUJ&DK8*!+30svhDlz%g` z^z&6jtQ6dUQPog8+lb+$gPcQMR@&L2_mE}Qqj(jDbe7pilrZU0b}Bp#IEFX$N{?Z1 zc=1gRO#vH43mq-W7*OG9;A@2!!;i9AMR{3*C%;RK3mSWjytDc_l%4O*&-z2*`O6oW zq|Nexzm;45E@1Gm9;N7YyS{(!*CnKmEE=t9;I$pjT zmKWg%Fr{t8QSupF?o1C%osh;i4ri2qY4h4Q&T{~h@YYulg)4^30Y)cNXBJ)Z7T>If zyPtzwJhYdUGp)EHgAGk2G;zSHSgp5tFItpKKaOFy1(Ru|9;7Ans##L9DWL7 zrEo?0TFF8~$s2qnzJoT|Oix~Ye#I48O&N8h>9()^L44*_b|urVbUDD}``trXB_hsy z7Ce6;T^juiR>`lGm&S@dbSiS3Z8rLppY`=qz|OoK$a+Z)MN}+Z_j}MTt5ftjzoM46 zMv%`LWgDJ2V70$UV;Wf*r5s;D9i}W-iIj8kg-_B%KHJ2o(oQ@!d~JAU{eW>>K_lts zOK*2;%6(_(U%>$DPSQM2)8_z#LjisJ_8mND-RjZ9y+dmbUVhc!g|_f!z8HNkhw7jI z=*hkP+~7O4(CYWSb4Y-Rk`bPUpgd5niCxYLNSBd@1#qy}M(=Fqc}`;v@1jRY6KgT% zsRPe(whx2%bL1g9=63S`5N&lGTbpkdfV`P}bf6#k|5iD$#GpUpt?j{&ys9mO-v z|J$!szrM$Va4W0+&3)DT-t^qoM`3dhr`rFe81wJ|W4?e4!*=yGCi|ols7>?_&^fzWYT8qu00Q z`{)Q@Bd`RQ2!8#nB64|3(9$9FGXSVzd@jz8lTK42%!ZQiTkN+o__zQibS9(O+lkL| zD4k*__~)J7(#gECv0Nvq)&nf)8zoAd%B3iCXA@D9lqYPIrHaBbRaU@CPY$s-3#TKB z&?_oZ2MxXO4h%H-{IV2@adu|Y$Ev|9($;F6$&-}{Wto``Mt_pBJ+yZ^^>7~hq5~-gTJDsF&I{@{qkgR%Xd@0LAXoYSKZ0ZUxJV#=Dk;B3hE9I5R4NnMm zDp&Kus+&*WG+m8H-7Fr{%2q}A?lXhzeaO`b`pMZ0fG>pRTcFhguLJuJ95}D9e`xZw zt*dYS`)dZq-hOA_@aiFq`Bc^V<+JA|EP>kDWhNMEaeky z6iDbNzi}G+_~4KpX>gCcDCXdx9Pv6UT7;e~yIZ~)En9f=L6>{>&g?b#9vD*DI=dfY z>th5Z>*o@qAg{mv`U}Jb&KBt{PUUZ5z_k*E?O~yu0#=!$2s{WSon`M)IxRW|tS;O4 zigk@q^8wll4?=4lSK7ejAi^($vD8~W)UdHSgl#XKTDcP<4(Ge{-cg-94Pa9_6jt(! zsyk1~8(jP~$OxOK48Xo#9`h9%3;niD_iJXxTOUEoYo~cIqE1UWgypLSbC5c~`hInU zG?ibnfUC%E!BgmtFHUg*m$o6SMUZEi+47hZ;_?eu?hzMv>Pfr<3TM3b!(nHE{Cw|v zm|qK{FoZnyTz&P`XNnrR$~g|gel^fl5|?-Qr1A(~5?eD#-VOAXJ@os7l$X~dfm43M zC*q314llvuezr7N4|$VLFB}dp)s9h?Xk4j(>MTqm;X_hM#~Cy}vcq$eMx2R0mv$(8 zP1(@lz53G(daq-qJEl=*8}8;~$Bu5TSid@L%eq?*ooo;P_4R}9omU%~ogeS3T0i}m zi37aMhtUct$Bi*58z-vm-0=2bP@OWpt< z`ehJt?wilK`bJxA#hCjgyBXT*T%P}$N!4Eg&quUQn(qmKan5I7D1x4;qca>&I zr-LS<0&m%6_Gg@qsLl)-zIuDayt5zbP;f+%h(r3}r?>R^b*MARJAo2lay7AqQT<93 zM?YzU3<|{C8EH@t+A4d8_=cUeY4DwO%~GDqT*K;THB~CE4miWjQfW2cge~#ZR~xpdy<-8y3iLVBrtVGQWm8I9v6a;p|)E7hWiH@~@!@ zSo1cHqKpVa+ZUJF8sQje`0ELJXV2cJkOOA4vtf;QR(*hVo5##)cgpjvi+uHs_H$2-YG6#n z$@?@QNe+PecJJQ3)yuaidzSv`VYuJ}uH;qL(&uPjFTvtf;q~{?F5auLg*-hN`9Bgl z2bYJQ`qZbYs~>US0SEfvbZb|qBQC!G*7mBm{&n@no7I)WRqsUu)tCR|-Ch$UEl!2-CSwfBMs}Lpk`7 zgL4`EdYU{RE>XDox%Ak>lKc@A^Ckp&+a;G=awEd%ET(iw`#?G%z6Y`rHh&lIvi#0- z=}77Hz?ipNIoKhJ6A#7by?710OW5AOuCdCO*lNJ0!vkZK&&3rQ^c^hZ>Ph?pqwlXM zkQlkH^cWKJ0TTr&%|)@uAJWQ9w%`Qx{+WRM6Q2$R8hXql3{lzZ)EHp!y<}z--mc-z zggZ3m)U$^JiPxiyhg80_ldl75{GFY7h{-tjL3>dW!x*6<(&d@>9gMk;>ESz{HR$fK zI?Hg`bxMOk8Q}@>zCxn`@X+5Z*&GhX)h5^RxqTUp9+rZgz;syz=4JX7-#7# zz`vg?4rWw}fhC^}RoYr1;E{&t7*rpWqbOJKC$0OBG!=W4Eb#)Ab{34J4u0TllcJCf zH)Yo0v>9*(mjdS?Qp4&kiTUape9h-m%|ko5ij|uU;k9k*Ubd&bozePgm2Ks0I$Kuc zwOwp8ipiM_4SEIx&>7j6zw#R1PvI}Jz2m{NNuIMT4iEFyLY_T0(qbSx#cIwO+_kWt zSEg>GY_}zx5n4w27G-l(M_ZloyeqI!-c#DKteVP@V&+IrOC8 zdhcbm@*wG{g| z-jpvg;-%3#S)brEozChCMxnpJm$H)8zv93XCUiYF3Qv6gsM7##vKIxsjLuDNx0x(UWdxu--o!USN1K&=XdJ0&G7DZ94;p;1M?t zFG7)lkQH!n0ltPOM3r_CRKAPXcGci^DsAM0IP1(W*R|Hk!DU|QG(Wr!4#K`Z<)M0Y%3F^+k#&AuKG@0%%v;*Ti{QY;_amO}v)6zd}9k$JIRN~MuvK;zj*WWTAva93tmuF92Ebb!ePwkU-`;c4zh`gtGy z=tsZIA-OX+I5&%M4)8^vb81Y|o5)N;Du$lmF|bc%F-44khIF4%#grJvc$F%HMw zV#fx?lj#SbCkKAO)!k{AmtBl-ismn)Z}JEy&C=n|upJq%W60}g`5{e(-qfGxG7A)5 zSIUh-AdiY7;ZE{W80%Z(SY$QCSCCG(UbKPA+>^W>{&7~46%c74EDa%0Y`|Nl^@%cf z=^X`Ry2>SAlf!S|%_9!VHJ|0@;tt}p#%eiF_PdYl{(e4s0bCDpIgCY|C#`Ki;dA#k zX`&U@)d2?<-bm&pGd@R_EJr$kF<;<8(ai3NSVCg}jO@&AGno1YFsT#iX*-Q41|SAn z{(wVzHKe(7UK)w_Yh_^o`LdjiFWex5#bdxan5p2WOYa&K2Uldv1wa|hSO(9&(k0#u zwDf_q-OFl2&`N{6sN=H&1}{BtV0=0EVEMMMbS>eHSCG>q_@o8ITU!!(ZtSd8RC)5^unM0BGb`nuAY(+L=(= z->ASBxH?~V9{E$?44c8Qq0^Q zklA?;D`oQ)jU^vDHxP=eE?@ki6`n@V)byn8HB5&H`W=RO+LaFEd4LaL?WMgWDd|Df z`LmwcXNULFGs;r?wfOeIUfTm4{}12X_yQBGfy*wtEN8g7@;?&%HaXDu`Rl76I@XUd zKU$p_>8VCgLH%vmI^JJh^2$GNpZd1vweG$AhDITOo9MqU!CSR4A7**|z+2z?*5|zO zjc@!%mURa%y6B==PO$qb+o_B=7r9;S1`g0&fY42|x4su8kSiBeK<>?Ph;AS6NAKV; z$SMTLAr3xBVs2`GEV0|o|vKZh*5}z4N4HLTS@=G2&sJ{*pa7m1b zxD4a*tz+=id8OSrf5jQ6hO>+)BpwT%0;8cQN-{wdyWc?fqbB?9{3xz`e1h4P>E_D- z#4!9Rs|?1Qm@<8kE|oESa(UI6yU{w5I?9&#&;ykA z>zj|X;7~rmYnG(z*;cHooW+4G_YTMFnXrTi=m5w;NsJXOkyf0rre&X5+QC&0 zwH27gC$DwMay+=QT7Y58VJ~nre4u`gB;-Zftu9lZsko z#49e+++vw!CC!6aYw5FJtLYC2f5A)n@;-gQtj1d(ens|+T;#dr!`FoYmRG~eM{y;Q zzu>FWO)ClAehEvzWrdbHPxviP^NN>tm|>~k$OVs6#DZtsNh1bM(zXBqKmbWZK~$5x!LhbgO&*=D`nm6S$DxzV)vM~>?-cp>X}$=}Ti)`P zDMo}tuX@$1uI4b@Pk#8rAO8E7z3gQJ?5WSN^ghTX6{jPNx0I9bguM#YLuY=X(d$Zk z=}5brWO&4BAL6I(AUFqPRrw&clq3K}c5mq?q^cTfY z(-)->#2tkuYz%FkPvunV8N8(H8U;ew^kM{si9*A7mOMZ`4l-C-wR`vOjVSJZo`v@p zSbViy!Cic#3$DOJM`lIvOmYodm$a%f zKqH;yW{i^qvPo7OR&$8yh-HwTWmNLW3(Lp=4POGhUm(|zTE0#=43_fe2rqlT7%8vH zZ0Zb*l;F$EqphPIDZ6b@Q#7Do+Vuxq<;X3Y+8Am48QV?dn0mObUH6B8_1RLssLvp7SRCq4Ja)~Nu>$A(^EjDwfHVKT$S zVG{$2ADe}dWhFlU;+ z?!dGr=@IW+;DCZOuLuqxk9}-M9i6KN#!juO3m2-(Klq~7_2PKJ`BnRWk`?zQEU8bv z_x-#+n)PrUuP&wcJ7OXzbPvg!ZiCqH>M`|CGhxOcOs&P_{wUWhV| zPF9wP{;-I*cw*;Sfh*u#dvBob|iDJh=+{zQ=vvJNM4>&U@zG z*?H{D?rJ4jT95=1QjFzbl8~4L#}EoRGIog~4gm!Nj*+knoFcV|3ZV)JNH``T!d3z% z0^ukU5|R*FRx9o9%+AjH{hmAb{rVpH{m%D4|NUlG#3r??-C5nP`o8Xe_vzE8Pj{cw z@5ZfSi>U|vIqYB#U%I`AG==T48hpo1fb9O8n7zC}348;*v(E zLEZG0`H%H)I|9%;L|vZ;#&^~25X4kE?hwM@ijD}jc!ECCOFl$BC3fOn%{D05~UXa?Jk zca*so&d~87+h000u;pK0s@LASq1F2QRIUEc{>sckZ}Z~zg~e?PJw1JM^vR=>L^?^I zY3h#7oN4%7(B?d!69 zh+iMF^a0wykG|(U@A>?PKm6f=HDxaAUK-Q0y|2>aslT}G z@-zS1G&rutt81wYUYb;2MOdhOR^<9GV<4+aFaDR_^{#ihHoD4)u$T4q2YH6|IF09$ zm$^8-MbC3yg^nPpGg_Wv8hi&+^IJIQK83)r5h!G%Wq@CWVr{pfrgBjb=q{C^VZf?* zqJbL*E^oeCWFwV#vJaA0D06WtsDM?FL`%ZPD@G%A1luLU+)>Ij*HHx7d?Cn!Hlu-` zD50y8PVwj&0v^X2rg9_BTs4*;* zCTWD?DD3Do=*A>-&1Wc0(kh%~-Sb-k9y0;DrNN{8{y8AC)-?iI>L%KP4YDB zr~c8gOn`3Nd|;xSq^m0|cw{(!{sJGc<~iZ?H$Br&Wh%aIdNO|Sko?S%pS>z`S9dZD+) z$o%zm20nr^e;k~(ANYYESjKI7Yvv{3K+ly~Ho-BWHZfKi+1pe3)WJ=aAOE%QtA6SC zK+Y4Y_1Cg8mw#4BHpH>%FXkZrr>CBJYR7>C2Y!-UPJ-SC`7Lxb)@b_J>y2h zEo`ENAPFRfi>t7+q5It}Z1@Z~ZNuUR9#EDenh297{B#?r05`80M?b^T5ZsxH#zVJx zicS&x0u~V@qX?8qHUS<(n8lQMMiic3@F3IkyDMBLK_OH_xMo_W)9nvjbeiOE@)#wd z;_jEfcCh4Uq4-pcDk))I2MNW70Gs#Qa^q*7ojIAL!!^Um<_7gdUdU7FR?w%i!5MzR zn}mVBC^N#km5g*p9m3yw<$17BAmT6#KaEO8Wr}yjWdLoJ5u>)wYzp6cN<*yqTgO>D zcN1TYI&_A-#>^DoamfqczJTYYKx6nxgXzly6@1+C2M;_BX#Vw&`}Bbg1qHk_Iz%aX zK+<6((mdQ--=YHyJkdJEYFtKw1GJR}ienj`8qbYbOVI9&&bTAl0zOBlStk;Ibb2D? z4&M#Wa!H=+7xhcHf`$y!D~*1UKkSSnE@}Q+@gtv^p8_UuWj^tPg*^*yfGgI_Lz!C_ zsdP;aH1_oNRGObTHZcB&mumI5Y^*fCFjeV!-($+onU{tGJ%3|oW#3Gr(tiE6%J=?{f4lm>{c(Z! z8$p>T3%wqe-S0i_fad|1pF)|BBOKn#%|#6aR)Y;3J%8{Af8g}{ai))YJko~p{t7~4 z#Wh_N{4GZ4+uZTa#=1K;0&v?vG`elz(NKy;Vgty=u5bt;ik}rcrr%WnbSS)pVGmPV z=ja)G%*LJT-LRmGscF;F9ccpNsJ4&BbP@jw3h*K5evU>pi+@bx>fdFQkRb^13*l3Q zC7lVHG%L7sy4$eKt3(hK0=M)d+<4+QFgg^4JK%8(Tk@>PN2b-u82LsKuA&g#sL+eR z*o#m(15ca=ROpDqIKpeCNxw+H@H8zApq=$w9nhvSmcM4e9rd244#iDb45Nrt+)g{I zq`jTayXa@E2P!bj3>^Lfxp?@M{KVg#-%H?fnjKUzOCwzpqEZRBaQb0_4!$FQ`b!u7 zWrt8VKm9X)gzLx8fXug}a!>?rg|A`dND}{m6@X~Qajn_QUObk$gkpB;UHTVItH2{& zQMbi~@#Qc(JkCydH^2rJDq+&=jcuMK_d3-%@Z@u$aq}F!jvhuqbBv@-10y}=McW2q zn!%^S-sa8*_=Rox%L6`NNDp@^yyTunn3Q>}R^=UsmbewJ-CkU7^={w3^~8k>7axUJK2PjZ(dI|G zGGEdWGebqXmWOQ|3qa})@>BcBKk{=9g@2kl<4cuG zjLg5~=+UE3egF4=|2xE|yk)9g-maOKkOMt`?V-w7h6gH>?|obKT;OGjz4FtnnRgV& zOPJKF8w=y`m4XX`uO9I|6K%xmzew=cE2NQnhg|5&&NOh@k1!}Qz%&1fga)5 z*jK6WA=DVvUt}}g5tRF8D)J2)O!r!1z$6D~2R5V>9y+se>1R6$$xFl7N5k-yF7f5s zJRq@It5od7PvIc0XqebB9*Nxu&jSl!q@AR0qH1 z5JJ1a5#?97gV&@RQ}X!52pHP%isyM%=mT`5ZqNoK&ZB~$D?1wD=1-o;OE*IKkdHv7 zBP||5a~Z;p(Ga{HMagf{-wqJ)b13))ejYjV_B;#S_M)BTC9dEpep&DFii>S(;B!N0 zJO`|wbg(q@0By&akgK*GfidzddF!|CZraF> z#`TrvlXoih??19UwRg+P>=N%S!6jJTvy9w2>nI(*cyB`#WGB_m@y@Pv^_ITmIq~Dg zxHxxCC+W7MbJ|M0$8J2rSFAV1S@R0vC*XTr1I=rRZ&R7m!Fns{E~?CxwTd{b?N}$%uj>~u`~|Qd zHV%Z`3V3$XVAeTBRy4Hkcs8~Wu;Rs?0zo_}aKewcuES4(Q~D=?_rp`9>gye?Ywiw;D_!w#W~pst)gecD^TZXz(I zSWb9=a_~kuXEk!vDE@#ik#`)?QxYe5f@dlj1my-g2A-$gMj3B{FTPv8jDm2(&vky+ zNaL2u0e`0)gMQKrg@bKc`7Z5F7MAe~N5sjv!tk?h`V+)U zbi9#oo_aVVFXgRD1^;D)z7P0pVD!0#ve;bAUgUB|0~qrvQBfy!ng*srDCwXuw$o0g zX{$aIWIf*l-XXqEN&`RfNlfqqI|vhJ;f~DXmKWVH>5q3=XN_Yy29Cn+hQlk2ehHK1 zX@LG&e)-*P$8^5O{?6HEoZ0tn?@jDy1?z;q)cvLjt-HXz? zY9plK#WZh$EAfHuMS?o;0T;dR47cH;K&BlDLH`4WD^&5fr_X1=t5|Hu+CXM_8uWs@4bEp|VamhzVh$!%J6!?xpf%kxS(T*8-u3%rMJnyK~iDModzDMUt zynbV(`9=9MO^kn;cfU3INmKAs1x7i?i3t_DbP^tEVFyfsi_h>+#o)JY(@(#^Z9um% zExwbEduffdige4cB2J)zZ%z2KK_0`GtI(NCHId08tt>m!N_vW*(u%Y!oBSDKJy*$7 z51oPX{`Dz%?k;s-M02WslgfuqMci^HJ;g6(5yS<(KB?QoyA0bWCMIq&a=b&kanH#P zmt#;ai$xumrzV>`?sg~tl3&)}9DNICc*!H&Bpu6V(GlZYoPSZ?K^5h2SNQ^8nu4y9 zkK)d}GCO8f&gNpoDXjswMnF6b$Seyd8g#z%}$;~v587`lhLm2hai`_;Cz%$|9 zfjdAHyZhxh_#K|?ow!^?d5p%Jct_0#Y&PT_BODqqtRCh;UK zc)j2kAJ7Qxs|bkA2$(8mahq>P9Gl?zs0!IUDPRb9m$f)OCgy$coB56VbJXb!2qOkZ z`Bzj{D3clE83)1Tf?!UIM$!c?^X7NSkAiRdX)>Q_mwd?h0+Eg{mkpDS8-?uj-8Fgy zHl|>^(h^_tC~%kPYn z_#&Ki{m!x#EKQ_E-aW?Tz66!C*XF9=ZBsY1OyHFd@~n3zMZN)R*;vLcJ7SdSuupe# z)bs-7(a$JxKke`$y!D8hO2;}CG!ifQD7~2%mn`H_wx{&ZIMRHVTa<-giBF)y+{N!A zZR2<2NdARC_?*47++BunqhbXGxt}^R#B7u|t2qOu94KjPlJa10t8wv8@8}Qy-=n*i znOMKUjlAEsvDN(Hcg&q1>T9j8G(0`g*%S$mpqcV?FN8Bw^rJ>yN-39qfYFdlnU1{| zkIJ>!%(k1^f+23uJS`BsmDV_w0nZN;rue_ec00-{bJonu zWh!y3nU|ge|5m~9(kFR;U{tBQ*27u#7Qf%;@|hVb?Yj{+Uaa7nx^DoFx}La6^O3i3ZDYo85my^8+Me0zsB%;&Aop49k{yqbZ@-;?uPI7)8C&RIQKhb`6Y~H z;|{l8__tN%TFh1mm-&kP5+T2hE6#3z{WL*G5jVdBuHbXlg}BPsbos^lI%PIb`qP$I zF?t_x)J~ahblOr%(eGG1%qJ74+{L@cAz28}vx4-@E--F*1 zYsx%W`E~ibtMI-qDc(nkxN$?J4$1ZJ`JV6j1uE%(OGWk`>pBX>_0I}xLfaUvyTjIz z^@CLI8f#1^Iij&ep@Yzh4M%31Fs*FF(bx+An2yBlGlE+XUW+JNFNBFpFo>71DFhNn zev3wvO1bmZ5jMgGytJtBXwY^%zKYP>i14s?9n)&kj$1(=gkoo>Kzx~IjG~1p=*rQo zajZ`v_{Awq{t8$=OOyCY4;=a#=Puz#+z?2HA*>yhxydR<77BZ2PtG9JccJX}QU-gR z;XqLj5;n!C;WWbLIPosYSMu*uoI}`N>>{l%8kytIt0da z+YzV0n{~r{n?xYS+2(QJJJ)5G<4%^`=qZ&Qu{d;`ylS7%A7h9Va5^O_^_+p zXjW@O9GE(Y?$ilT1mbQiCSL98yI@!REw5Wp%bb7~& zPK1Ht*H{jjXRpm|b9!eN@s>FKbB)f_5d6+rgop9>va2WIcMYX~_$y!e%AS4u_D#Lz zEpPd+kd>cAe)e%Jcx{@!!`qkrKMV0?Pw0M4K&4(ZhB`gYpGP@7j&krEZ;iDi1x@8o z{^U1_!h;Dx3 zuyO15CoX>}ltN+f9ky}#rGmCqi!W}JqaiOr=P^J-h!{qmVy(>R#V^wc!PDgrc&QAd zrw(4@2(N&Pv~Vl5u*wlh(vtYY23|Pb<}Z{Rc0|NZh3k!Rbw=5qeU10Ag=d5?!ANp5 z{A(egcEaxk^7Wh>qJX_@K7sccE?-Vlfh+8tlJDM_V_KPBlv6>^U33DY5e`)4H13Py z8qQBeQs%`x@-1I{T*lqp-gWK^X7WTFp&;%_7w_On&_S4RmPK{|^)F2qP2pFhnRzJT ziZsM!*~JL9@H1o4A)_@dkYKHN;Gva?JxJ>z!(JOAPUq%*~?%)t0knJ*?j zj67MO6M7Vyjg<9ATm@Z$gk65^*2lj(ytT88(HCNyJ$kMHCqpR}^%WQnd&mt1K zNIys6(ZL{{TMjr#C!ahuji3#9%h#o#rqkyr^o`7boG$dCnujo$&dco zpZ(bz@ayL(>T4YL{W!WR>sc7($VZjY+; zREUJ7f)!sj^fEqhjmM`WReE!5O4Z812i|^=g z6nxCi2i^f^93`>wv{i=2kNogm(%f-II>MQWGOqNH7vENg^kruWj2a3+cL6KjG|8VB z(H5Q=p5^4XytS@mn6_~vKDNd>o0qv5E?tHvePx}5wh>0>K8$0yu+pf}oqSB(J}YpR+Y6 z#|K$f+9po&q0*0Ijf6+Xq~LjXUQ9pps%^O#t~-t2L8JLA+~%?D9D-jSo2P`${H1b^ zG=Qdaaq4nFCqb zUgl)(fAm&N>b%0B!gTxJN1^{AO5625pZIJ~OiZ-d{oen%&wZ{%<6MXL?#ao?n@mG( zCtlpphMkNE2j9VeaQp2QmK$kkZqRa8z%cz&SlBpi9MRy4utXRQmpEZ3K45H_cz4n% z;)KA#--aFQmC%2J9{UU(kca4PkI@0~Ar1wK#zvlk!So_c;)k$F+~O-t(8squbCup- z)I(2PnI93PU(yYVYP_SZKvqDrW_m!Wf*`6p^-5>z1WNu2UP}nWb13v-`0qXTrdulV zf==<_Ecp>6>sQboG*EVqW;ES-O&CF~2g#qH8Jxzod=h_Lf2uzwXfezm-(FMdn*b^$ zmsL_Jh(ma+K%^CX?t;-TjcH{ZahOho6?Ud4oc@MKeJZ{Mmj8CjLeLv-rwF=y!Oz#r zVq}MZ&;e{J{lLw4CqW!t#`Nrfh&zA6mGt2DJAXJk^{TLi%k&Hj+O(j#@96$mRG&u@Gd24x^@t>%d}Cz-sHCc569q% z{$wlaQq%>)S7}Gv`1QZ;b+5ZfJ@DD!Djn&EQ1C0zd-n66|NKKJ{2db$6DQyJ#y8#s z&vE?zA-F_ly|(?YnXe-U$_o8;O!K}?iVCWtRlqINoBsQglarrg#O}o-ZrG}#P*c!)bcF}8fsyq2@<5FmphQ{KNs(uBL!iRtmD#RByf87En8X;lg z)IX=DOW}u~?wDrQ$xk>1Vm53WuP=DjP>!egU8MmZX2Z<5N}Vv_HOAGLR>U<-+W4s? z_zc*zg%vL8O=D0OE>;!bkHA`Rd(P18!hEEmHRx;dIldh`xh9hl4y=*k<~ zGQYudV7hS%mkK1VRYjQkl9_b76FZayagv^3Oo1cmN}6j zUuCKtw4FL2jslPT%(93)7I{!^x#K-Hg%+?T8RZDf05WVh>*g0(x|*SLgQ;H#th zrB8nHlShDQ^IF=IjMNGw8DrI+stg2#&??x28TN|;usFiD{i4G5v*Q?B5z1IW?Ms(mX_ZMf#y^@QC$C129P^AVFMMD3a(nIeI~O zY=Nc~gvwQTGs7rso{myK>w4Qz++Lw7K5wc*rZoB$Qmn0>V#@U(?iJuYZ=cG{^m5c= zTAH#PI-g{$qd0_3lXRN*bVrzZ#1T`AUHQ2er*T54N~_8ih3?Y9s-sNuHDBNrr^+CC z!;*2nSwojSsS{hbC_m6E+k}gmlp&e1R&J zm#8J&(V*+BnSSDk@B)uk(w+$?ocOY1Vj9VF*w$G-F}zrA=|wrO(*B$>R!JH!=*5mQ zq5N<9qdt$&9=AJUw@y%pE>l02s2d)gE9-=KFqvohZJ2dB{rT*42C(stSMsbgx`okB zn!|&z;1&LmSYO7j(!n?aELXB_f0}yWX_lA?!B2h|U;d>b5pRU6v{stco=-f(11!{- zhu5`R&&*b9?|I|W)v=-W;`BmwkbB{bmwYh&paDC|8QU2Etcv#lEYQ9-khY^~_W;FB zfbgfuWjzP*TXO9jzKtT=4nk+06Fe>2<;KH@51(h(`xS7lLq>R!)_Ylsynt;!)<))X z_!Thr-qy@tk^{f_o4;v;>7iGB{YQS}NB*2%>tp~#9D z>rf=6vI?b!+lCtggP!_E8x)G`TG7DnZH!-w$`pnQo)iQrjQm!}r(iXmgv)r^=~n2} zp?!`9?NPAZGzqpSUhi(2Q+Y^Z;?Ny}jC9f;uhJx3dI%#P{bMv?I=E}3z0FPq ze5fTBQ@3$t>D_}D1PC%hZ z!0A2z`q}a7PB-BAE6b;FO9$_Ab?P5>q-i-Lz_-EkD@A!EErFak)+4~fh$BYue1#`r zxxCXYg63%t%Y&|$qr-JY?-Lc82S9FH@4<*W)Q@E5i;C0#g!H`#}`(7JZ8|%Z`9FMI?Ts`kIl4%<1A^=oo!V&J(X&G-9U5YsWXF{e&F*%+iW@4 zS=9NDw>MXR@EtQ}c>ES3%W_W|Bs|?EZTLl}5xiAK-f?Ro^ejS~vll)HwdI*-p4rA_ zFwX+p2fc^kS08Pz3J<5=^rknRVp(H~PLfNDE^EDyym-V;Wgbg961`@={v5E7*UbMv z4m2I9GxB~K!SGK|#Fr2(=h!5-h})+dtBl^;2p)UmZAS3@Jm9j629p&&1R;$e8Xb*k z0LA0T#wl4FVF)F^3-WN5?xZ*siqb$haYtNi{i2soJnaxHML1SDQce8&xto~h80(9U z9EjJ8@O%WneuR-zXyR1R1YYbAme}IRu+nWF;f;To4v6H%)1Rf{;Je9;!6@bLB`1QUT;DcJYpx4y&uP+$+n(67I(J^+#)Ay)xLUr zb#b*``?#ZXZp(ku0C(Ec4SDaI7q1TYb5y)#ry<(E=|(w7M?q(x5jlR=y`pBKb%`(-a}ZRXKOA3e@m`C0Sg%u<2t?~#`$!D*SNY%{4f^9pbv zgybub?tPymmDk1+N}b;6AE5X)(cAw=DDme}+IwiU8(91Gs8t&!?~70s*3viOzd{4J zgdle`8I2ic#IYKLOk13*}wJ1zl;pGS!aK3j7^mN#kl6(#e~GwZ-URfKI_V zJ4&21IOr~Ta3&w6Hv|~4c!z+~FZgQw0yYG6fj@bEuY%OyxaL`tGcd7MUeKTTlE-Af zUJJUfG_2>9Ot6)_l6`s3TPB z_-=QaGb`Z@bKailz6|TRiaBuKD?9-~~>_2ZG9 z0>5$~JITgP{Py<6-W=?2HvatN;Ff=OvUlC~kxKiC*=qeg4>VTZ^uWT+JG1(r ziTWHgbkl`LmP6*pI%8TcIpkD(gDLg>e6P|DD{SyR46l}%Uccl;PT;FByJ4Q>w{d?Q z8S$t1M_V${HS@}HAcgxYOT~SfdeL}7SmXW|j0U}y^nD1KlT7z+$Gyvux+8S#Ho~Lo zu6G(oAHTB*6*r~WI2;KM0q=&A5UjGKz@LpJ6@?8`!IurR?2#MC_}ZB42LjM$+ z!YN22jI>IngFDhf=y==R325Kph8PsjC6weP@HyHEp-z11NLp})FpD&#Uys5B-NZFN zZg_M3vKPF29GTl$VB~ayuvPud2d2AI5@?JMpA;x~K!*dggMB2qGWY;x~SG+41?cO%bmxam|}>qdERVUXw@?I-Cl z&+)yU@~uIum-J*>MmN0|rCHFMbjA`4@qKpn4r{@)C|s9$eBE$b#csL4k3QqkKBJ7a zBY`6C@~*(Ex5S#4NMC>JDL4kji#>$$J4#-B26+%%c3O-h?Hc1{{H&8KZ1X&7z0#an zto48FtApDsbouveXt%B`R_lN3^$S-A``RmuD^;FffnlBcm%NkKZhYd5v@F-88{3mE zeYC$tJ2tGHZ=}6f7@6-vj$LG3{3^U?)ArpPu>#$;O^?_9813~BuuUWB#kpo)Ne*OX zdL?PNuhX_slYtOUG}sT(aDSNwvH`(!neP)Q#Ffd(NgKE8=^klobJSxK(^>~zS4TK` zafk1hyJN;i7`X6Dg`D_9uoTR)+!O$5?h^X8R|5QHLrZx5bPMk0be4f}jXP))hcpp4@{Ic~ zn)SzEvD=Lq7pA4hm>oIgfaN^4Nq1=fkZjH7Xh#p-pt4hzD@89&H zlf6T)8>=+GI9;v(-F=PaNA@mrwR8<--iZdjpiSJw@8)gb6EP+(x&p>BUxA;NO%HNu z8yk7|z>f;;Ws#fSp5+A3dGk&_ywT8On9kg-Bks?l%>Pep>CgIvbIrWc99SEnzXT;v z2p@T=u=o&)!|CGxn$g20MgWU^??y;&U@E!BXtBkboukKfj4~dy(V)z3A^^PXC8oY; zC^1U6(G^CAQb4KREjazg`z}QiID{ik2yJoPgG(<>;W3M{oTgVlO+FpPW$g`dg~`B8W3w+25Z5fba^D0uePm(nVZ49$yz zLm{FYSWP!g`UPI%E)vHnV&CibB`O7^G>0L+fZ2&yK>!^?P(Q>dq=E20OP+>{G%_9I zrQl1y(gs&7j}Rx7Q`q=N9PEfM&cZL~==w`s!pm20<#SWkteeoFX8_^q42}87b}9Xd zLLP?j)G9m;On1UrC!)N8ONG%L7HA5Oa)yF9EqLh$Dc=>hE~peu-?H#KGKQV;Bj0}W z)1QQK1Vs^&6@Lhg! z6fD0?PnyLU<&Lc}9lXnOGp*p6w*LIu)TKevTVhmtjE?tC>d8Jj++)<0^VD0@a3^>m z6kp;kJfd8zgVf)68{R2)Ivv}f`3AI~r=7@apFVXNCF`lQ$rte@PW?KDK7F0Z0gj{f z|NgT><1WDT+TA6_fA$8}&S`B+D^>W`nPoB`7&Du7R6Id6{-z%QwB=QJ*r2>e;jQmb zY@==X%yQ+MzUiB0Q0S-0@3NgH=(TOT@l?EC)b#U&|3-(vyZBmoty!-m2VT_RUrA!_ z=d`Kp4IXichKhpz5Z}LokluqLpGFa$!0!S|rFr1Mff|jxO5^dZ;~uV!-N%m7gZ6?E z92Er=aUHQoLxd;U(6!UgmK5x=krsT@4xvd{2!)~%=STqWXy_^6QgEc5g1bN$>zLvU z!LC5V-JmfaV-4^Q0`DNdJqkO1uDd%W7cIOH9Dau3+nxSPj;7u8M&1VDg?Dma#O?WE z1&2zbqb&*r;wL|alVSdXc4+ZYnMKn@aQ4|5!k9lmN&%J%-Vuo#{g#=2KY@_i%GB+4 z>5ekDP8eGkOL!Z;JPO)@|0oNX~gH+rH|#rrY_3gY4QNdrIeB#fhF^JlsdX4%qyh8*G25xz#}_zLuSL6dQ+DD)xxJsf9d zL+NpYS&a_wA(Z7fZT<|n&WaQNcovmNi6hFB?=s)GlOF}{cAcYYm8Z`3Z}`RMdj{UT zzTN!u=}P^_4z13;ZqMS>YDYxyi0TXZAY$+kJL#04X3h(mmXSTMb#;V|ZU?yp<{|iK zJ8^?%g$-}lnWZ>EM+TB3&vvkrms{b{ufdmJGmqwn@61C%@0#^Wb09|ouQVO6iS*z3 z&Uf1At>_Ju$IsFG-Acpwn`G`H%Ih-9dKM+Pliu+d%G{gInx{{nt^>E8%`z262U`%V z6@O6X^ix7%y-3LFr|BMu$qbBxmkmkEneDd7s4PUZ_GCNEU#&^)h@WqNTE zm_=+T83d_bW6OXUHq9R(UpSSX?GO*2ue$s zNUtlt-1#M9WaNp&}N8&RRDnB=fIXd54I#_3R zYmoKbJ4V$X6EtE+2c_Ua=C$Mr;ie;e(5?fM?x54O zrCXu7a`526i*&LtQxA+2r!JsPyw>9#_~rCMMjG-RAO{HY4?c&wS=HySW?r5bu8P zCC;!Tc9o@yo`&VmGE*5u<1K8g7X+Ga;8K{Spz9WD#?`0|#OE*lj2rbr!BB+hhcnWs zsRW_xHof_0psmfQ`*n(YzbuR0e(nXS{COb7U6E1G;^K{3dkxI@<&z5oykmy79?!IkHP$ zXS$_b@F!^0%}?cOxNfZ2aOUQ_Fv8#nUgD0K48B7t$_r?6>0$^)<+4Na!d=!mij8~` zmiTlya*7dQcy{t0iHn<`G{tDT$dhq!c9f=Za0mbOqx|ALvSmU%JNn|V+>_o=l=vAZ z%R`vpJ8o_q_V+n=~o*=L7Uo<#bNjA<|43U~&-s9=af0+cgK$0u^@ zjL_$)M|Pk!(h+$oXz4_NKEg76>F%!UM$rhHKXJIsG(_3-qQtyy?jm(~ze^)1LU|tL zf-ODn3Gq0c)AWa-=_YZG!^c<(09Pn;@JoYfn{R(nZwmjYd$={YiA0~RueY`O)w2T| zK60jK;4NeA=JAyG z5k}-ksQ0~GS$&*GRGy<9c;|yl8@Jh{dr6)`cPtx#&vNkRefTQ#_hZ{8EQ>W|E;C+* zW^IK2G89TNQnweY@cRIb-Lup`%*@ za*4wrjc5xU0N1o`BG~Q_cZEjhI&~=kB_ID(hBoXFn1vsfvLof0&|$)ZFdM9LA=VLb z=TRMng90ZEaDE#{`~i<3jfM@0&(rg_m%ks{Z>Y41t1ij2C(ETSGkGBJX3= zcN6;h8L1y&cHucYT19?}XaSCF3*{D3`3qtTI~A=s<)Pond*Lm_{hH@^vv zwR~SP8-gzv5-$Lz-3_1lFY`&3-qMtv?$kP$tKj15MzI5n@Qt2v3zovo7@;A&*hG`_fvaaJ5Cg>22X{4X{al7=@ z%go6&(rr>-e3rLHr_`k)r`TcJ>LBg=0pj*hmyT1Gv%nXHn&{s`^cAuc6iYA=rVPI_4Dt1-NFseolh^+271`jC)vakhorZpiMHSs)WdAP z9p~DQ zI$h>1PIcTHRQd?GRi@yfH4LSrCc24c3vP{92!YY&kafG*Hpzzf# zoDxA{7oYqog!n8sDjA>d@=`lM5&}t_vWpXnvfx9FswmtWMOpc!}K(~f)=>G_?0!2`2}U*xdGpjsJfjLN)+OtXm+kx(%KWFW zD_){y{&cUIS1$+F6#C0pHr*q21k^9kfNa?9xMlJH06+jqL_t(PM8mj62+_Vmpw-#y@67?V~-p-g_t=B zTLD2DdW7)At)NPQVT0u}Isu`SjChZc&WMW*c)*8H#I3Lww*oPuDa4$1gsx{4a0t2w zq#fE8p#53$>dt$WZ3;Hyizaa5R?wF883t&;;MR20Y2Ms~S3{sLqX?H3@CYsu`s)zY ziKjaikUoA(Mx0T%BLeMhI!r3{=a?~ZbmbJYaHbi;-t?rk3%5AZ53o|9nFskM?IjM~ z!ea-0;E8bY>5uUm;c0}h=apkbDhOfnI(cLqO%z7Q8F&LHuz4I${^%F{E84Bo`ycoCJ08-MVzxj>Mig5@tZVBTz;iefdg*$OZo=n#`bOw(= zM~k-dJoP7JlS&92G0LZo5j{4<4WmHaOc?b5zo5Cm9XJInjNd^cc;s#OjDa9QA7RO7 z{krRn{H!y}RCV-CJ$n|Vet@>Pf%@G;=k+WK@up>H9hcq$r%VLx*X&H05#cnZ>(34Z zC|bR&oj16bedITu9N6lb`4gNuuMAfz-+pBA2ItOKr{`;Z{e4w7&qgPxj;t7E^WYYi z?KaRU^a$QGvwqLR#~DbJM;<@zVYbXmV@9C)(wD#d<(`FbL@6s zhw>hv=ifq6xl^{v&(V6DQMkmKt@J*D^5;!(|=}TYQhcauTM5hV6!6;$D(H4RQ z^k{38C>F_L~9nBYwgi?R77^%;LE8B&93dJov(FBb=U|WukTHIJ>nBS2e z-=)&PO;AVC;SN*4>JFTyr?Q|dnvT*P@u?sPH?34i$-7XRg@2}5+W70%(sZXCdG2_3 z6s%(s-v#j|w8uFJp7hx8ENbj)w$75lF8@zcCnXR(FxWQ#DY z@l@L*+zR)}XGeB@{7Sucga=rT&QxnZ`DkPI^^=VotE{Z_^;TO;OLHSPZrt)N2VWNS z$m1fNjf*U8IeoDVecpEGy$%&<9%V4$X1!HlzKYq060aROa>T2Loe7FlAm$G`=sHv$ zS5{#MP54D;)bBO(>gGTSu2(me_c?Vo2pUT$b(F8u@3iICKfvE3LQ5#7+8f^RhLd0T z!WSM!Nw-lfH?TL+ldhp0D@>!g7TrhV-NDY@d8X&D&=@b{w~klGwlJbU#E4}X<$edj zJVk?^N158&R`9q}J_QR&cJ8M(OgARON-pc~M~3mO;Iyt}!#0jE3QyNDV^m8%8qnnE zyv7x{Pcd3|NA1H1zKhUz4cOQy1U(921)n$)rvgxAlKv{Pml;O)Ytunu7>9;e^IaS`}RF;aK>-OX0u`hLTm8LrWVa;{E302jvSL1ioWw0vbK0=mSVqcoerP5@dSvUHb0ogop#b;30Nw zGQ`ggSilzXjBkRG?*cw~6vwutlX@~t+PhKSqqNJ@z_qD&lhnC+=<*%}>z$oZ@kN;c zg0th+(PgA7+kkQ89lr|O*4xcnvpoa9^u*9+N9RX5XMSj7rTL$5?!2))*MIKP?B-iH zudKg)d&+$TzAQM!(w!#(>=63&Z7*%X>GS9$upH%i_#M_Mbc|*mmyGyzG@W$(!60(;48Gnmx{{3*wG7L`tMQdPQTAlF0t#Jc%cM{ zn|w-~G19_6zf*Zh8_{A^n7mBEC=HPh?Cj{p<~YjwHvHR9y4jfkQjvrxJ zUxHtxgTCq9T|kHL0K9gZ-I2K{C-DIgkcjl)-z4B^S$o4C9{Md9kGvdzYqLEtvC_C5;S zESp=d(onA;=;rB>_aZ3Q^V>|L-hh%DvXLT?9ErILRzafRb7P&tGBzd22JnZ)pMt1c z2r1lR8dLy`fJ&w+Ld18y$57mp&~ln|6cipO^WE?s1)+uN~Xj`d9SRBv=PigZmwB24Eldi2KxKTVS~+@$Cgs#};r@uotrP<0CUYtgM=q*>sOZ)p~u zU*guz___^G-so>3kaXO`8nNH1sqdmDZI1I^)q`s%f**1CWE$3nRZt?j4t zyhx}1ICW`?avo>hd>?Ty5_b$aaTR!%cGg3aow9$-X#ckhToso0?kYzKT{EwK4y-Bk zuX7oF@Pi+0bKPt0eeZi;owf60?|=XMPtyqBMgt$^w?Gehg(>+>Or>vUq&uacpkX@7 zUd0~b8y(i;Xr+NLsW37h;ON#kjd+BH+u%IuZG_!*8s{w=G>zVkbt5RfE&MhKr}6?{ zlkkRk!53553RP%O7&)|22*rphS;V(arBM3Y5eP-^NCiPL#i+%NW{xle27Kdfd@PI)AgN#QP`vf zXBhJ>pH+IWq~Q(}F|vJE9q{ODDZ z7oUP{0&mBGlPpVvSFhdNeEH(h9l!hJ=4~IoysmF+U!^_2RH=U8p_S?Pyu1I{wjGCV zj*Z5wgmuod;SDX9?2iw;*%aPG#PfcJF^W(%|j7nxOlY#9ky;e zJF&YRxGW=iCQQ;3@c!W+N>wLut0>h&@P3*yxJVt7@5$SU45%rfC??sGC0J8#5%dtz81cm&`eLO_uP4Ya?9%N*@bpL_qsz>-Fj?r)KzfDUIg%LqXV*w z_OPHb$KO}odibuP%pZn_b4=4;M+O|CZaoDKJA-HW{RGPV%g`Ik7x>%u*35m%ff)VV zr?lVKWYcg$klT=OKh5a*zoZfVJPq$rgvdp%V%)%sY-5Z__Of1n8X;gW+|j~0ruuI4 z+fD;skDnJ>w3&Wyv9?~PVXtSzKE~AAG#g*86Ltq-xax=i0qRt^9f3jDB7q%Y>V6{% zajOCoLEyCiEP`wb8oVprbG6W9I=3?{K%nFbuv;#5=D*#N@g&S&JR% zZkSV8ipy7<8gw2mfPV_1wiD&`a51t!3tknPiX|1DWgG%h2PWMrB&D0vmsRNYG8Wg- zJ&&Gm$_I{4v{C>o2}8)HKk-5limPzjnTd1i(CX~QA?Q9!8dnv>z~wr>D5OVargHaN zfgPs6*R2dQ$aF#(V3R~GP8x^<0ACNgjgs9)TBCHdE}{V4b!=Vn;*VZ_((4j|_lL(! zNFwgC?TC5ZXH3UaP7w!t89(1)Ut*?Y%rqUHTh8E@Uoq;Gr^GLLtv|4U1l{s4I!7Jv z=xCVlP^7@AA$1#HrQ?lxE7a2k>j?_wAiTWB@0@%VrhpA4h&!}Zm!IL@$ks&B`cj$q z9^?&qrjc|;9)%T#bfqK9I$-!t*ihz%W8$3w_&q@V*+>2Jl)-h{*9~~!^~-h|G?uaP za%3Mofmbfo+_IBOo7ze{xImj2gvYD2DV1%UBtYq}SAmmUb=hS}(v$m-voC+Ycd6uCQ;%a&XWff7Z-> z%z>m0o=Ae?;C({)!j)%hBV+Ng=bi?h>=n4T>Jba$OnK!mU`ZGH;G99hIv zF(doUjJ&oHw_>NjksCC+{;sr50jwPg16%wAb#}U&7fg+j+kHN_5B@9A=AGiwlP2@q?Pr+ur&1|x(}i#T zR1ESWlqmUk_qLCN^iv)ibr&-OD)hK{k2qx-;=x}f6X~0lMtrzUTgC*h@eXBK#8Fv$ zcYz&*9y==VaEYHI$XGizzPKoZm<17!-|1i2k)Y{y8U6f4*%4;CKDE2(^uCIRGCoHc zt8`)mp1c6wvM^ro-fw=T0k#G&Rv2mSr#uFD+VeQ@cIM(JTM@TAZShI7e&P~ujy$vD z5Tj<{sP{YQY>Yd)rOjMM(K?;)QW04d#S0x6Kk(NIJl0d{Ndv{Yfws7tC9h`)Z&QZD ze2>sR9EA^4Z`_2o3jPInFio49U$<^#u~r{wts88up1DyU{ek~|Ef<`mNvk ztxwXfchlC_F*^6m{Kt_Q{|z$=ZkCM>cb2VbteN|l18XDnSGeqohU8SYO5LM4Kgg8i z&(Ju(o5pvQ@2xbp81{y|13&i z4uRn=@O}i2y zZF!5I>y&-c2hSSJBpih1K@}3V3L^8@k?zEirovyGE?KB>9QjyYvBTPY!{Z@;(#p4^ zHHB&@C(3=9yu0zyqeoTvei^)Rg=&Gzdb$ZZ^wpskq9`gO(Ii%wEsV}m4df_`bjt+LHu;)qTJI8>OhsaZ!sTGwW&vtE@&d^AcCOZM9V}A5A!$CXoEN44C%Fz~8x9(as zb=eypy&ASj=VgI*dzH2`PhDDsANHuDGh&~(*;uYGtu)*J*Artq{`6+Gc4V~DIyzga z{o>mer}l1My)(N|<9-D)LfVwK9r0BIx2R47z|9(?$>|w zH-Gb2;hoED^y#-=0q!G|!w1a+?iffIXU)7eIIyPBUnS*815-F>1N#Z4$DT*PydUM} z=zEo^_f5c5=~bUX8K_WHX2N@?^{hWeFV|`8TiMvM5#?TG>fMJKD)?289z8m0Z=DhQ zR?e{BAl#|lSYroY2qf|2=aHb;bOin?g0l}na<9S*9LMcTmMcSkhX%>FjiP1C4f;grpEedcIwaQr~xdEQ#sIDKn z>?rz_?SP#L(j0?k{oR1M0$Q4%ds^47Upuh4u(*+< zn9qm<{I1mW3F5s=r@CLe^0f-o-bsAEYFxPnIf zqkQBqd9gEVT|PkGh8>YR#V#K5FJ0pBXFZ9sRFU!v-h$hW07EEk*TIMRt>ZTcPCI12 zY}Tg&2k$(17vWdjHxDg6*42W~(AwsWHzU@ex zo$)H;Gb&mdu;o`uQ$P86+t>)<+fn2j5L^{T*%jjZTxke4gjxj!wanW5E!Ns^p_siJ z-VwI=vQ9V(Nr9$2n5PvAO=we)h9R*n4n=v-y|E z`vCb2VNaY;4A{|e!8YB@E9hd{QDy2#Rv6*CVPd3BSU;VH!@#XD+IdbIq)FO#U=*50;j0@EeU?<=K36EjnBoRs<~`|)yn(0T=#k$zOBu&VLj|9C2HjuEB<@u9 zZR*ved1a*Lj8DEX9%T(?;Wg6YsLz+phW!CMEG;OPB^1{T_2v%cyBJE`*z`kCduTzc zS=)Q^_cfZU16#L^pJa|=neCG1H~0>8uG{vGdr^ERIvp8>F4OdI3Jv_06lp)3a| ziy`8wzz1oMPRDcKdjB#w=ImskFsI;)`1jDZp2ximjj_>C8ll5qSr+zuY_9$6g!srG zk4^rA&kbyPGk3Os>2|gLtM6L8{Uqe7xScf7W_UaWL=Gp z5NWt;zCqdU;wHFVzNluWo%<`^Lg)AvJYh+pN*wL=k(0#oOf+SPEPPP&R(0C&4u@uJFdUL6qBrPWge$o$gN2 z`!mgcU|q*|%2A=`+T;R)WkDs6FmkOn1PTfwIvL_NIld!3=|FHgCAtF|TExFZe3uJU zqQc4_tXMNvVYYZ4@({Gucs=SEG$o8eUgd0FG$~m1*H1cPmH=ETgHqt}9kBYDCPt<2 ztjB}$2*LfFf}5}y-6HtM=t!)GHv{I;5pALL*y7Zgz6GarMP5nQveVopT!D>EZ;Y%C zP(J4n;<2U+T;?Gn72p5PZCLuD+gIlHgZCokBi>MqiBQ{oVnJ#1=vq%1 zuOn_Bk8Q4u46eI1I5apt+qyY)YxT<5YIU))ytq0#usS+8x#iH)1ND))Mr$ROSU?|Z zw%B*&*>t;1cb?kNxyl*p{j`Mv6*~NmkuG$VQE=NC^IK0V23{T7q0>(2R?21zB@b-|Yc&A%Obkae!bl}EI}oos^JO(*^I#Kgo+#KmL4oMl$- zuS2W*4x}SGJVsnIuRRXD&>~)YdAsj(L<6+ZI%Ve-uOCK9{7r=MHKxutaPh-!df+N` zd+FtUS-1ZQ+kz!U4n3QCnaw0m}4p?V#m9Ex25DEMC6&6GAo561c3{HhyNqraA5N<-BP=JGcHMxGy-0qY5m_%^pu-stZ}4*G zy+&oPAQgX(l68tW6}r6ElrYlAEXV|YUWt0zks^K_jn(PMm=FEj)gSS&|33}9ZNSTI zDr7o@@c@c6gXgaJrgN{K-}>`YiJ4C9-d&Xn*0w?UPIy`%<1z1{9I;;Qv}vQ%5af3;jzkj>;=A^ zZHjWDJY!Z0+u4_xX&^oMvSKHUcIsy+BR_NmbW|L}|b zV{hBkZhY=`wdY^_wWTZH_1N5nJ2T5p>qs7nI<|3oGM1s2>jSFE1-=@-rHgD;vm=0JsR0Zy?2^9I+)h0LWxFCLqvSXXc^x3 zP|wDxW81;!n*9vQdj=)9h5F+fw0i}j4p3&Rb}HR$htg!{`MO2xA!Qot%jN@ocFH^o z79B9skxr8o#=Q#B`NekW$=eRA8S=t!mgx%q0( zU)@nzee=FMGgq(PnVer-rL7K3(T2{E*IDRwWkk!nmG7g-90MSK;Kg4;DVm7ouRY{u=CpWgHA2)K>nXz{Bc2&>Eh3^CFj zLdcCXUFVaLQ;ymZeD?5tgWC1@UT`U36{L=)-Q1**427ofBTTQ@Rg6$_H~lPY&(ams z)Cj&BvbC`Cq8oLS4MAqRo6# z9)r{cPg=yIB-A0VLLI~&A+P<`KNPH;V)?e2dg8fnZ(nrzXW1Y4y|X>)0kqhLyjaO6 zNnJLIjtn%(TQ8u;it?0P`C>dhQfbFgPP5}rItyd|gu$PVA*T;l8r9xEdUj~MIa8@T zy1Cu@?2T&uKb^c*YcE~f%QZT29qzzD|82{hU+i-LXEZ3#*tXmZ>rByZWWp{wuqTiS zcj&Y{Mjid5#~yp^KR3N6o_JyixnVt7Gv5FlSX1ctK_RQmKlQ0kMOiV`{y)=5z1s2T zXsCBM(&p&&2<~Gj8jru_G_#`#l}ZRm{SgA85aOb|klyW~M|mxwBv5dX6ense}MTP%66ZA9}m#bIZ@%SGC~<99~%(XZa(t@j$G@M7b^J>!o-)J&|J7jmd-l*LB!v;xhSN%I!Lu^!3HK#NYqB-5=U&~TDCF-jv(shm;}hvFhlf;x&@ zx9RX5)1mpTav?2u!q2IQNz+kvfby3LFs7sP+q`@YV_JGwQBo>3%g%GtL-4Uo6PTbC zxDp9|(eW^>o90%FW0UQ^_Qj>=wyoA@Dz{hWTF)+hv39QU$;u3|ovSfLlVuxZwGVrM zg@L8j-mTx;_hUDDYCINHA%FEAFB~%ODnio@Ldm=5)Z!{$Xda^ujsjCbS#6_Uy5Z1W z<#y7Xfol0}-YIX(Ymq$Op-fcR9=(eTUI_DYn+Em4`WlY|Ss&>Xuui>boz##_C~jwC zETr7H7h(PtV{~?W)8Ner?yM1ghJ?j{uAW`tX80K#^(US-NMM(>Og9g(}6JT9wY zlm$SZ`d!rT!awh!I7Uhg9{+D(55dd~(cjAH{>A+#Zp`?T5Q#^`&eZt{E$e&5C& z%M8-b&ka-Nr>as%QLZEH)4<+>XA1VRjTK4@uhN8&CSA)(TC;~sK zXm%r){EK`MPq-4h32M(npLQ>5_t_`kXE*!p)|y0vg~ zn0MOh)+>~=JLx^U?c3}g^XtX718V*7;uojhTPU$u8>b8wP}+_<9ffaz|9$X#ijJXA z2T$=GOH~EkfHa*6aH>8=;O5u7P#%`I`Ss6^unOGouVsV@cwki4(P{05Ctdd__~PIe zroVlG&H8UUjPjJVeSJLqLSOFjKO8;$Gf(x6KE}@WKf6<{fArs_uRDtjYCD*Sr;~73>y5qsDIpC0OAY-Ch*>7Sf-_ zcAefeZKo`~16Bd))U!g+kzQ^9Q)tFoApTBcBJkSP-fDmI?DDgFo?rU>R(DBDHE@oA zhR!cOy?%H7(T#^k-g0tiU}#}vXe35PgcBSaeoV6;<-Q*Jw=f0i6Pv5dDBMIjID&Hn z)Bt%I1a2LI-OW!b2kXDP_G42YaomBg^6bu4@hA+mD=_7; zQ`+7F_O!|$UhM{^AAWd|hsp$y$WL^pgqQZh&vM~2iYLp+AaC`v6Ez2}6-TPLXH`zn zZTP>FGAC^>4_Z~xkT*Lqvnb0!=(Qe1N20*TCkM~)59D2Y=)f8)p2@hi}WC8_;GTfK%!McCk<7%RF6;=16*p`WUyWLAU!ZHgR&{|84J0z%8q)d*8L&)A!Z)4OJ8rAc#?8 z2lm$+gI%!yK%&v)Gp5mabMMQ`liZi&ibi5`m^^rXYc)fzp?k)96BS05`nd<)>++b#vE(y@tv8pk(;5sCj$gefi&HBqwYs$sW^Zi+eZCUO@9ZHcj{> zPi2Hb2#K^Pa-W|Ni50|5^Qw`VDC3uUWe=_mnM_ z!}VIDR-LPLmWoaz5JmCvarj&a|}3O*h@NnIHNd ze&|Mi)0rw2{HdT)z$mB{R%)1oo8l4`y^IRK9qb#sveikH+ zo$jhseP{!HfLRT##PN26u#D45n59fL`_QyfHY)(Fx3y!DWzi16{LtLpOLxru>vEU2 zC^vefHQmBQz9;wn!LFHswHrFO@2}QoLl9F|Xh|gGG`~Qdt}=HNVZR>pqaBkG$4n7| z2Lx$oDJ$%0Z`$c70}2MuaU514kQYvIat`@&%G5ktr7WlM8PnYkh)#ck-5f_Xe!<;k zE5n=%|K{jK7!r3qLl(V&`Y3rq(X<{Wr=6q4X&>+$y4_qW+dwjRQx{dmoPO_xw$D+1Mvxx(phH(!TI7wqVmG3l+9B5T zMs0R_c5u2f(S7^UTarE`NJp|1r?{i{B7Sj0bdnS3{opz~duMo0U|XTQZuR=R;E4fs zqSL{-{1xEi{nPdZI;lNaC#EndALCndr9Q(1_rQkj(+Tn@s47%k(w9k9)wxxAU zNxIj!Mf&(1a5Sy?gBRYvPd*b^M*Mb6yZAZh0@dP( z6hSczI4-5^4uG+$h6G@Cpf&YVroisH>`r}4un-iedyt5Bg9z*eKz$k^JR!IP_Rhl& za6sTGWd(J$bV5`+C3hjWyL$8TS{)~*q>IpU5#UCekZowcxe~xy${lFjwq$k3rX$5d zdESmdGeJ`T19DEkQyZ&bG0@-+W`p8o3?k8#_>)CehD7*QM|!%W}wNr+D7`*IctHm z!FK@*I(5JcVCUL-{U*EDmOiIkEgnUN49+5L3M`Qp`r}BNc3$s!Elrdw013*5lHE)q z+v$DV6PY>sJw?X}Pz@mAGNxgXK89La^!Gq=GT1*n*4fupnNG%s7$0YS&e8S<)h6Oz zCx)9TqrX>^JRUZjr@yXN&>vWJ=5Hn%pfy=Vix_gm>a4FET<-w>O;i1e+aX%=rX+UHS0 zs~ir|d2rmn1KJ(RndN;uoTY_f)!h8Tz{p_d@q^RrPP~6l&+>En8ueQybNSb=tyO>N zv{{_r7z)#{(d^4a{Z?xGcwcr3%9z-<&`Hb_G-eE5Y{Pl=vwY8&yzFH!o3N8l@`kd( zeA)K+sW*$W6CQS)5X%rJR# zEuiTXr9e{%sHtcY4v%>60U$@%kE5*)B0vQ8ey(RWY}l~Zdw_mF4sv?N3+{S*C){_A zdy(sy0tY>70QD&>2x{&V0ObtASVyy%mW1`XHn&h2KonzsMVG_MOWpU{YK{4P0jQsC zj2G~bF7_9@E8I(ks)9_~9SdK8#tsC2%yHL(z`W(#q1{DimeT1s9l=>yBP1V!PUs3F_Y5(x}SBA~R(w0!P$vX=meIW#=YsvXd+**P}r;Us{nbt}NWS!C0B zkasl8yI5!4v{6fdVR}QmG!OT}pMbJFcjvU}6;Hid9sD-(v|%Ilmxh-N@9pjCJdwVdy7J$ZBtzHFd2Gd5KytDQ>*d1A9%J2sTr#Y~sYe8WY4LuGiTZ_8U> z|N7Uz&x8!Y6)(Q{Vl4#0gJ$mR@8gjJ?T_d2*!agvn-wg7@+W`d4_kBmxoGAeLuj9Y zFidcoIgG}-AE0YW>gJE$_wL>ndI*E)*|&t0tVxA~(n{4uvt~a+WhI)2@xC?J&LODw zbIU1&dx17jJWE6 zfRVpOpmT_GSCrEnKgw}}jz~Y+;OTTw1aqT&X+gMG`BBM({GpA4bC_dEB1i{#2vG2< z4{+KHI96%@PTozm1?KWLG%NGow`l7ZxX2gIah73z=uN|ZrU2!;jLkfrn9q&?ZFQ~g z^?;^)h-bcI>E+rEU35ZPM-Q=C4touL4bnl|Ovk1QZ+6n2`MKI$vA57acis4xR=;iR z6>H8*HrFeSyLm}0h?5r3I$B{Vx3V!-Ka|^0d`kVlul)Fry7PT=L^WUuvC_h!LkG7) zOA+hR?Hu*QAEwSFWb1UOgX?MD;g8{=G0UZSaTT6hg}|Dc$b+9;rF1N^wl>G;{_KmYl61HA7*C?p8WX|$X>6g+Hc zsLv3Bv|Ird0z@t-pjrYY6_Ba$ig9B#B+BSjV@LCIoLUE_F^)PVLq0=y1r?1{kc z5y2$5Yx)gAh^EhSsY45^SFRl&Sur%1^v|v+Fs3+~>`x}@M_F+Kt309>T9BNqDP5n- zmGYg*Qvvke;^1^GVcge8&CO$Ik|~f;U-#F(_O-K~@|36S1O$&O5T#v!C9PAHv^p#! zo#V0N0H3Da1Ek$!S^=QNhc-C3>blnfehCQDsb#~#d@Ud;UEYsrcBIn_elz?TpdOcr zJ!X10@y_j^uF?&eE@ z++%v4-jDZa9=5a&j{)G+m8OI2rlTj%V(}fmB^R<8Vef}VJGuI77|pQR3E?}w=c*QGT z@uyxa{;hkRZ5apTKz#HWD;^shz#*pQxH@27|JcVq_T{&}^{rn=J3ABL-H0$)iC~@t zNcEIXgIC($%+D4;dQ z?vksh8DY<( zwiF5_=5W<>Yl_<^S9WYZT3cvF3xl?xU)odprI)e`fItebUui;xv}tmH z)KLXKK)D{e`gj*pT)QTf+t#?-0BpO_=Vbm(J=6IvQ)WT=6brW(nW=0Xsl+3S(6{S4`{g zsV!W;qkGvqzt=gkwkv5IhedB#w@|(GX_NbO1%Uv^5A2!2ih?1KopZklKae$aIvobN zn$E&YFsuKwwD}vq^wLYiy25p~WgKX8AOw5+Dm!`9b3iax=%FQ)U-hb2?fT>=Kly>z zyyi70(SpuLD6dB#^&oVPD44ib+Y0b(39e|r_t+GKiv=UMn@&fq`vHy!t`1E4w`#Ul zyHZF42*Z}=J%rmaXgQ8nsb-l_cNxK*2PBMyhO-#TFrut7GuJqN_+)bM?xV@r-b!x% zC`{5^CN||$;O^@_I7o2PZvsrpTVRloz$aKl)_M2mCBsP*rVEbj=(!B zSk6*Ua|NJnFj+W-DWn08rCb(i!;dMm3Qxi;PaB31)ZLV=$y;y_Z)Nj)&pO=68>V)S z0)|@(HYq3wlmRk;lF{{CiEb1D?TT`%$!9>6De6!=6*L2wTjluJGOe>i-$moD~kS^}0 zZLl6TXvEQu(60T(f$I6)7mg3rS2L$>tb8mvm>bJgaNuYvG}89sMTgaO|ecSS3(esVnbr2|Oz42f{bzE!!5IL1|!5`Rs%A z-OIZ+-#K>^u;WC&c+#Xllo|7->3tOCw9@%rMOb&|wY#X1ao?j80&Pnr3O*fmD1x+A z-znRE_^1^O0&@-eqsc6+_^YoCZ2aM5zA#H~#+e*{alzDqZL8-;CubQMVWh^!=t#%+ z*Tpw`KI7!BXm~Rns&~BTMKAiVbke}f zCU_m@5~j1QX1?mX(0+ac^LxTL_RR`Ugj5$`;Zz#|N$o?SrhIWr$Em|i&2@TT!HV3f zbuebQ9ig@l;6B{Sn-kCxd@=2fGF>x$48d&_w}`K~&DFh%FU*zU8`H%+I&(4C>WQIDFrz!y>LI7)x+ znrp6MhR+iY5cA&YJ+?DCJhqiIMKqx^DRVDn889YoR~Kyeo z!&g_JTS*7RF=yXL`!{U;<~1F>9KkxXis2UH5~S}nEi&zl2v(u#NelZ*J1%s*_5d!E zcGe`EOxEKbfake&u~Bd>SI&20^2y~6RCf38ncLaJ+ay|VsWwtrT3u7v#5}>ijuSJZ zLw+yJIQM&)(#pWmxCNT6ZEubl6Xyzub~qU>Igbv-81HTubag|Q^$TRtX31(czsYxL z;hCGXrO%po?*BKnwpf;F(~f{-ge8RU#Km2l(O}>r*J5`SJ=djQ;CJIHdZY5ldZmNm zknP-e8P%NxZ0rK1Yx4`a{9sRQ?h8NYS%2}DdRLBgCXG?F^EYp(&HUNRM{j3RhaX|m z(VTl<#VT?d!!oN_G0gx*?|toSU;AF@nZq|GPr0Sv`JLa%0>#|_U1oO{aUlH>EV`AQ zK9)G37d${-di&eo9>7j8nhOw6e+-~M7a*HN;NK?5A-J4pjC^k!Z9;Iuix7H?gk<}h zA?*U@W22*WQ_hdc9~}TefoGN}Fb)WgfI|;uEFc8O0bv0?!o7085Af-CpPHQNo|&D= z16s+{^d$Qf06*K9ovk#gm6-B{BULd%e4=^Q0d=*0!QI^eIgaPMu!aEEppLokeeZi) zp>g1X3of{YI-J(#BPVoM93xg>qXpf?z32$|?nx74?a*s9x@ZG!v<NC81EkS<5}tvk zUtESf$1&;&wDk}?5KzJ)OZwAv&@@j+WxIR^99^X=#?E;jU`L&0$}u`#)%Rnkf_oj5 z>9U`8%(P(W6e!TechI8S&Ipg2pG50O>+5t3SmdP8gC?64D%Dw6pX;ku=Xxvi72*R| zb2vXvvGC4VXIJMqWyILBoe#=zcWT@;d~mIDn$>%Nh=^z640kKQKLal!KoPVAc#>Zb zw!IP(^l`L}(wl-ar|oB+yOA|IT-IqiH`^5R-#I#_ACc?iiy#h-@y_{PTrPEj{Uqu9 zzMNjiboxS#?@DXSdWLpxCcR}61kcEaNo{r^DZk@W!)Jc{V4<|UBWWCA?EK3YjqiQx z*6D-Om5yR}S4qdkemcfyF*R?NvOajm8E5cLsJ1zrg)N3pg+O>EbmnL}SJmknv`iQ88$$BL` z8bM3H!@2uxgt!k)J=cM@&oj07wRBW=Kwm6`6N#F2`%ct8om#k>_6$S2Ln8-#AHEyt zbW1G_@*_af`Yne|&0hZk?}uX;@3nVoW|B_NLJ#+tWM8P4%0)o1Yoe>8%T@VYxF)_W zj?rth4hwVhoOf!BgH3!-_*abOp7WgN+{*iQ+TQ(WX#tToZpmi3hepe8m6yu26zHRT z{={|K251lZq07#bG2I<%8G;`!U}Fcupg}I}>r%oK(4cim`gIJnj<96O2P_Luz_M_R z4$(f!Vj&gUGN0s!2p04CAM~wz<(GR_4guyTXOrA-ZJL|?i;E|3sW*y*x}7Nj;v0FN z{rG!)lf1uo*=3jAB*AFqE5MM>hu)W=wA@BP`S^ z?ftI3mp&D8raw0%c3oHJkJGISWPMy z>Dbnd1)-&#%kuzY>7fiA7?)Fr=5={-5I}dmY&$H@1hCU*MI2%id>x0@Y7x8T0eoG) zJ3Aut3-jH~U{8wWVzj@bqm1REWK_IpC%g%t1IkI|P1-?8ucIQ%mv)AS`WZXly>a8l z!@OUu2@;d0O^@b@4gvHyW*u}#K`rn$56_|@wwqmZx<{J2P=xkAzNdcMLE5tX@Edfu zb3?tB3Hd>P`VPz=Lp!9Y8ia^6CBCCuEz|zsd@U(>T|8PHyj^9Jl;m|Mg#I=Jh5ovcC_J1B-tg z4>4<&{L#t*&G7Gg-}@SR#oGov;$MMay8?}G1c5gPFdt+3);NNG3Sp=4Qm7-x+8TQZ zSY)NZt&ne^VVuc%WyOjWcOcjVFm5;3r?w8$w#v}MDKtB-?KDIj;y;kv3@4j_|`1W-3_cvqv+n_|5YSNCg_HyiFciNlth*LA|6m6(b zV3>4U43)yS>k5xiP<-=gViOrkAW(z3Ru~)#*NF zX_tn(drwv-r$@#nCYCN+zHAq5uyf^$h{b2%*AQmyb-bqnZ8mD&u~xZZP4NA)K@u;9 zcjPnfsU1g1TzKkorTw(eb?l8iCjh$A-K0mZ9pgu+i6M%_v%~JuV zKfQ;%8qsSa4d6l#jXH%KrEc?02{}JT@qHXQdkGLd*9tQ zQ*MLujhSs+`+3?jPum^TtqAl!BTXGzB2Z1MO=;&O+5k<4R4q_HW5}`hNF#ODsAC%N zPy-Y|jA0&ahn4^(j`4d;?~}hD&{z*2oc4DRzB)T0-a~=K^nQ5o?z0ZoE5(`mLILE< zbrwtWBlSY*jG>jghj|Bc&_bQ_@I!O{T4?K{oMW`-D0OIx7XV{i+;Urc+77KDc2fET zLDH%zJ3m@8^pv~jlw&7FUixyQlj1pB`tCh9O)6{BqwI@~=Q=dz;q}6G*Il<={<0X$ z9n`Od$Z{5MmPc_>o=3;H9b>jqzbSz|qVf5C(Du;6c?aFx=k=9bd2iD1$u^jtHrR2n z4Qk=Oix^_zS#(ZXl}kr-3@Ag7c7p|-$uQ1NI)E&9+I)xjW#+m&>hmXNN?q^#%;2_9 z9m(Ga%w+*$TAa=fKQjmJ z_v8AROUg1nDmkDqA*`f}I)rBO)vtc_IheBl4lvt-Kvm0iF1hj14Nl_puZlpxo=$;M z7={Nn;JMs6?`Ze81AguK?lMN(}o9As|&2t{NqpeAc*Cj!y3Gj0OOV!o6(7bZS zLlqon${n4ClAUEolTJ`$jjKNAa-4Pw)Zn`XR7|-gKrKNd*W?`Fj#Zy9wZ|eBJ$1!B zk5JntjgadJ3wI~wrU_roz7F75)$&^!{XA`T&253gFsfB(5%|I}kb(pWW53(+=!d2r zfrk46{49HbyC4B?)o@AP|e z26Qh#mmg-ZZqBs~#ka?`Kr4@<4Yar4?}poY{M!i&ONmE#Y-iAEXi*MF+u_D(nC`8^ z@2`E|ht^FU5w#C~b>MXP1bz=k;puL!TTulK%2TX&mFII;e!F|a8^7MOgca2qKbp+d z|J#`}g_mx^qOVMmcH#7&v?cT%S9_Mpq1O1YBIx{*_LtOXXHTo1N#}XXW1Sr z9JnvAfA+JV{XY?a{|DgQ1pv+g)-^yZht@s;D2{Tj!&#W45p<3z8zbED^!227J?I|+ z1kS6CarhRWQjI6TK%q<-0WKW5jL%VF8rmM$t+88#Hv-SJI$cf8R+o*9 z8>W50UX8YHXMo+Yw6krx|*Bd6B;A~0J%vzOfwUcOOMxP zb3dq_=Dc*|AdxmXWO8qmd8=d)5M|qa_wTH4|Ep>sLy~88G=W?>$ z0+dame!;H-jhfMQ1k(}`egM)4y#ncCa2AAQ!~MXBbR@qAEJ^dA8?@x@9I>+6Mm+eJ zGb7-TG1!q7m7qac)=0JR`4|kzid5>NW7=`LB zZ+S}y@y~qbGn*0me+(d8%x?Vl2{iCR?H9&_VKjwcYDf~uiik$HtV(riPk>=)D# ztgb7bn%|X@3Q>VQJuYUJ9!nypzD0m}f?$p1*viD6>7AZS`YN@2ceR%5SU{;GXh&^r ze{CN#ev1{RNX^a9vGQ511EEW_mj+sVZWf@`QERrFVS`(5y=^U>jgDtr`25?aXDeMN zj~?9E+1)!)D0j}GJ@+iQyegVBZ7$Ros*Qy?0^H11lWGO8`f4RKd8`DQ`deXa0ek9V zG$Ks+)GMmC&YOLg7BFzzrZtqdFln$ zI5{?49-i$X=njg!TDdi)KV*+ExzST7<(@pW`aoZ)YiznQ(>p&m-wS^eSgh{aq?grWtdI?6_8^{$F!~cp87nlt&7c0T*sHc z{N=N;1l5^)ehc54J_`X3pRk^9!2 zvP&|8R*v4YZK?GlZD)+j%Nw?`z9I|_%=v9ozKiN~@U0IVK5}H)iP00?#e8M{+WqGg z{_O74il_H9Dm#)~=dbq8edlAZ{`gD!R$OxQ;)~VDlO!{*!|7~$*g3HH!+zKc&kB5W zazG(__0?CGndTOOEdK8A{_aV5zyCjI=NF){E1*XSfRV$&Y8X%`1NPHAKY^Lv>1Udp zYfL>l6Ekryf^P@Hc3L25aU&I=i80639FT1jFG zF~#s7|Dk;OJ2y^b?t&Jeh+m}-fI9S z-P73hZGg9T0w2^CHFFD^UWevL`?(z!0Quv6hc$fWWo(d^%umlIE1v(9M)&fOTpf4n zXma|zb@V_lAUU@*v@l%itYFX92O)+g?0or-*mdF(ys74%`QTi)Wdi(cSI&Kz&#il$ z#;k`e%;(M1XhaIsrcVK#?4coBw(Sa!amxe{jh@#)GaqK?X9b~Nbxw?+Haz#6v3z?p zc5eK(9A0s#!ZtWtLo1J<>zeb?iQwL10Qa)p4j;9y7atd=N$>kY;)Anpwr;-nO@cY5 z_Fa72`ZtU)j_$%ljQ{tIZrQy0$XtF|>7Ab++4wJqlk(DzMs2V=SJ*t9Jnf5b%w7MX z4}HD!vdf+wGfb>7+cFM3+#K-Z&9;mK56A(vbpW7n*=3i75Mtf+7Xa$-VD9>bc)~kg zd{u)e{K1b(*%(;`fmDgxVGr2@2L1g1RL%6`tWS&y)H> zz0omN$t{_vHiqWv`ObP^j2J7p0_&Vo1X;lASW+E0w?O|Px}$UxSPNHPTO})CBnNl? zFsV%(N;aMS%Smm1E@{jhBLYY-i-Z^Tcxvad^8m^>chBS6lA4{0s6(K)?4S!JlcRuN zuhHkB10cZHIpW1eUDW_{@4<)IZGgL-0C@svP+EX_JXdQ6yi#pGDV0mf!t7lA#PaT3 zrMDx8CtNg4irk`CM0t**cQE#Ue%G=}f3ahnq4YW?d-*-fu7)maV&;J7?9NS(@TS)3 z23>l`i}uk}p0|fWe9Rsl67og{(piqK_%TI~Ys=7AKrLHudp+KbKj5afzR!c10CRz< zYTW>3gVg~?DaYXkLEEFwgL?nlku-0Bw&igh)&!0Y1=#$ci}OgwwX}QB-Hk_WUyex2 zJvH)Zn+eG1!OiyT%^pkFqM2_aZ`zq1VhD<8aK)KrOP3y8y>{&}hI;x=j2>G5$s2|{ z|L~^erEPunncF+^-7o7)KKq&9%DuE%A|G;-_i>s1$vE(Eb0B`K4|kzid5Lf7DeCjy&?svcYh0N>zUG^8Efj0o`oq*9OUhczaF{{wJ`T&3hw06T|4j?2uIlmJP zew1g9x2sJBlN6eqD3H|{+uvg$&sZ(@=NIZ-Xz4vOnA_FZ=W48*&e*Zqv|9L*ZWiKZ zJe0IzHUhbMqF@&H)7wh^0&(N3Gn2U=-gy0z_1n&`u3ocxbnM_=%ad|nt*5X5B&dsU z2Qli*bfWCovHT14;FYRi2dCmF2P_7dbJgLk3#&WA+7WCVtDw8l4EQ1qL6~LPA+c*f zTWx#WGz<#_LpR6d_1F%r6QFnQoWNpQLB3qYn}34g-wD`rgm~%N6^O_aEiG9(y`4c6 z;HAZ`+^W8zlU>E~c%6FTyN+TMg-N4nhSt39c_*~^GUj|Iytg2Z`!Uwcy`YVJn*L3n zb_h}sbxhsOcKI&DOPr$}1`ZLyO;ChliK78cNqlfp@cO5D0ddHp5KJ6q%A|^W)&l|`m z&)=9l=PzH8`#PlXZQakhAx+tqao}O&z~YbnVJkE%=&{Fv*3_DgG&Z~~#Ifi3IB@+o zK>b`a_8yK0828<)2@+G}3WcGdgdptTeggO(Vch*NATL0<=!e>A%vB~$XoTDkA^0J@qasWrhi&v}ZhSIrKguR6=3CLP@i zH+=ubtuvEjy%%11;f>={vr7&iI(XXZ)vInTl^q&j+7jv2>w^$Vfi$cK&B6dUH9Bt! z^nf04$-GmOU)4|sDgG*R=g34$&dQ^Kil zDSTaqwqGpcY&Ts@x~3ZQjoid+GTYT$-UG%YNmoasyQ4El5Y{U3)pcs9U?x6>^<)gb zM_B+B6RBuG;Cajy7d%52aFk@N32M^Xp-Aoq(O@^<6}V!7@1)*g3@G=sl2D zz&71t+JjaLkb_{Tpt@d`KgY=(GULb!@v33Pmd>;bj&u!tG&5_m-i%}`}A++USho$|5Kyz ziC1QTE-$j})N!Es%RF`EXC*(zIG}efQOe3`YIPatpxS*?jU00fWy$?of}`_@_8ww-=x%a+r39y)YjD|8N{ z9sbaIpalSL2Q^8-#A6c#+jWI@*s9vck`U-ZF->id8?mK8#zmSiz@_!ra{(r_allQj z*Jy0LfcOZ<0YMTVnS{@y#8s^woSob{H$K%Bjq2|X8k1?v`fA~Wy^ZCaeRq}`x$5N9 zVclEUi=+R?4%;VA^ebOcvwzd?M1;EgVIi}Cr$JVoWz zr-|-q#62`ww`mPItTUb8Qp7#ryX@urG#+~wbmf?1-em_AO}xtYypyBR3+Dm%E`WRs z?_&hIPm=DF6B9EZdF^XodEMKuZEXGO_mUkqk2wyLE1pLH+~;p@Y3FaI6Y~D%Y=N{9 z*)ik5so+5S!#@>;XJtNiIe^AqL;x2SuK@LhFMMGIp#Bns-){oc=W^~C@F75C41GOdz*Qz{dPRjTgx2MARbrjt0BHq$ zs-2~R-8>3+zi*$l$4Ipb03=mFL^?*84}1$iS8*zm^Rcue^od0T1Hd*(@b;(2srXtNRA zI?&Fy1DKPT+wTM@+Z_RtEe3A01;5Ph1zWpb%87f>D!|9sI?o-qm$zCB0>C-yIbQ~d zI|1)LhKKwPox0~YF~#mwOk>+SM6{ppaVKRMw_qK4HkuAV-$4i9gY2JRS>oLi;`Zt* z7QS-jc;UIpOfp{RO$L4`pZxuI-ky82&ob>?E@a!!g9GW0xzI18VFn$C_Wf zh=ieK5zQqNZ zAY!5;h}9+mf;t*iGyG`?@i2|I!BH@wi1s*d3Z{PJDS$=-g}h)#5R-GDef0FxPu~U5 zm7J19JqEt9((WZ%%*_=rr{%{@tYI`#9aqAh38$I}?lZ1g*A<=Q)6^6JEr^ zHE4(~6>3yEL+_sCTt~Jj1DXXaX~-YgzkmDS(9q#hSLe*kT(#GVx|vNdH$B_MB>R!& zD_7j7-|7l=C)rQXVTe_|$RoJN7&dimFXTuH}>D1fYA5^Vm%5PMr=n^b(!$j6Hky6rTCaXa0zHU4aiSL=*LpE;=Kmi%tU9 zmb-ZT+cM>8>KNy>dHkkao;EsKyu*@abS*`EWBmZJ;cE?qWHi88I;CUmCuwgN>DJJ} zY0w$nL%s#_oJP7n0DS^pUBx$Y<&S>!qidMfnFiOPx?JPWubRK$<2#DqxOtQi0G&zK zx_mPI#O2A;Kl8@i%^NOnbnd=9mwC4PcCzi1b6~NMIpvjQ6+Cu1;21jrLGp}ChtN%1 ziXiT|^Ugb;k3f72_g)NWI6gayNmGX+mn1C%@&^HwaX_Yo>C@#r`xU?f3+WaR_Oo;l zG|{WUJ6~FNa2_*y4e+ol>{B42%C-YljHjlwm`4droq2?IW!J7To5wLBSRJT^K|V zcl9}eHH|5*2_nj|E=$&$z>vpw0JecS_znu=c@yw8s~1Xz8rFuhcy644JIQay!o1Om z;3(+HKPOfjGPj@3gz?!0cZ1rvK+Xj9NJES(TQ|FH3K}^6q%G=NlpxI$_kDK&r_Pfb z@4D-*A~YUi-uYhW&=YM@wtJn%yOoAk8aoT#3tt4<8l4=TIWN2fUtO`!aqvDmi)!F@ zY7FH&X-AO`;|%ZH06NAL1n1cZ+BYG*UxwgZtI$NC>Vd6bo@S2w z9<-)06LYVO;CIZjhkOd=UeXc_uGAn+6@Z^@0lYy`bZm09vOreKRg(>EkfPdX%e?>r z?u9uPp}v4MVLKp}Fot`ZbRhT>fM6r_F$yrUle$J*<+VEu(&t8bp+#C3TUt-Fnd?+T zC3{`X*vM?n)ybMpX$8&QfQW0WtBGswjj4O4Cx4ixn>97-GCjO-WxJIQ4e-o13WPeQ z1>ZSWEAJHaF&p0v{Vv0*Bbl3NY)5G9(#TE`4TA+4CRbB`fIIKQ1#)6pSZRbWsg@t@ zwlFvIHqV-ui_Y(LYJSq@=rC=7zG1$Dd9?HV)1UtI9kjm+Z?uM_d7|URg?zAHk9N*9 zpL1yP2AWHJOLmNU;7KokBQ|0@Z0KliT_|Qpl4!dT4s;|eAuY6l8-5L5R z@GaODzsDoIi%*gM1Mv6x^DsLr~8D99-| z9m9M9fPD!-cOm--djLB^_ap-TI3Qwd^a|H8y$d0nBYhd6-HQU;>z;?`YOP4E#)|; zem`l`b;aX1Lzx12fcT>Guoh5<0O~N*)*SoZ+bHtsN7Srh@mW}MrqPw>?&%Llrz~@2e z*+AYJow5Dj`qsBL;e>efth3H?R)oF+@ol8(DLbqaTt`@8Xo@9UDW_BIn>=hgyn zrM$7$gIV`<+PL&P$}K$c-HmJhZ9aKkQc32zdXn-*gUN?K{^s0eK8J0=PxEG5#(|#) z2Qonad2l(aBRKFta+>kyT|7lC*buOWI(5;MaFU`=Ccr6pJJxI%u`+qm(4?-79&yh}>l*6PtS`VM*E#{For?hR z77(VLgA||z5H)Y6m>ct@ITpTe-@YfHZ62|ML49djc^iPvF*+EQDUUF{>l2WtqjI}P z6SA4sbm`H1u`Qw{9LYpV?m6=yU0B9xT&(OJ=xrLKx6Q!U2m&LW6y#L705Y;Wm%D>^ zvr_FJuyxwvo*QqxaSMFydEWD$cQbSewm}<50lMfr6m)3ZxgrCpq_hf1dI_OF3FRVxt@_ z8g@kVUAW(tYTm#5PmNdo^X}xzJ=0h`h~|5KS5kTP6O*UB^Le>j(lqzWoZZMca0)q) z0s1LqZdUXIb3i;mV=u8}WN6Q(0<4A+s?Xr`xd`J60O~UUGnYqoEVF`e)v-tbHOiQP zEXcbOn1JbZL=+=^LoHjN2MlzG3XmtC0H`yR5$*&9*Yb8Dk1*d~fBp5F0EsFqecev| zn!W=(5c~<&fHeS+8lB_ICj;*K)yWocfxThL@Xpr8sZ1QpH9R7R`zMf-8gyDnT@Wus9 ze3&}wneKtMsJlf=yd%mAaH9>zRrkGg!zb5&?`+Xy2SjHy7nzX{zOMpcz6^detRLPT zC92@c?|kPwo6kG%yuEaiX6%Sjj$ZhJc!~4S@}-koqD=}MH-!@CZ?aNG+&u7S3Hp+oRB>Y0=Qq{}m=Upnoy)50w8z58!k zAA-lh?-%_|VcI~x-SZsjjnE=QO5!TNKn4f}x9tJc7;3I;nLK@-kvZ(#sS34Gf z!sd(cHWFD5p|5H?O@V5FYJF;H?ghZZ7~%p`gjgl59(D+8JU8IU93Z%j^15-<`;lomr@ElURnp9)#lrf$)I3fyi+AXLzL(Cx8ED3L3GB2> z3x?WfB#I1+GxH!x);)?Lg=wAsu$oqAl_RUg=Na z`>2vekY7d`o#I@@?nc^wHFbQB<6>>x@U(6Mx$S=7jn6CjljubCCzt2O-to!CrJvfB ze0cX1ydr|nSslsv8=sy$@%NvZ+r>1sGC^dT40zzuvbz}vP6-DxKtCmH%?f>}96&%9 zckkX^1W?;ke7L8#@)Ox#46t8>klv=Ig^+gn)}4T<0a9E_Q;<;53+@Vg0Y)&D3|D$1 zOU&~Y&>f=+0pPG>@U>?56N%7BD`W4KhU1e(o~%cWh>G4ZD7q_s0rg@4O*M#C%qF6ebx(wLu3{-DS7ZkER`|74K)rAbq_ zX7`3X=BPQ_dgO7Pdoi|6nslsNjoI;kJ5-Ld+ZKm5=63DcwG2MZGUt519V|AQR1~o# zq)mf#Q+D_xkY9fKFqW6)Ql6SN9XfH5mMQKVc~B4cHFVlmlV93*Qr|UnygrSE;M>#@ zbMDQ|Gdn|eRvaey$(vw)AFzMUdmFcWZ6-OJ!1?ptT}kPQ9m$_w_j|cN{^j>Hx~_lw zJ@x$Lg0rU?2OeGy#4qFFEix-DO)weH;iOElsS=c_FMK6VXk)M3h9-RT6dl{Rcot|@)<^(`J z6HR>=<+@->sK(qEq*dkRm!K`p0;-`|+Sky|8eZ*M3Y;RSiQZ0wy%IYR6j!(N6;6=SEgDD7hg=sR^G?u zmpAfXA4vXauq)X!KA#L-Kc1ZJ*9B#zWwqqwubiK}=Q;{nvj%VXY|A+C2ytNXkNy!N zA*(jy!2LO(5XX6{2pHr6SHU-c%#=J^4mdp>A^x8c%r62=R&lQekn9EAj|ip!g#aix zi3r-LQ*)|-a4(?ec>oIe8kDhc%PqHT#G8B>PI5QXVVD8rIF!wkf)A%rh9+R=wL4z# z3S2_~icWC?ncm=2t#mrK2{ul>)1qJ-QY{ypE7sI{X^W$dZew*z1~ZUQ6aT7(JgFlZHsbM70kCE5%fdfU5{s@LKC#kt=0I`Em^j)k3!2$9OU zjdy-__%Be8j%&uz@3c%U6zt>h&8cm!*rtZh<3#P<)%q3~LK(j9y6a9uGrtS3`xEe~ z0~+L!Z4H|FBR$SZ^F2o+Eu>Xm@SXH(JIC#pH_EqOo}0V$%EspJ?oMty#?-V5;q#|!Ntfj@c3ymH zck<`g{C4h-64GLh&j9`3;c52x)N!Ew!#QXY_VJ!$30Qh8aL^?~o`|i6} zAl#n`$ml755rE#!?W$TkAah&+F0ca}YG+)A#+TZfL%63xJ_Q#*Xzsh;{q7ckXV55S zmIvTErY;C^*(`^Af&{nn(P6L-=;$J?Q|e;gJhZEotF?{;jxG2yBcL7AZI571UDDa6o%6-lTt+7>=AKI7Izh9!Gk;6Zut?{SN9@4QDhy5AT!SSMhb*?dpy zPfmR6_md^k_fK?YUfJxJJfteJ#2E)3E)HaX{%~4E)ifQyFWQj+&;<8B&b!z(_u47YB<+Ov@P?<% zm{LdH9N}j-kw*u(oq+Nrpk+rw@N)~Ao2Sjc)Dv3$;(O`2ZQ@)_J)G|>M;aYZ*PQRd zBZ4wK>lCc1w+mV|!N=TrvO6@PrfxidDR`*AfU^lwi%EFyTV`6PZJ?c651hB(37DVF zdl(~d&rSeYONdEK9&O@Ur!;w&YUswbkFj_1m!U_?$13^AJJ;XAu)NL{{~YCgZ}B&f zPK(5PQ)g8`%li*)OsXb(3+HZ7K&NVnC`CtE-yvE zK8f=oz^j4gege%+Z~4$JDMPT+cI|ILVA5nPNa{6RM^iryKpA2>+YZKlPXd17WY>R}*JEhT)EU5@9x2m~gpOo-=Q|c3j(pUuCd%W6RscI79n>=lc#d-4XLHb@85i7- z1x?yO#WOn&0)CjGDT8G9Y}UzhwPwq=ZY>p%Q8TjIDvt6a^*zuOuUEaD4K;8*#+^4G z0a_?kA}y%tcHZQd6}qQ92&)6u2v;WSy!P5_&thuY1Ymv#b*uH;9tlhdjV4fsV+C3g zbg1j06Sa&EhpWuxq0=Fc8_D~5?qALG+ZKa0^h6j|g1BxUKTKddhnEN^Gee5+s8h}43fC(%- z7u3OzrUM-Sm#~P)TAaF8V!l0ssd}Fe0mB%;282>Tv${4=dBNs&n7}=6rH!Ki<|aTg z#=Hdp8vtC7L({ClP8E*Dn?IIS*z>*%k$U2{`LDw-`>cVOW*Zt&aec<}!dLqJ|US3ElbB(04i&wz%^SN`EB)MlVP5$b=ug(1z zng~zsu~s|`BxFTo9C%0^XiAlblqE}?ao`u90}6dZ&OVUl_R)`ibR}BklL6&t1ENo3 z-^Sj@y*l6)tB(PAnwQm3ofGYXC?hxBbkk`7-~86CTldisa0RZ=I<2e45zWVfrob5H zb)KafcsiEtwLn}_~iz_~<+V>k6g+<2Y|)~4f8T|f^ogf+mLmXe|V`AuI#{xQoH`0n|o-%kkWyj9nbBho9eM z|Mu%%_qsil-QMV+<>^crj7UpN+Bs-HKV>HXI!~fc3eGt2U>t}azWXKsc0hjv%;ZPmfpfOaZ+pzw z%9gWpVMjq49G};3pg^4VA%J`>Z7Q67_SyU3*8s%k&C*OOKBz#PZ`{ek(C-F*ymK)?V_o4cR&tY@9W{c{*cJ{Qp1%yAf^ znc!fI(Hp7Gb+~&0vn6QSUF4m{S?nNrCK)3Z$en*KI7*AVK+0uY`#beQU={3qF2aV{ zn`3$}(vilF1c$bVyZKU$zipEDo;#bNS{DG^As2Lkz9RIUpiL(^YN-hDwtlt%c{(44 zZ0&*%!^8*BWNu7=1TCN2a|V;9$tQ* zZ|LVuZ&qK%0XdKXdiEVWt~mgp<=+4P_ZJD?;n zRtehx$ZZD5wgONqh(fj+pr?<}n-kP{X6V@fTgn%FbzIY{&3W#JNqY?7Iu76ov})C+ zNq>tm51s1(bdEf30y`S5-uVKb+IeXGJPR{B*Qv8yl*4_^`VkC38Rz2xnWo}l{ZLJrvpIpsiSmG?xI~g;mIC`5$>d{ zJLw?o`@=u{!~21EO9OX#+y>fwjrr-(VX&@Wlx;Df|MLHAeC7IurH^Ri@2;s*e~a}hWta^>jdnVa_uxV%T^mV!kQsi?EpmRQjTE? z=iY=`Gil;E>D8(QXtn(84))x}CiPr=|6J&QY&) zL*|;+z%&uOhG%Nm?p=Vc%d}4M>T-JMZNnOmbm*>uX>g9{l}^60XMa8 z7Kw2QSmU?Xuz>u+0r>q0Cqi8EiCpc!e73Rbi#w8kyJaF-Hqe*kwiJ?o{r)?W3wcqE zbWQa8<;`wn9C(B{kOBH5#Q3b*M-K2@>wdPA-`ce;0 zVqKVhnE)u;xi;v^a!mLe0L&RcaSa-~bFFLa3tTS+AeR7~F5#*M?kaIk zA9G&#AlL2c(sMNI=nQ!6IpBN3BLE!p*zGs~%q|+^81_->@1(2+fO!{b$EmZMHr>fH zP3;RickcW#9{qFN+lK{W0?Wn316eNGgm6MRg{!Z=x=5b9+BfB>)z|(#J}oZe7v`KX zaUA06uld&O|F^Vgr1JmXik=MKN&LygW4U)Jng{ld_k5%Rd_z&(=T zanFj30T~B=dJX_yp~>S2W=PjO;G7e{mM&dd{~5-BbC~pd8CzDnuD|!a?_Eat(m_D6 zwrkg}1g#eA&Ce4EW{~J{8v$)M@cN#hGM;;n{8|8NbR>3S`kn^B3z)(i+qP{J=<_(L zoqWq%-g5NUfBn}>7hZT_{gO*AF<$;pz0vMGQ^xZ64HPIp#~kwp0Nw!b>r5fjieMWa zW&Szx~YQg@5q$+#UwaI|2LlB0`Vy#%AO{hB%M``eW#2 zW=(nIIUvwOh4ZA<>T`_E-}g7B314kG9rJ$ViEdHQqCL-aKkwKvXm55@7=jSE8>e#a zce}zz^2B%8>X@AK?#3q$RFfA!c}ueH>R0BDC2wPuw!g^&$2^j+C#(CxIdETL^WZ77 zCm9Da4*Z8XAZW5Bn6Hg9?p*m~`}XZQ7J~VSWorpw{(D1Eb#6WR9`LuDJ_CSrX`Y`{ zu;odEoeaSmx*+i$@A#jT_c8md1?Yc%Rb%N7_9vga>O}J9>HnJhVYW2tWA=?_4a+!? zaUkQsBf^2O0JLgO&(ou~9}wst5lSEBmHyvfZfyCBYZ@=K8H9n=!7$r04*WuM;Qt5Z W7;#_a_$49$0000kh>2*n9nEI5=RE$&jZxEFUV?(PJ4 z_kVidz4zVse((DaZ1(Kzd}ij%%$c)$b`$tUNtOVY5*Gjf5Xilfeg^;mk5StxHYSSV zN8|2^Iw&-il6oU2B}Mnf*2>t_90~w1e|7sR@k;CM1OEnTnXeJJ!h&{A-aF~<(!4Dh z2@Q(FGI2jryE^ z{gP+P&3PTXPi)We$xjQ`NGmEYuN~ooui0Eed=|X4q-kIIKViqHzLha3=6YJtA8+IE z3Y?rlBevDn+&^^TADI{+^7Cw?xAc1U^6>#(EUP9l$jATr>d)rV=Hl^!p=+I=EnhQy z9QjOKZ}Wu~j~Z-yom?M!eaeJDd((@OCM}?eUPW^?Y#OgV>Rgzc>5e62Z}g5>KasHd za601g@bx4qr+wWD!^?-OLR|Rwd%_t)+1yu)WLWM;?+psy+^pV0kZ)?+z9!*oZ14vJ zq#3>fXzq*h*K|4`7^FXKm)x@Z2`z(v*%`~0RB$D*oSg^uU) z1mBwMC~rN&nPR<8(P3^M6wZ8acBJ0Igb!=OI|i;vIHE=O3|fvj8eSdgokOm~)r=2L zD86tuPl&tf`Z7JLf@g-%vO^_y&+;3elMbwveXLn{joh>?{6l*7rw z`Zo$7>LiS6T0rd}bWRrLmT+MwG5S9^gi-C^WKMdzKUnO{#OT#gCQ4b^Lh1N9KpY@? zaa=k&I#F9AW8rtwFaLz2j>PC;c6QdnoScr1jvS6W99Fg_oLoXeLYyFOPHt{?6bC!p z+0qW;#BK>^_?M8s^+AK952{~xaXedb@b{}KCtg+%nX!-b`+%&lxytRaR_aW2t6V(?GWzXK@x zI|9OzZ{)tv2eGgg=Mn&+{(1TN z1^K!71-SlF@o$FzhQ2X}*cn^dT8Jw`4C$0r{#5ig^&jj;hQcpVj1W6|EUJAl~5K|Kj;Cw3ICrVrOOh-pa~c z{GX-aU$}ps{V$**YRnoz>>z(D{#P0KTQM7mOBjUm${*_g$@`yj6cvS)ZB0!~Eg|O8 zR)+S!Q(aD490lSqGBpzB5-@}c7#Rq%^YMTT*?A#`yzD|CLw0wNBfdXW z{BJS;kE&Oua8zfV|B+Ov)cT{cs6cK0lls>QbJIU6gf+w#4*i|iV)TC{_TMGt?~3so z^T+rQHiSVeO`t~NoT8lnN%*%(f200{z^#n!93i$)NfVS0#AQ+C;*T;-$NaB+Vfjna zfAam`@*H7MR962#86o&rVE$#-A6);p5K~LI9mLWQ`e#f`Q8D2)5abpR;)1Y4c?2Nr zyhdCC><~VPF)AkI;x;fwIS=JBUO@vxb^`+th}}Sl zo7a$+#}H~LWc-)u|A7BP^zYIr{5u8B?SH%NgQcmRILhDui~Qdx)IdX}7UU0aqiW|L zkblztn_vCkYQ*^j`2R%wlltEXjsJ=GC-qOnze4tpY50$b{)>v5AdiJ7eduOUGjdrKB9QGJnQrbs!~eGf864geAq*zSq02 zNOkxvdL?7+M(@zzzGAWTtI%S7bP?tW5+GzfF*Uksr=i|OeHrPro9JS)J0s$V+`gC* zTH7xDHD$I}=kAiPqttniV*%XgiCh3@|MGQ`*K*&~+-=l|NvU_uNU8M@moY7~GjTYW;m_8FQpV&{R_0EiZVRo`U_?>hu0p4fp zOc7Nya4UXx^rME2TQKKbHw(zD1er$usZ&?(l*e z6*l0;?KzGp8sRw{Ku1o%^PG+x?I$hDs`Ol&PljUG`z>Vm3lzXEWq`e+zC@AGnFf!B zjj{ac6>lsezo&JUXw7xN$q;H0%|;B@>2foZdtmlgM|q6|3use_LWIMMxyf6+Y_{|J zy5R9V?W!S#B+CSH&J?F&_dmS>F_eH&O6NE z40#F{WvZp{WQ6cB6CssgktQY)?6UCnIrY1_=ugM%#Zp7A&|9&f`s+>Fx!YCW$)*En+(ZwUeJ z?~VtqFOKr7v=!QMB=kv29ka5M-K#?pi(U8Ei~`{$uwRCR)WRb=;LCf!5^Qt;FN~@Y z3xVDUU^GQT9*RE!#Gs{<{RFByha#!IT@}^Je+@bJed-?21l$0wpNA9LAbaCY7!_jl zd-o9n?%Lz|S|%YPyMiL>fB>?vDz#5fwO=RYXDWzdlH=d+RDN)lj*tKDuoO&Kgr}ZW zM2=1HB(-gbP^@+F$HwQ2d8!GQ0rRP%$?ds%fnxiekXO+mIz2yg7$oK#4U#3)LUL!6 zi=T&!-WhGuv#JJ#DFB~FbLhlOi0aQ?M-P77(aA57{em?!9>80jK1y zhon`2(Ko<395hQQ4C#)~nW8Tc*_AP=-(f}9AZPRf0Hp+QUy#wdO0zKv1VOxO1{{;$ z1KR8nfmfL}rg`P$c^5tfKjf)Kn7Spc)Hxj(pf4o3olcS~1manTpQ1A4%YX$YAr)+6 ziMp?jwG+J+A8nwgibOW4Eney50 z*{5bDePZ>BG@8hSwyoyZin^_k zK}xW)Hm|yS>!=+-6++4tOy?3epG~8=RE*x>Cnt%WU z>P4gax#NxDj&@ld$HaK1+t+xD0Mo`qwh-I><=H59tuN2}O2HEPjR2LmZy}z^MfkXc z+amgNP6n}0lW`;Mzr-DeKr?Gqs#x~kMB&Q5$gy^2ey(rzEhk;BQy=)Nh2s%`TGSd= z8DVDO??A1)HIUO{kmIlBdkW=VtDn5Tc+v4fG!_$bK+}TRa$-fA3$A%8^2R1A zOT`6PV+rLf8mB(<(da4GdD`TCJwD3W14*jYDyvG$7UAxR*Y8%476a<%ehZm z?76-{s#|zSg!q&QWhJbEpI|AR(DX%eGQ*eK6e1ppIB|qxJ^uTEATqBi7r=!NsZvoC zU@;?|nj4Q+*MPsit}UXRVj)C6c2)Tu-)zX<#}^QW*RI?cjnVeZ@-L^l;)EZq#T3C# zUxLL+1h`_81nu^T%l0UA>mTFD>Pq~)+y7=gllSSCLSFaoc6eT!p^Uay^dS2_ye`(N zCt!}@T`98f_3I>ihGz|4nC?KV*9oX`6YYe7xstU8Xm)K4AYmyyRm2C*7jV{}F9`y( zOwrz%;DQv17j}G4@thV15E$7@hlIWHALb#zcYv9CtcO6sp8j05!U}ykR}5V=pc7@1 zi4H8&c_E8XA0r#5Ukn0N-sQ?i?>t|8;40@28UXHxOE}+WN?cAvNJVQHAfk!|YxP*`OC+BGe$tT87q;Iua7^BlV~+t)w$fa`4NdI z78Ps}HKWw|s=Wd0T2c{*L7r$CHKBpv1>q2G2o8+Q=Il!pZ*)wg`(3^C2X&vY9@=WYGPAl-bOF2=#@X`jO z%sK1AEY`_?o@8#a3E+(fpmEp#X7Xh2^D0|UN|Sd_7^z>3({szyoms2yZj2G={{7tG zN#0k(n$#f+Z0LB+j0SQHJlm%_RR9mc`+lk4pxosy{gw}ItZPnp=*M0YM^XceeI{#M z8YYXOvP%O=Q;uhQ;^)on(GJhE9||tyQ^R{7OK>MkV9#!{vgM{lioVw*y>aOo05tI} zfN^XV#Jb+Skj6^Kq_P%z^Wj4qjWseqbg2FAFuLKo29{4t45DTQ1fI?U!+;|Ij$nU-BjEzH9*@&e_#EW0xmYT&MN(_p_pA=&u`Z;=+WHjiWKb0 zl87zdJY<{5E^y5x$+`VwS5|`UXTB!3^H0m+jOds>OFfP?h+V%?mj=7z#Ix7xL+As= z`cFVS7Gh!tdTAsUGS3ewGo&&{O46~Qlg81rB?Y-Mlk1&_JF0w z)mmm9pThweGP|5KHIURQ;I<}5Wp!~kJeBke)_s#;NYzz*ToEdF(z6kZW{{H>B zbo^6*TR3du4$az-5VI3Q`y1M(9IqA7lu)8+G)sesdFlHZEUSm$JCNrN--#^@ofU!C z&@Oz)B<_8$Olz{#5=bq9XG!o>!4)~6f$xZnHPIv$n9A4U5Wu;1R(1y10mS27XLu>A z)xt0lu_1JBPS3Qix6^7Ry)k3Mm4v&{N}^SxEziVzq-(CZ!n~9LBKGJvBRCSf&T1;9 z@|Z8RRK7X>I0Zj{q$CYPUsTc&@nbM}G*M?(sZsN>PUEC~ifk)+>d>{)eKvVlXg#K* z{=|QJyb7Aj8#&nB{Tkk(;&^VUVb_9r2E@`t!X7`Lk_#x0A3DPwZ*B|wXFeGF$ zB6LI3Ld7rF0bC5pj4!TU1H*^!m0cMWkP~n)f}1OtkvbT(n*;Gdw*cVoU^9?DsS1q> zR+5J+I~{?p*|X5(y@P9miBsD_EmxBCaSwij*H1tvt6rv2<_-wFFz$_aq--ZGzx{eP zaJXBuH-%wCq3e|D=I_BMOOyB7UshEsswDka;S);AZht#_2<;jE`++ecDpCEjZXSeZ zbR3adv^(|l#g4k6E-`Ol9wkC#?@?J35!D{hF&0iidM94$c0>r*A8#_cg83VrCCw^i z84CNh?7V;sZug25)|!!DTMjOsignLT)SNbY4;PAAG@0BTsr0|r-7PMAEA)dOaHc>; zQ_Cidg$CyQM0W3<(Gue0lC7T*K$mEVNc?<(c(9R!oUUHMJqu?c3aAA54yc)Z!PrP< z4+JcL2jHX0XxROEGmN5VTjPb5;1D_L6q%OySqo_kg{JE~i~B7bh$eBtyH`YDv>q;b z^nw+6QP_g4wqi%%rxA8Qh4tbKGv9{-mfD)|nwRuqn4CS|mmg-s>M7gzez>ksiynWM zH&vrC6UL{r#{a_1vkLv_d0}5MP|TSGs%0Q>7ll7#5AGKeUBngJrTbDOioS#pwSf`o zv~Bmzh&1Y`ln$Fu{p>QID;lMmaPG9ToPRc%pdk#f zuE3kFo&Kf!X(Qta8X85=LW9D+tBtf-8FdYIKp$G6ApFNtzZbvzNs9M=$3~>fJ#h)} zJ-QC_;7oswhhZ2nKSJt{lAdJ%F@!XAf5EV?;bxYNHr)!f={}(~`WK+U$=Z*F*P_8& zx)%BuvXtlHh5Ky@u7_PGQx$%LPM3LV*QwqmEj&p;Df>A7e)qHU90|bInp3}s`^@r# z7-wS-@eoha1#xKi0}<;qnlei#A`4OYs7c+AWVgj@Z+~?Rb*2<(#3_W&$?L$fqmTOC zczn+(yNJT|n;|>XdA`vnGfy5xvs~(EeQcht9FcagoQGCeg||2n?iLDVs;zZg9&d=9 zc~j^doSzdB%wpzaN;(bOiXbRbA6FUyu z?QOl@zrFK$LU8t)SxFr|VDOe~zeKLT*V8UF9@q)*7c&7>@_-R@=0j-5F|yH8>YKeI zmX|YZvzvwelj(cygD&~#OXxESrq*qmjU(+7#fCdJ<@@dI{_Vqd$8mkh$FrX>CoaA+ zqBE+`1Ir_)ymf> zboz)ETWwRLp>(;E$0==v{^yCD{$;MxWysfDc#iF^-BdZ)%XyLs3M7}T3svJ6+5m!l z0&ukQXH9)zCs42v@TMsPopZ=`eyjB4_(E3LN0I>}00_SZkQK^DXFU!n8z_i=u3=EF zQ<3{N%6#b?;UdTxo<>E7C9%&iYd!?auI0#gKiiLS1%>hyEp?~z?nAH74;)gYsF^`m z8DG1UHyFevx;s8$94>Y*_+MsikN8uGnN{pfSdLk#a~^M(+|Gt>JaIvOH@+j(kZf>Q zOEW&AQ7Ls(vm36?$3)CmLB}yQU}ssT(MlIvz4PbiDuiMru~tM~SrD$}5xxg&Q0vFm zDOJB60=MCRCBTj)Ju$RPZ@VCW6KJtSL1qEZq#Cd-hgnhtHIi-be)KIsIBWB=UU}YM zqR+cn9P%XEbM^-n4!53;7XHL+-Nyo}Q?-BIdLreg{)8w1rX4RydiRxFQ&1ld!7bDH z0tEZ`Q9NR?xPyi#kCIm0^(S>i`m(=n_@{_vHP7L%{ln%?(`E!y2rp?+CgeBFEoKF!I zNfdQJcqCgbNguXFVj&dx5P@5iHi>3r*#4z>O1<7w+Y~4bc-Awm{%8fAQB})s;@c5B z)F=#5?z!{PHK1*8`_vA{%ysn3q+b^0r)t68)x9x_Rmi6IhpU*ye!*q@VYS8wx2uLl zlDdLJX}V4?wX%YX+|h!tykAXW@7XJ2c#EIIXAU~#;y2i_=AQOc5Qy~jo$z(JO%pPH z>`D*>PLs6e-Jc|j8r}K;a9^p zNsF~+%^s`<*tlaG6PiNEg!-S;Ng?E^e!7Ae)`^t|_ zi-{BAe*sSn>gQKHG@%A+3M1woe7Zgyx!iYITa$I#{9J9A()70a`aJVWf06^6*5)Ej zWrIP?UHuKHW0-&8Sz{mKzIeC*-dT$OSpvRbwn2(dcsYg0$DXM2>7KdXD~uVUr~HM} zniUSKFNKf}rE=2CxmN_cH&;0(Ay+qidR4|5QCd9*gCfXZxEBlB&QLk)UQ#Sd&JTyu z;4p=)6$G}zc0375)b7kVGca`v`gTILb!C!BGH@Znc{m0p<3qqOaIr{SHYtdK-n^Oc zd_ljGUG7p4*){Kaq-dr~%Wob-4W?_gnM4|*n;a-_NN#mdHX>d$iPAcM6-Q4|({*km zd?)yZG5P||jY_XdxJ_l-4yU>G`9NqCIV(}(vgrm2XZ zz{<@?svSPWiaHXPBK?iruQ4YH`E}GD|6)D-8B=>fBglC2vX_OF=*brqID0dVMS}BN zFwrpkRoSDb*3VgU$AJ<{$j1*;q)b0@fW}1!=wl^Jhy?UI7MPX^&TJWpqo)Q95Hr=q6Me`RL1qf!a13?ni07#>uB;>ITm3Twa{)x&{B#l0^E2V8WT^kiq5u2hY2Y)Rx06U z!8wyfBIPD6;)7F;eyW^$6dD(Yl%$(cQ?^4sPaKJ8xi@9URo$GnzFtF<+*EH~yp7IW z5MKcEqi$@)9&=zohHMwG!^ZnVgE9p*d}e~V1zgIpn{0WXm)QUh!(c+eW9?5G$;zorCKeOindV!E+;&B(P?Cl8K4sMu(XQCv@UXdtp z6X9}ZY2P@PTZxYp{G@tXJ-$5wbuiE7s==6WESQh{R=V-8<#cyaqQrJ$UO8EO zRfP6>1*32pe--~iqx2J2qi)BS1rNgCUBoiRklYfa^9phBHm$o|mnU&B`L%aMzt6E! zMCxAR#LS3SKyOQxoA?+DWR2aZP2K!~kI_d&qGuB(gZ;rrM2*nGdC`|*`vqsn3ykYS zf*QnUcM+kxh0mVyh16?DW=&U=6nvL`mU&;L_nvnOUx^UtWwh)Tfbu(E{3+SR0E zsF~#(wItZp5t@j%T+cz77!|t0rZ4T-qcOAN^|_YTa94rbl*v+;LK4NR8V#5lo-d`5*Li3F6lI1 z@y=(vV1Mb6O=dU>tPIj{6V63oP<<=O62S?>+xG$3U{tiD2^|37KF{DwGYrp#4#|pC z2{y~ebxVyM$_`Nv9z@PGusuVIWK)j#_>roU6d`&lR0lWbz7pOK5Wzsj%>E4HaEa?d z(q(2Tm5n~e{&pWv4ornSj~EG$`c+3LG(+(Rv3(w|lz)XlnJurw;rIs4<`-IvNU;-j zvxm=ZzJMB&1AYlCkaFb?T1_*BSxC|N2WO=aJ+03k4YZbv1f$*0TbemAU*Qukn8J^GdL^P=R{1RCr}W=S zQdd9H2b0XSxsMa0eBD6qz;OBUkw;Q%CIU60Dy*=Tl8CMsfx{e!Sy zK#-1+?m6SZT{@x@$Ex-KQ`7WCS!e|8$y+`vhLt!p+*UPq?BHk_D_5CdZwPT5f{+ko zLd%DjslL;zvCzu)l=-a^Ced>*!$I<(!#FmN^A{I`w>0kO5SJ8uz|aH>hN3dzNwHli zVQLkul8o{0aFqWch+Vy?v7$5+wyBsZyF7$U!P+-w#Rg~Tt`kiW!CK^_Im&|`akU(= zf0}!CzvQPf|3}bCvD+4*w_iQ{WcMe=X~t+OA7`OJN65xSBb2sbrNJ&Fk!RWCAV{zE znfq`LSd*oxeAF7XM60S2>CFCWeKlIIKp?;2WK1hj=BQrg-o)DKc)ZG(v|$Jlji}&L zFP3H+t?9voUW2X^L2jElS#h{r#cMCTahKbNat@d| z^+P_;C8LV0+Zk>z!l!`r=XzSubK3ngVF?MVhe?YJQw&NJMEvE176!fNp(PuQyMate z*~uzd7W*7(mybz1*pu4Fo1QN8rUdaf5qZGqsZ^=PBpT1&et$Vx(M$K)(MLp^&7>Qz z$V#)SZCkrsr2cj`_-mz}&Z8+8{X!wgOiGnXW`gaNzf~1X=mMU%?Mj+Ju{S28)j$NO z%dZ3|U&s{g6WG*L;?YI7@QAZFAHnI(KjC#Ugc%qJe+hU=^-@X|5|K-MVx+|xK=KhL zj4e}v1^g!H!$&CDcN4@}5AzHl>xb>)1L9tL_tO3Hz}ENSMx&(Je;fS*R=H303tRI< zXf0tlU6cj=S~}NA{3kKA^IIJOrpi>#nJlf_2->n~R$^4;=>#269GDWwkF7lTGnO$; zalkLO?@inzrxHr{i^J8^^F`EiHch-hr9>YFS%i-GPPM6T0$D=|WBsSexXzNc+!rGJ zJ6{N5K?_%USEp+p6CUsGcEXyv;D=9Qs&8V%?J#sL{Lyb|c`QX%iC%y5LGKB=LkcuN zXscwD21BeOZ*dBw*~I# zGon3N_Lhr(2EI%~##rho_TL`z)z(wD=(yMsQcqVp=1Gk^K+Wc-cz3!?l5UPKOth(7 zZhJ5Kdkd44lOy+@_TX^p2%p^`DdP?I3)!txtlt%}TbJJZ#k^pIWl#U*x$v)BWaww| zbFx8Zzf_#hQ8eMCvuTGiCB$gBkVq@fKw|Va#FlyY9LjBdo&r7_e{Sc|Qx)XV>to_~ z9)AxuQ;7V^>5Z+h11s;@bJ;)`Q$db4UWH!33A-U*BR|>)_j(@>*m5nSgK!0d6*=Rb z_8IkDpRj`yo5)-j^(n^Qy& zLpk$Gn;9%lma|lyg=MC*wI4rZge!&qASO>WP_#!|p$OQ&NP@L7Xq0mtt#AQ<1Ymc9 z;?N0!-oO0Aq@AAh{7h>CtYdTQy!Vs1u*T@o2<(+)ErIq~0=uF0Gxrm-JO;eOj79DT zCBHvMdNakoda8Gx!PHtz^q8HKb_{38c#Be%#Hkm~B7_+uykK}DVa7VasJd?YP$H>G zehSk9lU-+=?Tup@E#A~&2zQaA4tdfPdLXEU=Z#TgJH;qhi^`opA?>%&CUd^6xtSQv zv(wD;A+>oHt&^osJWlO4{RzTu&FtfD8+tp7yaF@(K_w!4wZ)e2mu1x###w*QOSySt z$G-Q0Qi(jumLfGhZAzpN^=EMh8i3q{cxuunQgXV`6gPTl0D*Qr81IQcLP{NCAltH} zl6jt!nd=qih%H3kpcv2J8y8zQ7426pO>^O|2N#6-D8sbWafw@ftt0$du#^G}?FI0b z06wlO%G5ky2$UcFhike9b`p%HOddAoIlmk#VHpzw!Aq?mBgh?ZFM~EXWNz@;J>zg? z)XOwI=dwWSKUfyCNNlq+AS=D`Qoj25c-Zr?DPR}tlos?@&4RzAj{WV;nDEhMkd^G| z=&nFZJHc%ig}C$Zj+^oEBonW18$Kmu^ZbKW2WcFZuFlrW?W zejI7dd-3LIz~rpkO`Lk;tHjiEcsbyC8F}+pBKu}sQ{;fqA)lTz&#R^trAr0J>}Q$8 ztKAW@1*;6A_RYKgGC|~%D#s6*H|gFU(NjrS(8h&UP!mLl=4S3>%3PVGc;-;2Wa?~{ z1$&8~G|dR7^dH|>dD}X8yot~`t=gM18)Kh_jn$Tj-=5~O(aR@mKKgvjuho$xz7*tm zeJSCtTrZ#yVPVOMH9a#U49h>eh;+)2lz*mO@Z-miqH8d9kSIOzRFH#puC^5gpO|>egJ% z!GY|XAJ8VZ=w31BD69;%cd-{cOk3#tfwyu+T zW=T0f$nLYIyKGa~7@UC>M1)YB9|qwYKZ5ZHLI85}MkMK(GU9RdBrLk6ZqXW7$jg!L zw$X!e-A}pZyO{!`CPO3fmvUI&{wts zr@inm2HiE<;A)e_WKlQ?cwfS!`HAcMQmOT9{iQ@) znjz>j?%W9yeLw`>Yf3`TAk0uOram@S48uJeY>|7s7f(P3Oa-_i1wKp`!G;XR2cbXH z_w3J)7!(r-IcgW3#){nchA!R`t|t3Eq3+%l#(WVGxIb4-N3|E>KBRK{jeL)nXz8fs zExG+1ZzSfDsW!oM1lxtv(a`aJ7XItx%PXDKz={R?)~vcEn3>OTwIMMMXQ%&R6`@44 z?I?&cgzZG~YGrO~f4Hc2IjQMhnbVDP``ef6{;KOn-RM{ZD@6JD2%y6l24GWI(34z| zNt2wc+UT`$uY=0X)aA67A>sUL0haJ}oR_tP`~_ zVnLg-G@n8}`1|B34uE0`=`q$U$?~LovnESY-?zr!)X(wq)(-VW9+rHI5A6d1aRj_S%iNV%9sIdjxN#8TqNs8ee>rHpFJ;I?fQeRXn4;ja z+yRa;<)YF%{9Xui&sq5j^!qX>$f;{Q)!TIAzjR;Xa*Bbi2bnP)m0*8S7B7Bv^O)j( z1M9#TL@F1)rzWGRLo%)EDUGduOx9$hzROTj{^PYz8}U6~z`L~SYT>6rzTFdPK8;{H zy7lv%#-(na5EpkrfxMG2kISU}bpPS~8HVftEOq^N?+K)bneY#s7@r$EARi3Av_21~ zQ4yOkS zqhghgU!n3SK!|Uc)|A=Demga39;}N$&AQJdyNtz8l?1xu>~A<9HETF1wYoVqOOD(x z4m38H{FM{!&0tjiPP2(`U_eXq*+-J}mgvE^&QUvDv?QJfq$I?3Z9UYaN1voC+tBdJ`O^^{nK#&c73GFYwb)}n%g>KKEMGqO%t zkw}8~QPS)+jz4YR$+**I7R0=f;jUH{Kp;i6>r5nu|FX>0(sh?4O*d=9>E`j#7i$wv zo;6S97*G?g3%iQp&`}V27)ZZ~<;|t9*^lHQMV)Hb7QOke{)hc1M@Yqob5fk9Hhb;g zMa{{Uy9oxCpEyLAgS3CW2c zU@f(%$ZI~p@wdVkc={=Uvnm|Txyg3ts5_EG-&n1lEgYdTFXdQG&&;4I?WVPoMly~9 ziL=kH~T$1TMb3A3@hLm~KDtI@;T+cuysn)e#{ zFVq6DmiefWY)nF-Zst4_Md{M&{jF#;(t+@M!2%rp2qEtf=Og5#N;jiY!usQ}cr}jx*A2)*yJ|H7vE~ht z^S1XuH0CSlhJKejsF69Uv>BwKjGq# zP`6*CuX4e=ELQ`yvwbt2tRO7~517o6vA%-dU@7H;k#e_^x?stNSv`;+Y8EW}8QxVt~hEVsD4*D;J($i#3R4zxo0>9R0oF*TNTAYZn%^A=a z4;2zWlwM}kE0m(+BErcJ6+4Z=fcJFbUb6<&9^l?6#142pjCgRQwKxE55Nx3d=fbOf z4_otQ(sbN*O-Y#2)qE|+TmB`22yA5CzCdCTC8Y(pjM`4oGL=>_A;7Ts>Yjgtn_^s) zHa*Quv1RyhpG0pf%tc$nd1QOKe7?4HU8i*YtJ=rpyOyQHLrD^z%bvv#^FNQ+N^y7w zXXxNtP4)IpZ$B15E7#vG8+)!t_I1fwIcx>ORx3MQr!^b3`-GJ{13$`@Iq-IOg)?cX za8c7_C5p@&(LX1Cj!ji2ibzOCZXvN?xyF5gy4cAtyoAbrSi?7L_sT_kG`?RvAni#F z`s5wmlgphvMHM2N9qnp%+bd~SV9I(2(n_}NW^tJEGE|Mvl~{SLSG_-w<*kiKXrl7w zs1K3#SQcyS6GL}wOeja&ZptE1Np9^RiPGD)p0V2=8vG(+7EyKH9=obG<6u*3)=`i{ zvFlpC$)h$`ZPY}H*Qag1`$cZz!PF<=DYUz&F3*%^P2;-rch3?ZJ5AzK(LTbuce5@JGq#ee2j6-`SnMw}Iixbm z;*@fD@uBz5%EmP-TR0vwtwRww*~9*zrX$^Hbhl7YLP4kFlF)FHB)-KX*@-vjb))+o z$s_Z28-qeqM?YzDWR7$L#T@UJ4zNz|Oq&Yt&MGCYCKSirm72%rti2Ps&w{{ORrD9Wi%hE)EEXVY&ItE{o?I!On}E~T$t{D% z2NbdT>?G<9tgNhaCSFX>UB($o^h4aX%vMCtpB>G;>bV;}$~2yx>+C61(twY(4NGtw z?7TkLx1>H>Cs`kQ`{7mk73P`Ly^5Zm)1mj&x;~7kOagz@>(IT)&xm=DfnDJcO zC6YsI4K^SPDXM|4ne*?4ysQ9pTJ;ar2_N(4Jw*;jdQ9nMb8dbHK1|u|%N_PJWjIz; zJv&O8WjJ@invSDsthdj1jlT)ZK(1!#1&LjZ`$E@lrgM;GM~v5d&!Tm0@h)octRs^a zrb-0gXq%3fI1Mgkr=rU-87*qPD?5zO2z3rKH^~DFt9x*?S!BZSN z#@dIX!SCVNK`^EFotkDan09BAE8oo&%{eN%F+HR5(T57k>9iv=F0&*xXY1FLZ$BviEZH7(2oIEEba>(mk;|QIL96Zwg z>+8rBT93=l-m@9|yWFj@e99KfI1OV}=^-NPmO@)igdWI$4vn=b^xg*VDQT8L-!3EE zqaj@AKwcf6L7$Z3$@}(Avx*#R!Wswtodoxd)!|TAL6gKPAzpaW4d(rUHj#V1s27`e z#I*eO#~lY&hj!+!24@Cb8U!aVQ%^twa#f&mm-1Ni;Vwr(r#1(^zDvu3!*G91hHQC^ zGuP;hXX#i(vC1apA}VaQO5W6sT=NM9eK+U3Yim)Q!&eG>GrU8yq_hKLR`mLB(-fY+ z90fkwi;eo;Z$n2S@;b%7ly~-bNM_ zEMoFHB?Ca|n&Cd!n8HS#eAL8-VYgXPE|PDBjCs_0Ag7tBxd7bzylC4ST>;i9w)8c< z?;r^p7~@Z~@IU4GIKtc_M1OB5{qBeDfzz)g!&rG_0Dth@|NT+fk}-c^wnS~PWq!d4f(YfY?UrO z>4xr7FX#27I<4(;V=#WH*Wm_~$oLX=VJ9f%QcuL|)+cviDI(bL7Kk5gPGuZ3?fJnr_}!ihTOG!8Gnu`zv#-RE`vCi+y9nd7A(RZ5aBXo9Y( z0l9>r*5OlIlB}MDgZqp*qMi3+>_XOi1?I2SxQadAk=H+KS8xp0zF+HL%mFw z!>q~SMFWxamsK}HM^ZU7v8bY6m@b&L9KGM9jX|?&s0ctKTCnrgJ}r;YdUdD@+@uIU z8}P-HyGcg9QRG12C9frAdY-YhmgNkYGD#xK@9*v4RLZ$(asel@Cjn+QM{~D`NLVvU zR0u7w@ZZ2V)#G3tfV%qcd1Y3a8_aBY>~D#)t*Bc~6TcaAC-JUQcPq{})hQO%i@iV> zaSWX~EA=;+9=8-RUXZ&fyjzf=r5S)&?B&uXT}@PGCb+h*Xj$EE4^@Ts%=U?1y(=vf zG$v#RKd!?>=&pQTi(j=3v5i?Kmtjk0WeZM@P;zF~tb##FG%_fSASwNcSOf4e4f>wFa@REm^FawI-RRO>Uc`(_O3 z>WSr9hOhN020EP6qWPQ!8IS0^oZxciaQXd+@T^;dOo?ffFe|Y#^*H{LW)Tr43vW9P zjiqj|Q))`!%q#v8B?RXM^tkz^2~k^YT$g{rmQY<-(-L92$&8@BEj32l!bXIcz5cXu zj*w{dbI6L*W--l)?T*}_u1!xE5tDfSx`ch?mb>l9WnBAYDO!zDq8lB&yj~L#Bv~<* zRUvoDW6xpRuF1k&nVhNQbeiWVa{3T%?u)n#tZTs{#d^UhapX|z(y!DNus`rr#oyui zyjK0uK;LbUTEjj9A(VM`+}!+*;`)~WmMyIxGTw_nF3Ik`%bPC%If<&f{Jf&Xt~3Fl zMZJb@`wS1#-W?kkB2T6DDYPQsQ6CjUWXh)BX+au&roN~B$!KMdM$_q0vu*1hDv|6;s>dQjtwfy_KbJpA zuiflA50~eCcXbwf-={XKDqh@P5D|$1Uwmv;TYOSjU=E>vrXH!jfcrJ1mDS?=JE<=4sdjLoQ`(NFJUXs~5sq@U$Qe$^baO5V{7Utw)e%JP(s{ zkss|TfBsq^Q)DGhICgw zYEn@*x9!$Jq|_b%FxBVLxYk7@W_M-?W`e!B$r5%$57F+MlBg|-ONm(cb;kJ9fnYBNR61Dh8atfBD!i>Hc|s25`%4Yu)W!_cm7-Nw&7 zUfoR4Wk@yW%bMZqAbVd~0G%fLnn+O!DZHF8?X!%U%3+4W$TRN`81|U{xSQ#U4=(}a zfu;T8(;ttx$zUz#k?j4_(H8%^y;Q#90` z@4;`y&r!d4%N8ps&u3}FUP3maZav}psw!SILMQCN>>y+J)HvIes3gy?)MbFQEH+BNQz+fY>dPrLIl68$GRBpQeA!^e(>#7+c_O7)5z7(3HGtA zc#3sL+*u7}r!9MHDUoHLVIR$rpf@wNghjOO7?Zl;oj{)zbWc8#R+F)3Cua6h`anZn zic(cET58TPQ<5|C(KK!C;yS~QNO`4y|Gs5^h*+jcC55ry(R%3JZx4u zwU=ENO;F%Ry*D~s?{@VG)X$fk=_9K@D9Kekys>c&D5vPrX=)c~v>yHOVNBZ}gm4GH z0;aL>R@roo_fETw$GEI}yZcbUGcFWrxQ?Bc!9=_zn4Ut4NTDN1L#dNAG^)8W8LUv# zv+Y4-7&&sphTtGy$SE@PQgv!09CtI~7tsig)a0Xx;lfz)?>8H~Uoy!;+j@&jmTtbV zWyTcq$i|WI_{H)VHC*~jxTVS!@O+K$kE7PR+ief=X2tBiT9cr?h=6ULs`S500$9a; zPZc!9#CM1pq^cYW*jW+~+J=0?Mn-bu(r`{$WZ~2&EC5!X@BD@M9^? z@sd#CbF9}=QMD|f1&DJ!dm)koB1SPl*e zr_vl^tj9WKxjs?gnu0J+;hu!>`{BfigBy%Isit4%;GL_yiY`1Q>`jj($Tq7xdL~Uc zwfIv#?}2;D+(nF%@qVXdrolN_h3jLA&~gjfW^zqqg6-x0I#a>5gKZbQ@R>isn$P8di0 z^};i9Qm0^KgknNwl;{5k-9RG0JheSEHLX&PPk$IOVua-d`_pv_tdz?{y=DvQl%KT( zgXR12e3gzhHMBweahg`FHfHSakj%sP?`}@LbfP)$@)_o;^Jj#=^0EI3J@?qcc>n(W zKKAs}PcQ!4um9GC^ENm{tCacJl4%e2p*KVAh~N#+o;^Es{q@(g`0djI8h4BK8u|9;u zW?JgP$z1A3%SPQ&J{I9}&s3TAVZvy=W2s<3DGPS(!a4@~Djx{v{y15#lW6UI2KO=@ z+X?S#Q=zZ^^uF-We%)f@CXYG(aP;ui*Ijqr(=xTVp2czxKKNkUoY%>v!g357>_g9y zVGRYBj=)NGyTn@r@qdaCxLv-OmIOq^1O+$4yMk%S3mbk zr=_zpr^c0i*bUJ`90UL-Orhakc;SUMN&Fki&&|77_gZGa9DxRCHdN+f(MrD1$v}(t zgTQT02XDxSADSGlRO&U~e4#C4ajK}OFe_KCvlK2}@Pj#1@nRH;K#^{_LvC9GBjC^S7g!H`0?YdkSK(3PFEHLk_v9-#sG6% zCPAgbjqsS-nJ!2-Qcss}q5Zw(;TfPp>qRq1kQKTfyfmfb34#&YSh&aHq(V9JrERoi zEi_vmHkD`aLKn!Lc;bonyXkuFd7;})Q_JEPU)vZ!&XfY6jx5l*a^Ca9!3R!$pKvx{Be_(d0)9po+H4yk#LB zZ4~XRu`XSGG&VirxoPIY!=~h^amkzSi3472(agpXC(|#RGzt+$`!(wW7@%`ZEOn2J z@bVm)!I~ey98hQ74TEAgoYG9X_Eb4ZXWZGN%*EHuG&fv!p}Fmj--VxhbWup!SX>s; ze*EEwAN~_@Bzz)R0k7O^{58c0R0KmbWZK~ys<*=q&N&k+Iqh?prO zqE%VV9Kb{~2LN?ZQ?WH4IvO32c{3~q%$xa{&Rn(-9#for`ORu>tZHXa;yThTmdiG8 zgcMuzC@<#2V%J3`eo-c9PrkHu%{d=ELdRA&KN8!;e9oA z2~RtsJ&maxQJ1ZViJQOt^UyEKqS4dOJtZb9;6E(iet1Jn`e)0k`mIb`a%P8@#^5+`LO^lE~fRXM9Y0l%()Rc{f#;EGR#*Th00!51#`D^yf485c#uDx zila>_!>&I)ekhS5UtYl#lJ5T1ZJ0=AHV4nGvo zTOx0YMH7I>z?`wT2|SqV4*CS+gq}BPJy5otp}IRtZ85R{G;9)S}(cUwNJK zFB}z6pFYBzHEWvr^5vJCkALRB%)%!Zm$z@%J|^b=3Ynv?7A5HH;KMFn4rc!xta8tu zS2m;wIV4<2%x_5n^Z%3)?QH4X*8VIVJiK=8TEo^fJ|BuH3ed#SsEg$g%ydiu0_~h* zUFon532bQQhiQ#Y&OsA&_+pl&u{@;w9MZyPQqe+MI-mm<)D=IhJYKX3+oJ9{ArIj8o1W5k0zc?a%&BwDwECTI zs`I6`KJp3HPMtcM0nu*e3;+FHQ#oaFWZ0+^}>HXCv8y8@48S9 zQ#}?XKUqO|{3D{Nk2>>YGxfa5=5rTcYc9L`R`bTfrO{*i9-E-OOZ>;h{C zzh_fp?}Z68^!Ip?@lG1KHM66cb6|{^p1&%ZIZJ`1tw%yGm@{&3Nt!I35%U>9&Pvv7 zOzj9Rv_nkod{(icML-#uSLBx}NHCK!WuSnipojqT-m4$iLOb%L&Z?`cEvPa$^b?TH zMHl%a$XQ(vUy8v4%9bu~tt-FsE3FNM$@JbYU8RS5Kr02z`LRHbJR6f1G z7R;s5hgdMSWXTf42Mt;hn9~UW21eM-o9j2$-45w3zIJ5H^K4OL-#i_Zk+?S=Ve{o| zN0;=xdE}CQy0{1?-FvQ!ckuHIuVvzWW1W`8FTOWV^7Hef-k2i5^vOVs`tu9tmq%0m zT;5>%2gJO2YaV{|>pQN>PuEY=@_Xlo%XII?)$}yH`%eA5S2s>W;d!s&^`4I@$(AcS z9l~6)U;pstnai^`zg*(xBP{t-?+olIAE55tqptZ7mh$r+8Hn6K3BdeLyY==Zo31NAb7@==5q2Tw%wKus6}x?d2JJU0)wG)HijeVhbR>Wo zO#<3*8de2{Up&BsEozL;hYufaN8o;)(l0K4nzrWUhRgJhaDH(#zP|HbNfSS>zdlnQ zG){mKe(1UeeXr@eSKhf=G0&O8Yg{*+(xqi43~6SQ4*X^i!T>}Dk-mWL(x>_7<4WEL zXe=7=E*p9q%9k{i9~#!%rqrJ+VO_qt?=&sf&wH zPB_6%Npa7>$90-UV|l0XG#yP_{q;H1HJ7m7d`MTz${aeDEzIdC1?j@lW-7#*1b^hv z7&CL`OslE;4R&nWv4m;Yp`96j?kK}2S!)m0nj6o&&HV1=AB5%8tI0LhYm$=hY?({v zi0N-kpFTYR^-L8m?~ZPT4Fqm$ucbo(<|%1>nAyK2nz=Qzi@ybP*UX+Pm}k@3{5lSG z;QG7we)R(wpkXt2Oh;1zO*}6R00e@GK?>(rpMU=O7Jzh+;)0RhYZ_ej-US*BM}B$_ zo$kF$w;NZ}Q(E;I0ju{KmuG&2)iP=rt^hgUh}P?d(fEE>;*l3T;a=183+weGp3>oc z*U&TcQCG~NQ*Y_=b%Ca#G?gC0!DG@-=g1$Y?Im5fT>QzCbQ{WB(^MMtnJe^YIc>ZYM|?L8y(bR+3ddh{Ne=)9ack7iD%Bp!~qu29jmT+IYO z(geu74nMDdy0FA0UEXUx_$j?!-tkTyVchrJqn&g7t_mVeN8@C=YFNE$88gMvcN$j9 zplRrPt{O)Dc!p+pj}YVxZGL`QjvL?2!<(jt(>%CBi#LwG*Zi3W^#YZK(W_rx`p&(& zdAa_X?lq2v@jk16x@$w>weO^h&wHGk4t&F(e!{A5)|oK)WlW4qiUeoXal$ z(k`PR8Z}@pp8>3&GpB=i8!HXh{n60%hd=k)fwklMg;x@J=Q=tlX^<}+M&C2$XkuBb?VS-Lv|0b=#!(S!Ifrhq`m)>cEhzORJkEaiC4<)AFdi z5m{J2z~r6E74DHK`aE>#P^(Zdr_NW}@W<&@Y2?a0de446%#;sIuxbDNoA;UTe&HwP z_Md(+)USWP$c7CT)T;#4%{A9tV?q6nJMIWHb(e{99{{?CA#>);DVK&>i?@uv|18?k zhhz@=u=us317mXHOJi(Z0W6v4)J{YP(GJ8Fe|~f*8oOReTSv%xC2bnIb_l}Yhr^Hf zde4<-^>gp_9To&e)T~a22Eu5^CXDNN516wRhj}vj5>ow$+6~9OHx1(E!+Gh`vgMMt zmp0O%P8ir=GE_cjn%U%$O&CotA6LpiJJ3aNm@Cy4f)?^8A82s-S%|!~oQ1r)WpwjR z=kJE0j@UJViJ7mlp^4J(o8r>(S^c@H%<#)c!@2KVzjWnt`>}@Ms^#Im_8(*lmILnz?s^=Rb*|itgyj>?1A3TA=Z`ZV-G9h@=SROW{VMvHo4)#q z&~eB0kI2HjxSYvQb@$zOo9nN?ezu&z$?Er{LrYgJxViX3dvM!?wrlE4 z-{qRO+rIRkEAj-Vex%Pd3|HDHfUUAe^Hdu23Qy3|Q5ZPS0)QtD?Mv@@COp?j=dc-i zN`?9KC$2DG{ob$4aTWc{`Ins&5_uev9XpuctM0%5ej~Daw&WRrx-wp_0ieIf3~5iP z_VO{6s|3(KE%QWUr2)nT49b~tM8Kku`KYs^*4 z%2j!Se4xzqEi9Hgt>>l>4f;by^0{SM&}Pq8K!(!3@%N?=Kaq{S&+H@LFz9Ihqh`1H z=*{0Sze>f;X)`8;M7~8NUPAa?MS9GsOFoP`nr0eti7(;%qt(O`E=W^I*VBl^lyieL zm|uw?9V?6A;sS0_Ix6Pc)vH%qlM&AdJ2WR6EDe$dNJ9iL_;Ig4?Fia%T{^YFXS%xK zv$;n*#|)^NU8XqD4QOC#U|j&C=houjDRqG0@H@J)rI(XASq37x04rtAhoh|`Y-!7W z?KU5IwDdGG@lyM%mH{4dJTD7K>3`YuJ&jvRSLF#;WCscWpw6@-?G)$b4Sw`PES4-B z#Jh?Gw2 zHe6bc3OugvPv7Z#o*Q!7VHyhOeNP^A0=B3@A9GuDluYRnhp+$#pLhk#iPsvmbNB-w zA#89AT5_oe8>xu@pq1$zJ_eGh4x5uiS9@yCd`dlS>W6_3gMO@A02U_Z*6wJdv=Pdx z$Gv76$RJmk%9}QAnwc-#*%)LqAb@wI10UVC4!}p-Ma_sahMAh}HRfQu1Lp4Ui<$lA zOU&MbdqUf`Yzuek+9fW1d-fxbJaSmJ*nXGwPda7V+WDWZeEAvDr%SyA{Pp|0vf$!Y z0r2n2TyjDd!9@T^4rHm8<2TWi00kNzLY5y55>q_)j6Rv~ji&hhk}dWRsFnS z_1SyXjzxz-%VrB*x{l>`7~(-MThur}g#Du4yuEpq$}{DF2du`W%xwEYaJc1fsbx{x zIhcdp2AtHV3yumwGx^hQy<7bXk$0))p>>A5c=XXn%>@@+U;(}*wK-_ahx7I!`Wfbx*P3WpWYxS^&69sv zVt(=DY%}#euSWkE|V-!m5t{JYXHS+X5w zPKbkI*qX*SkeTz*hNg{;1`Oz9(&a~E#R23rQhorwf;{*7%sYUeXBs?Va6IEkgP#ft z!lZNBSvZ;z0APTj+Bxs|X{XY#T*;G>HRdl?wG&3;rOT@+{z^lpvNR=qH!gWl9|#I8 zEXo5nOiR31IuULNGk1l1F7#?Txy12?)%NH051!x80oogN##9$_L*$CpL^UM!(cDh^ zm0#WSPV194%OFx^Br*(ZAq(z0$~=1KuANQI#@%MyOMA@I=5_PV;#Fq+1R3bYYr`^F7gCZT zN&C^i{`Idj4iJVP&O5}#-8$&=2-LbyqjCfR`iWzYcyakFux#ZU9l zIQV&;hV%2s&->ml4R73Z&(NcTEXt%pC|&qM`+NE2K66ifLO*p3AH2Nr((As@hHq|o z($Z&*%T?PY?alk1I4;dRt5biys()*`QZ_$_zkIyO0u?LYkr&h@y!4CX`lY+~%g5_S z{ZLPuhSnM3@IwaC2e{{|{egJMCayT-75DrAWle`LILg93>1hAb^pRKOgPcKG!O{0r zZXtV^mcWnqnBS{KQ|FKxInvdpNmzcQsSaA8qw}!NX6gqfn|*utnH#@UW%>?0)=WSD zbXMGlB}_uXM8rb!m`oqeJngj89%o$?-&NOi+RC*}0y<`PX*4kb*kMx9k5Jk2Y#RlQ zjiVen{*?J11x&(dN8nx^jgQ7mgGB)ItUnFIRXYk-(&0)6!O=PN$~*k&TnGX>mWF5X z326h`3<|g>F5&4YEZn2<<49ixiQX%qb0sb&LduJ&9@;5~I{Y;}ep)`#((>U)9yt7X z=Z%Ly&f8J(;~jZw82r@X=jX5alP~vvj=azS*j_`q;E!Kg#7&omU%I)3^^1?6){mDS zEf2I)_t4B>j&S&8a&B7geY!Z_F#4=lXwf|JQ`+=B>2jZr9~zE$dY_J#hWvAlpKEw; z{=}zTT2K1kP1pNQ!%$~vsGLZ+Y}qpVp%VNEuW?+Sxd5tZ=wP34X{$!>Cbwv@_;nC$I-WuhlItCG>AhVCLT0mwH!EbpncZ* z=juA*<5-u(*V(WVjvYJJmO;zuhUXqShE5!8_SH-_H*MZ&KKL(Rmk+u8+?+IKDE&Ml zGBP22iO8bF$K-IV;j*fJnNFvA(`wDn?@931TuP^G(wHLBIAQ{d-J}6LDh)I$9V;&W zQ5q*^XcocAD9@UG+>YTSbJT6RMtD@9BM&r8el&6gQ0*}It8?$wPdfrv@}v{7vX(2_ z0399h$8qHuM|e6l&y*2M0cJrK!V#BIw;PswEDA~kJWxS{A88{%h^t|sNAt#C^Tm(+ z5eE2c8I)%#81N@8uKb{rL5hageDodhxL1F@k}vnrM|?B@^3wNuB`*9&K)FueyMB5P zO})tM8#HlY>V(aDzsKK0ItF?M!Jl<{f!b?=Db~4m4%spjX>XI@+^IOToyS zCvi#FO@n$?ZBoPQd%Y5evQaMA@t&W)2Si<`@$n-M4a>9MYk9TJGhn7K@ywO9wa*g| zKa~T#!x5G?Kz~ukJKBx*AL7s!`QdoS;8nqv_ilK?x#@AQ?O5A1Wgvb0x#y}h=~e0B zN*M2zIMf&AX2Ba}N#}?UFHSk-6!XLrPgq%7QBh&*MQL;6*3lO>BhNU=?ATCasvlo( ze*F1gn*aXe*G;D`9T`YPg#U3VLsS+vKO(31og&u9ZJhlsTifbJF>Zpb^!_~rX{7~p zizSW1J<|0hX#|txpaPC`Eu(SqnNbcv;1oDLpWUx9yJ9_|c$XtF#fu_2b^#S@HAws~{sCHy;EaKfAA{>9PTwf22!Zu3&Xu*XN5Lb*pJ> z`IRm=PIKQYf8BiGK|1I1k}#A3KDy~>7|KIAy~3Mk4MQ5#ySMDLVZtd-l_qaE;%ivK z6V5LTegL4h7xGsc@Z(<7(L70;^mwoN<3~Q!F$YiqvT~Z4<$;!qcbc}QL44OwY302- zHxK*>@5a$^dUfgKo}ap0?=@aSSEYwjDzQ}Xqfe>7H$HU0SG0OG^~%ahtF=?-esOI0 zvWVHfey4flH&2;w{_t+|*)LsYKKaG#gz=KP6p_>9WI!AhMQ5#iPkof6vsV_%Mfh5# zH~-f7+-5X%X$%ZrY^xTt%%1^sS-AD+HL+nEV=TE{%+lF!NFf z06I=4M`u9zuq}_pE0$Vcf79N3Xoo_kMYK{dm^!nzs9_>AF{M8oa|#fr~mqATsU4VI1(8cg1kK zcI~p76FgPtt#|dO-Vn~N%T$+yBV9Lb^>gF7_nJ0-{NS5k8X8X1d)2d=MFaAa812WSH5)qneu~X>VvIpSPq#oqD^?q zqG^x^ZJWisnA~N%u-$D#9OajWx`apOZTnj+H#Ttz6QrPYns9QRrl zc6>mK@>Z|;%Cj-)H55nRQwF`~>fUSlv>f_QpBsB69oiAA-O@WX)A_q$ig^!x05PV2?E-hjOAZaArH_wdbRZ(83R=_roE!0QN~Oo%0*Q#*6Y z1>?;Jzj&^Bzt-ds2$YGn5C~5OKKPZIgJ#OWV6E771TCe=!(!Jt^#ju#Y&SFM+;QgL zul}&P?fbtmFFmuwroq5otaKsK`a{Te8CcvctLdk5G%PFM)6r4t{;d|!sWhqdn9QXN zmg^HV0BINr`Gpbqn1e92vu&cG)tD`zl4;bG0qq=fvd$4_qK!C&y+P8CL zN~4tC!5;;~QleXFg??Wj{feGaafIRL+qGklp54IOZ5OIkW@ z8GuId09;wu($FBAIJ!uV(>d93M1M{<7_fQ76K2TRL1xOi6V1m@Kik}P=?~1hRqMsV z)y}3RvYnGZ6JjmlIPa%qHGO~9Qngl4ZcrDCnHZ;rATGEE%-aXthGsIY4xTizFv&gRSu9#Ce!rNDqDTbacG zfW^sJH&`Tx>`Uj!BNC0+FSDI~?qu1$7B;{9@88S$?{$0pkqJ@<5vhZ?3@*xLeabx2 z0v{x9`h?SE*uwo=U4f49+s=`Tspl6`nPX*i$o8}{Dxb!&Xwf1&zr&|cvuR|-u0!ai zW1yX5O`r_;Wpcbn!(x>!qg+;!pNW^DvD4{1_>kYyYIex;Ir0IYvOsU z19WK!9P1hv^U6(Pn!Z6AQCyzOX&^KT7KYKtFh4VTYpk#X`P~)J1(RJ%0JQ z@6+A4CGbhdgQoaXrJ9Dj;v&-RWTXM8L+A};rhN%fX6Ay@ktb%8p*tvA+Qaf!( z--f4N$BK96(+8Z?-<A*#v651SRbz!+AuApF8Qo&O z%NDHY44fy;0D!ZV0g6&6Yg71&uwdX)s*d_$P{K8x@G4~4Xm@R)-82_Z;U9I0hRT@& zD_5?xgKYY6TXOILdBjv9r^039;2Q%0rYl(Igy|h^UFEi48VLK7PC3C$|Ileh&hIn7 z{`NhxFP#s@)E&IV0zCoss9-@tfc=O6_{TraZfz^yTTRQ7MiXXxnq1q9$?_gXc;f5{ zK{O`JUHWw~Iv9=7S$O%lz+O9yHHA{(>nN{=;u*kO4wS>LP?J6&d+= zSzk1$HLZMaHGnSd#G>avy0%UXuz8h9^W=ErEOc#PD5lxJ|k6qw!I?5 zKf-ZJ6`DDRHMDjui}KR(;Z?DLFhjL8_=<9%p(F75;qWV#BX5LYA;G7Rc@=`M+9m-I zPNHOSTx;)-etd-w{216E&vM}b@|!7AH1v1gc_;mR`VrH6{}cL}Get|kdejVa$2I?B zRxe*uH=ll_EsK^O7Hel*>Z9WuZ@lq0q04^2rK+l`Eu+9$ z(qI5{y9f>e|N85%TT|@Np+ieTGe1(MdhMK!kgax3dHG@-nm}vcrlx#yfw0uA5eO|b zx@05fZmuo%SZV&4L}Fs7r4fA0AA9MsZ-W>0P4)8D~}tWa_PmS z%*Z3w0x^w9pUtLy5f6=?cznc#Eyq~o{NfUpmF*q6bTAWVjy0Fesx&{k_m5`Lvx}{k zPF?80LeeW|k(?}^zUEJV`qL-o&Yhbm^+j?e-COxA9`oh`ddEmbJ$R&oIXotWrV6;D zodf2jGH*^drO{Cq{U$luc|*WV97e5Z<{a~S(n%-ThFf~wK6i@gpbF^lp;Uz>w4^w3;pNcL8r;Xg5J8y_?ZSV|W zFtukh2xutHQg~0f>73LrS`gQ4TsA_akm*nkXxEkcJQvf!A85!IpNd(QV&@GH8K40` zoB#-burD18NLzE-&H-fr8cjXh=?86#6DLlziVMmM1EsWmUb@hTQ-_(eJ~P!kWtN+N z-1mqHhw30t+cpd21lXBR$8z!)$-{n?Q?AABfQ@VzB@5_MUOhbKyHY8YqLtPk9)oty zesekyhsS8;HIhdKji#NSJ>dNq31SD-DAFiqCPhMARGR132@2Fp`W9kecPyMwN2Ti5M z)0Vjh%N$fMxxbH&AudFRp<>ZcSro=mr!1l7SpK>$GWIGJ^jQ(k) zq|;U$APAsS{!(<%O?^@4{F+jheDVOAXn*_y*E9}LFUTkQD&SR7QDL?8rlnf?vC-0* zT5L$pc}t3nV`>q_hvTh%`;3UdR8r()dDKieYmE8em6hg~5B}XOc=$O9Uw7)9wsEEa zZ`mSR1t zV5gA+=Go9s7zO~$o%4kv8g^R|z}guBLFUhuf5oc5rsPXm5K{c8!^S$&$%j*3rqh1% zkw;rg1D;}ip}!6uJlI+i(N5tp@7j{n_Rcf}R@H0|n}J8#@98JZr=!57<0D}?7Pj~C zJ=?=F{7WweyeUCF`{8;bh#Gf-5ON7slIj z+Qn3Lm4Nw&1o)UJE(5@*T;`={7_5XWHB&o{1#rfE%#RhA4UJl9h^n0upn_2f9MR~^7Ih(-3%{&Q(x3S&& z+ugGAn+0%~+NB=qOqG~j7_D*CDZ)LMM&VX|vF<4cBTme5EQX^|;+M&(c1~wte`{OP z&Z%GcqYL7=FSR=N)-6*92()6hU$@Qa;KEC%8^-%Ccy5>jSkq8QIHMekVp}{pPPwH0 zmT6LWl8X!@E^-pvKWfh?}RTjWak$oJDT3uG-+5w9fy=)zD;?MYeH{yAat=~8KYgvFZL(azD#saU={ zOlQdk42#I~_hl_*v4Wh&NaN&38PYio5BQ^~yeB5Y+7)BA~XfY}eI zn^G{nxA;~h9iZOSF8AMOMWnbW9RtC~X+za=yel6fVO|Q?T!PRh-VFbsm-1jX!sLT% zs0^x|17-+?Tt>FdP=tafshy8O=*LnTiXN{BXl^q%gHf;~t#>+LFTb@jD z35T%7teI_`OzEY2XA{rxk9e)cQ5Nc$D;62%f7h&8Q~z1j)>PJP>rC4_@*5f07+FRe z)m88CQ+e#tz<1LVvNyf&kUnO7z{kIPGlntiKp=!%17T5CmnD7 zv;mEm%M~-buGVLO;@6I|DPJymHWZe!K?_&tQ$D2QUq0ybOGA0@_by!-atZ5AL-X_c z=i?c=Xs-;!0WYQr$&c?%a3B;`nzrZ|IHIBdfA;P?+P9;+5B$0BNka21q^Id!4WJp# zAYmjhHef@5cp!G1bQ0opobGgYI*EIAucXsRNmka%A92!7;$DsI*vsuW33!Ncj0eDo z(HM-u2nhj37KlMYAOr#-^rqgQ^X~Vl-qG)O@9*CG``zi?darKPsoJ$`*REZA*L2P= zt91H&)EF4W8~n>EpFaH1hd$KX1hOl=?a!Y7M<3N)@q*`eFM0hf-9Pz-pY4A11F!9F z|Gw|)zWv0v56QTC90Sz7mIL~v`sWua>C$Yy7tRei%iPcgy_j#SeNSz*|CO3Cy}G^C zZb0~u3df+EQ4Kq<&)ndDqIg^gadsZzY=v;x1PZ~=2ohL36O#)55YH^1)2>PCSgft1 z@}w~^E|KAd*|@%M-LTw{p5e2y(uR1XOB)3*J@D!q!sr)ip=Fp4H^-3cOXsOz?K+KG zr3BBxQiszOI+8bO2q({I5Al1Z%+O^5Igb9+6&%5t^n~F>^1-(_rR!HtJn#uqF8J~+ z96GpLH-t&O(i3mtN2SRhm%db<{Llc0i93T{UnlFgioKyTKR*xbh;(>EhON>cdg!5k zr*hbbi!nxdW9Hm*&+YAjh2E{V-ujFQQV&6oEz4lm(crw%$`yv zXO!ap8QYQNb{GtlpNk~EhwK$K+td`nMl@`T31Q!$QamnpQR+VPN~j6cD5vd&oN_gp zx&Hd=dt)~3)wz0>a-(Q$)5P27;7i)Djywx_aCp(C>)$x(6e1V~2M^-p4Po17aPW^y zlNTDuRZB@Z!?g?Hf8nP>S!`1UzGNx9TJ#Gmw*j-&}0 zbjOGIbWy#N{`#`o2HuUhxCp)4#JWk4KM%V(p$DT{g(ibN|h^ zyyY#w^qSYa=3Rck#cF+0y4DJA!y5ErKyOvb*uANkdU9PD!#tmS?K|0rRBTrn04|p- zx8v7}!Hd;nKvEVAlL0QiR67_8uezAjxCF8k{3xY>heMaNgvlR12cIzUD00uCM;Mr_ zHl=}uvyDq@ais2q@Zb%XI`P3IPsk94&cNbNV3pjEn;c*zjw8LyI;2}05Xmx&%YaryYmaOrpNq%%g+!Eg!1rN^}} z!@NrNXuP6u?5(hZjkWc@Aq{%-8|Ob+ zXDKhO)p&nyuCvVGoE;k^&RGnEFusp$qCdT0m0~fdecyRFNYfPQ9C)jFt8?$2o5>Qg zD2%|gp*W{37hJ;D{QPq}eXY@P$(!uCM*M_%d>wsFdi6NXm(D6U)-9T;(CrOR*e zBpzH8puuKBho&}P`NiC*{84G+aDY|kG+f&22*E@I&oc>{2L9FH&}aHSel@rjD;plP zeK>@d7x}^ez_#*}GRe#HFdXI&`@Ve^&$BSHCd@cVx_YGRKeWov?vV*-i$~n{GWk90 zth4&}sN0LZk$<#i!Z0dSr*tm-Ntkw~UNDoy!Nmnfo@W{2opW^Kz*|4~frpdQ01ofx z=jZ#k2R`wMPxQZUK~FvdN2$ciZ+=d9``@^^d&4ijv3t$$zPEerkG<;9DqTB6PuZEB zh4-m?zO+6#^N%X)pDx^be|l?hmW-JY_l7g*`Hk~BH-Byk-oJF7SnklRb{~*&i_y2* z4FrZ^IUPPBUuF(wP#J`T*5K0)!ox-Ih9Lv)6+P~v+NKK*VLTkI#~aTH#la?2hv&G| z*(wfs2ADjw^5Rh<36np>6`V;Iwsnq6AHuZH2BC!T6}Fhbbw8~&0lVO8aUJm zkN(gOJ2jr;mrK*M;KQRK9iC_9Cc)kIa~p4IYSZCtpIf-a;zL^UER4J>pY$QFQR$&W zXbjm_=It~xVh_~YIwmI;DP$pIR7lp9Goj}^bJBu0b+%(PV>J_Hv?pI&nZO9S;0a!7 zi6?B+#N$#n&&v%{-i{F6j~7Xs6c-w`&5>knjrTj5w$AY^xP(^er<{3m_kvg4*uCr* zZ|wfR|M54vTfh7H-5F<}e#oeU!+-SDgzRYJvux9ywfg_{diVX~>{Wiods6yl3Af=4 z`s-fzy1u=|#D7;z+))DGZ?%UBci(+?e=foR>TJwTCk19BgstGCr=?Lm-gdiLr~x+| zq@FXF#jWIBhI8@5B|0lQ^~9&$aJPe0oPeuCoEPV$w_)f6lQu|8ya%p7?ek*sHZNs| zVd@;Fk9!86!5R9OgJU_c<7k*xI{x6b35u1RN!uhmn^yfx;Xw=IvXOYU6wO0ghtEru zUn;-tpK*hGk&pwm!#l~Q8;E#AF=;2rL6SjRQ z9v^*^FuKXJ2`0TH9{AJ;FK-OSqakthw?5@UN5ar69Hv(Acuad^pnp#sk`MBH+A3lb1&+C`HtV{ZhGPM-RWnYc4#6C4iB8o7cEDXp59yG zOX`B$kJkmcpZ7DX-cer(jngi(VGMe8X7O!qZ{18hzQUhc*jnmuwG$HOPcxg>FR#TJ84!|H zAx{r^ZjFCn;fhgDJ#8q?kJG6Pxi-PD@o>=4#lR{y%bO!sTGwg1>1cigd~ z{L=&u30kA)4P(%&y=d7}!u5}9YvZgsEAKDD;RAv5onE(p89iGtgn%H8>L6t%ajn3D zhb#CZWPu?ZygCUn0gk~=USQ#funH;Z_8D$%`ob5!&~LS6ODQx5kC0c^R-6koel9SB zC^V099$|LxL*S8LIxS@9EIDg+8ulRv4`0hZKBIdU+*aT_tcjDNpG@fjji19J-Rmkl%IJUA+!9IZ$Wl0awMl`KvDM zUijlT)_dtc+x^hHKiqxKt6zMWt_6<{yTdNXm0{mk;a`8xd*1WQbw>a8jqq;zMp>cv zhla)cpJw3dqL}I1p?A(*g!9c~%yfBVF_#WZX9;zBoP3?hGo*Zk34Zy?#9*6|nLtF@ zN|zs>`h;y9uAx&VFzvhN>X$ckVAbnpzmMp={N*nnf*g_0`VN2b29HMZZZk0k{Z=mI zw3XHMZo^jK?RxWYvHJ0sapLFz@@!j}0drr*1b&nrSq$e|<}Eeuw2vFr24!Q6@gTT_ z%JIqx9YNrU-3-RQUEzaobv0bPwBU!sYk?+9z94t|?YH;(U%K-A-uflB)6PDnyY@v_ zb}#+;tGi$Sf8N@?;Kes}&pNKYLb>nhNtH5iTUfCjjCu%8V&Up#&>&sZ*nyq%7Y4+;eoKa=SDLtK<*%jt;IwYY^^Z>~~Hoq(n96^ZT7B_HG zUdQPC80`px^mH`5aHX!qheDbs-hYf_TadK>J7S@ma`xuRgSof;|$_ z@G27^{j^n_Hj(#@Hc3H`@e}#qD*WCE?Z8tqjK_2vJ>(e47O~?vmw&f{TTH)2u14uo z*4p8aX)59cgeLE zb+^3k+U{Sx`9F3){_#(DH-6XkhraO+7ES83$g2y=I}3-;!roF}ru&InaMk^|^}Qgs zt_HmrS^SyXQ$HVgZ1L*j>NLaT>_(__l#@=Ft>m5myy!(Q>ghd_4LY9SpMFjM zZ3TX47nvZJWN4gBjFOXKnzEC~;jrBH^ZIZ=U(ri+m(`x<`T6<&D`yN8IbV%DtWT?! zU+XxTHNNRd&O7_I%d-f=8(zNh_{7VnBN*)11A3G`b<^E_ER!eC%EIB-)_j}v>H(GglrG^*crvMKeEtN*>~{@Kd&)7}-V&llv@ z)u0z|)W4@@JO8kZ^?bc|=rFmz=8M_B^5b$yggR&E1#_sg2))6e12I}T1H|CS>`a4c{!b`ZcCB|u7UFf#eZq{yvo;I$u{;g0BuMAQ$F^+GWv7OpP zZnY_LGOKnh7k@iWW<}GHh&O%Bs5n-OPI57hQL-w{N^&d7`bzqmKBqSs&p7 z@eFpxQ((xkUD0>F>s{Rg^${Po#k=nGFnyxTi6@^}tMvKq<=_AO?qB`VZ*)KWY?Rp z)qh6`%Rc?X4}S22=XfXmj(UwPaBCT^+X}sIa`vn9YV1F++07ZnjQ%w>OxHQyxppap z@v|L?dGgGPY`rtqS*7W$c%2dlPh1;M+FFO`H#re5W}vl&!7_0n!1zEYx81?A=k06& z06+jqL_t*9I9?dwTfvb_vaO%9<+>5tg)VYPiILZBH#-i5#|##|#u@W|T!dWEbNb>) zb=r;xjIlHFN$wuu)hL~h$5!U;Yi!^cbgrLN)!zG4FWB3?ygnWKU+#EockK(W?9M*- z*}cxDcj#_?29}<#w7H7!sR_bybwSQ+Y(HAwpn2xa=t`WWTbGeq9kjE~#rM=|``Tj2 z->b8c1I3_za$!~Kd*wo_Y^!n|V8&_%ZdQeX)+a0BD|}1g)E@G#O>s+=3EVWp z)R}M++{=N55Bze=OhU(Ig~1EDK;LKeNuSYkLfh_)$C1o4W84^F53;yh?YO`4$}4;Q z>RcW!c7(@g{J!9_^SbL_dUf|l-Gki&_dQsj=RT#s9QUO!eX0NIoPIGm;Cy7JCLBlC zD*Zq$K!4d#dKku&RA{d2G=Y@G@^T{?RElXHtK9AM-E5wU~c;a4=K3}x>@jL+Oh=SQaB^m zX8v(Yl?mLaaHV`nox(|Rq|7KfMx}vYZkbVdwo)2iTbY~G;SG5(>358{z3qOmr}2ob zU!bu7H!{f9aV{&(=zkG8D&w#u3t^y-*nig5?3(f@tTXr5n}6ZVuL zKg!BA7r$(&@Ge0(n}`w*(}kPO5kNQfg^O*sYZn;bt;Y{P4@v+D+qOISzApaoTfym9 z%8G(mN-idC?=)nk#bNwyyV-Cc{jcxIKo%>~?MPbWWaT~^3N{B;V}x^;%C`Gz9elp? z?yG#>b7$032i$X|UUpw~es{xPySn@3cfGs2@9s~P&Z)_0{X;|UY*}o&%f;6?*;&SZ zZ{d3WU3cB}>O!;M$7WVb>vGDksaCWFQG)tZG49yfviPTFN0@*)&WtGOPk;K;J);?O zLT*+@$Xf-ooCa26%j=ieF7I}AfAHVlTR*8<6WapQH@y1ca1q-AR3DZxpJU`}_5Odt zS09^sdOJB4%rIOtgI;F}JN#~Jy?B4-yWjop4_1eqQ?r?UbvC|(;pSX~vt@xv&d!CK z-I!}v1jtO=R@!21GE=mTVXgUE!*TUGQ*@ClDP=BVzX zt9N%VxTb!w?ce`l_mwYy_0T<+^oM=|tFIXL!m+dB{VM&pe(Sf^e3iZ?2E7_QR|b85 zg*$2s`L4R~aZL&8o-%H}w9^Z+Z4}!}mtA&Q{{aCV=T;-8Z+55i8FOy2ZB=mi;ZmUA z@m&mdv-4yn^y5zqx4ylT7|OGwrv%@thD``v7A052m0Um7njDs+qtY?pgd&g zH)H#zNi)9K@@CM(x0T?>W5yURM%`|)wAQgbyDmDrd)`a0sLOGm>OS&;kM(_`-nf*3 zOWXyyT8zy(XRlY|)_j$|CI-EJ1ir7QUbz3>YVcKcA;Gr$(P4twsZYFmC(z{r=Mfmw zGA<0do%WB*Gh20h1Z~x-kyT`v#Uz|JYnf(yjtkkO?`&D|`vgiNmum0+quF}`U zpx0J8+wJ(*9HYl};@JSoz>NB|g z?MoAzOnAn@9!cqVhIiy9E7`^PxLJ6k4HT0}UzEv4qaDvPUN;(TTZtY9J;yKFW&B$~ zx)|$5H5ob59UZ_vFzVTMUnx(FJ#r0~o#Bsv{NvA<9Dup#s@>hq-*;8_%kTL>_xT6D zFm{}xO&`(SMdO^ltexkq(${2lwk8tthBv&S=lSbj|N2`PZ>vzkiK|efq^FC$QAqsn=^gUjOmNve5 zIlVC{$7B38p(Epb_|AB_?e1O;IZ67)Y{~4Y(tdWsO4uSvd^J2#7Qg4`=lcnQg=Hqz z$vb1$Y2EW~yRsU$zx(6&eWW|ENS$!mU9Mf$ou$wB)djid*C%0LUxg3UvGdGtywBXA zm!R$_#_X;0gmdcb{3i)#{W8r?uL_ub`UD>X&xqM-CfGV_wH-Bk(OSBOC_#c}0%LGW z8|4@&cL-ega1myE@E*=3gDWx-!*@8u=6upF_bbSTI5$p4)}w`JnkBzCQd`%9zo`=+ z=m4%A`()m>yGz3E8R?57ooCulPm;}SyN8b}3Go;{JH#$#xBNX&zruF(u}628Tys(P zgD2nE{kMPl&hBepdF-%71$bWH(DQa#{p9!MmtWrBelNrRkI_{Iedeq5nH%(KM_)%Z z_$O<&a%?qn&(&97J@?zc{oDN(M_yB7#I4?KS8O$*C3IHj;~c>>i2bshi4Eaug=$>6 zBP~5E7yQ~v{LwC}f=u|dZ=Bmo?bgP{+B%L0TQOa~(tBhe7vr>(YQ}=U#kvckK^e+5O&Qf7(6xz!&>-bQ1yf>Jx_C{fGCz z|NY(j-uJ%l#V>xbpL^X|H0~?if61@>%C9&}KQQa}(r0SWtFbj+=l0gi`=?d-x15g` zGs!!IsL*LzkZVSEpK^C zAAj|$U){~m&-aTsyDr{QFWr^1^qIc4HB*DW@B=Iw_Lu8i;gk}_y(Oq~44ikYZ6*15 zijSzg^{sF1zuMyr9TPDsTTp~LK7zg(LhZ=wYB`q~MK?umn+8A3#G zx|JLSPCi!ZjEz~lwWwp(ZP@7e@px#^(Jb9(N*z-&9+OP`HhNoEOCO$0bKAW)+%;L6 zFGK8TBdc_i1%BtzJG%=nJHNaAysNu6-TAxSm%sE#_ti(g+P(L^@9k}u&vf5@`|Um? z(;p?%`wP3xJInsrdsVf2reBYn*&%%~ym&O%Pc+OS*Z(hjJtASu6Ue|*oY2|2A*~kJn^BS4vcLcv+rAO zxn;{4t7-L(ezrnq(A)l>7XJ0Zqb&?N8DFU^x8>k#pI6&1xQx54#PikiWESPqXAHW_ zvFS%4z2T-i9m1$@@8TVtOQ34f|&Dl`96VY^-8EQJgePN1|Fj_ zIA+DP<={1=Hd7nt2#nRa&eu+ZciTOa15s@Hf2+A1$xNeN)0Tbs_-%tejow)t2OiUH z(QDy-3=JLVt8u$`?_M0y5s-^F;fqO*xU}WCp-iW|%WU{;)or3+@oB~Wm9IR~oq74m z-8uK2-hJcYC%W(ZpTDnPtf|{#g9{FE>2!Zh(2gp-Wrh1gfA9x?aBWQh{?upCeK{4} zG~G-LdNHbKpWCzW^Kt*UU7a&vF2C8dq$X%GS+4{6t;H)ZN*Dx>@n0C1w3Xv zZh`Y&55RDP03&q}Ci3GtYnsek3>SKIG6U^G9D1Y;9as)J^Y^cyr*BGTU44%U2)YF-9w-JO7}bOeP8#; zY4>;E{??O~zq9oG!SA}a_{G)9-my{DpZm(j9aWPLXX&rYw^@c|R{J~?gPzs-OJ4Gl zzf+goF8$iqzGmyaKP1FFx48)?*k&pC>5RAzH z??Roe4QU1g2VV@laOl)MZKqBH(*%UT=u~N~^DJHaOLk%dz?am7Q%IFW*;`HiT%zk_ptMsXBk!nD-V{T7{M;DWR z5~IuQ>={x_C5#y8r|U2eLp50AJqzPJ$GA&punDsF1qr+rd`%X5e75LwJ5h&#wSwp2 zkC8W6IP}0Tj8DA@TUwGfX{fBhXHcqh)Zmj&XxtM(uR*(-Iwz%VGs2~>3{3sCRh+iy zcXF~3-L^cgeXlT5^aV#g^a1&|0HP~w|JFA>)}F8pQe(!y5MS(WWnoA^(5sQ#Oqkgr zwg#LKuZMEYsTagQQ483os*hSm9cV~Cf=_hu(FF(IHacp*1SbLi8i&X*Z%Mq0zu32DdhIYKU99_H(ei!Z*oSBh}yG)A6hEEj&FwO5!7 zyE43$ya7Uy^6>G5r1j_;=Z5sPaBvU;b&3z2vL+?A+r28G)6u^e&LNH?;Ti7?(DZ}& zR&v@!4knqX;KjCl%(nN}o5%W>E+7+aU!zO9yGHI9U3Jw}vt`6OV%OGD4nO!9>^wWC zW}q$b7;wkAc5|iij5*tZe_$=1+(TdoEdH|SQm^p{2iCOtc7M-rez1GhUwTD%-0{z~fpzg;W!e^IvUYgK1~%#CjF zC?+hCHVcCu3-~`R7~naKqOdU6jOW%{Z|%v_0cJuNjag~@IGTs~Ljw1Z>!2oSooB^@tJS|4ftppDPDPD{IT@Y-s}12aIh zY`bT2Abi80^n*c{^k>m#;nPcdLS>+-m4)aW6$1*cL`Sbhda_6L0aa z2G6w1PK(DYr3+u^1_njEb)KE&dLxM5priE5dehv}xKw=DrWRg1_>A*BgHcXf=~OFg z-r|knrrRyx}Jf@-6T4lAMVo9BfN60Q?GOe-#g?FJn%qQA499(Loc|>J7@mc z-DR)1sQdZfdwciyzwmH($rTqD4vVoC%hPeV7VO+y*_pkym^``O=6YR0yz#EP?&=r7 zPeZRRHdTXOOy60|*jGmT`kM9JUP8yX_cv-7^!mU|e-4DXW}u9!v+u<^d9mhUeCyz8 zJ4ZevkC|p=fd>;qZ(tAzlMORp&+<4kH-m=Hik_e_`10V^Ed`iW2}WAm#=wLh zCKH=&V5YsZ4)H36F9Utnb;2K6S!rF9lm|m`lSeYt%E(IVomRP)eso1!8doa7L4a1y$mHA)@5|k1KKVfRoGULWaP2?b9tDR`J#0s{%htO|!s{#fjrHDo7Qij|isMr? z=;&UcpaJ&96ZJ^`sqbF zmi`mxW2o5(>GG8!ciL+~WfAC7ppebTY8woG(b?`6(7np4D>^lF4CzYxs1U63c6`<6 zjuzu?qH*jA&+2wxaY1)UcTx9|_ut)p_bYEZsGG*vbhyw1Ptof`Gy96pTi*TdcYjZP zjOHChZ@&;8MaOc}rlv)TsG@srZ{0vYyNLM9R=wr=r7Na;r`#&n>_p=jOC6QQ3TNd; z;nwM+W^054T@1ACmXwWvL>MEG+QGZ%=iNme4n{db&cK^7!WZGRm1C<24Fr@>t2cw9 zHC$jgVe6CDXD;z4ZCC^ttf^Ul$QMj=`vZE6NR zud0>6{oOL!$JbeP|Ed~B>r@xiuDRx#UU3mbX$+f&wnDN5y;IE|Rd0l4R7Kz;gyL;^ z!o+JE0b|@5aKcNV8Ev7JzP1|xTzw9(?`VR{@W<%4ae0{-5DK24aYH)L&m}}t`<(PX zae_Z>8z%st2?&};DYuzaw#G=cO<$%zS5y70`l^)~@mbZgnznDHviQqz(<8=y%X8zv z3cd7ge^h9J6oWS8LHa2noQV&^^s$i6fHNU|<(baPs+!S`k(M5V4ln%_eHDFXrOQ~; zYmAzFZ6o(BUFsitI(3v&7Y|;YaHGqDY#I)3?asXg_rJvbeCipyPVX+h?Sk%2Z+?IG zP@SWnwd>4o&r^qAWNc{&op?}oz>l`D6@Rg|^LN#*^_Qv*1+x0faZ@qq3&iZH*8xs0 zf%_k_I>%@o=O(w%idR}zq|!WZG>7@)93hX99KtB4O$3xsx$Gt$mvRQe@BZ%Z_V1n> zkhYxK!6M%!4+Du$o$yEb6JB)*)s^R@87vuC!VDVeacw)(50i$$vD~n&b2(-4pylOq z%5G#>V?n$0E8ee!KPxS_k@>P!Xv=t-v_0TsR;dHsr|$W)?wT8y ze(OM6;VNFu6|H-!ACIfIzJ9Eb{Hr&<@r`Wp=$XqH+D0W$#h@2rdqjJS;2$X>&$K!( zMjVZ)1d2g-{y-=+iUBiIk?(n0%pcXjX{RkltIp>PjMNJt7V_pE`|k-q@!PjCB)* z#69!s11HS*k3MMW4*rDEUx68hp(Eiif6`~=)rD3eKD2zF6wf#~{B+sQFN4yx{k^Ma z&2{HrdT#fEI!XWNd++I9^}1JdJLo#Dt%f8 zy`RPvL4SQga1Q$s7ECsi6vjB2P3ich8b6N78#P^f3^2k)sI+<5#s}&(2&;Dk3G6Um z+me>SlxJb$;P8+mbiDe6_#6e0fh{eA-+*_HFOOFayb#U|2m_fj$knS|=#J8nr!PJ8 z@|CA(JS(FO9Gt=XsQqpGgNAxwJj-c@BT_Jj~DYdWGmi8;|#R(x!#}^`dW7 zy+d9OVV24t!ms7?D1Nr`*2cl6FH$byVl*3bagooAL+Ke`a2bQfB4-?OnW!rxpIk7` z#ts}k-LTPY@whT^T;+YKSA8ldiql6NV!U?Q&KJ>PA7-*i+5Q8s`U`t1{0hqYSK;qIl z-w%)$T*@dP2e&*fWdkcse#--CQDWjtIXFkTap{4T&kyUCuMK!CgU4G~h2RF{GG_S>n&Y^45)Pd*ZHuXhrm6J!-5O!bYkS%7~tsHn@eY zi!2D^<%^>mtxLHUXB%It+*;+M39sIW<9H>W}GsttNw&S1Rv7c>8w z^I+TU)%c?cpmSi`>o?qR!y#d3&}|oOMMt0v44z==yjJjaq>B|ovpjHZ{y3gY0+X^) zDtTTigd074>KTS`BuzXDL73;XTm91WETq(=ixXm=a^s~5qd4Vx$2K^mr#>IlNV*Ws z9Ngk2iGlT;34=8K!MDz&Cq`fUz`-$uqeQ{BJP?--e&|}bDB&SY=wv)XCqA@ghh-Lf zMvJzLa_Ngvd5fi?krM`oa7bhF7sC}i+N;0d2!45Z#6-T%o4y5~)BjvhK0^sCj(gyeqBOvV_uaeCN^xh8TQ8jhQCHCnR^~U^)G$ERNd&)f923ZMmsRz$zlvr(w7sW-9%kzdvF|m((#R_tXhYT@Dv;`jc@S<2YT^@3;#T) zELz0zG-3FwY~T_GKFKo^Vd3jFT)GMC)TRiS1`HER|&M24` z{z!=96^|!&Fv!m|oPHt0CQ(FI5D^Y~nqQF!Q zVB~WqIst8)5`-W{`J@2`nlxV-gPQAjPlNlPd%@fL@8>oXY17K3Vg z(V&tJPT0m%RvP@CQ z^psUUn3Xtq+j>@lqb(EO_;vzX(P?5au8y>;#UVZ}J$)B=aPcXpzY~|2XK84O4A>!% zhql0pr;em6r!8R9x6&dT!qzJnxP;Q;Qw|PJI){e1#o}!qc;%%9FFGT0!6(!%x|Pg$ zO_)wutZ&+~TQ!bv`pEbt4{VLJ^vP=54HrFr(M1<^_kZU8?xKt5yVK7;t-I(Y=XY%HA04}G;e<@8g!eS1n~$IszrVcI_G(Q3EVBU`X<5sJ{cjTsOIPA4-Fo|#%shhnY`Lgns#{u%tS^TTj$v% z$9b0yT&?nMaZfWoq#N#bKqQ_p`E5Dz_$XY@mmX$}&Cvn;oC2S%XnSdj-O@b#dD=nAu!w^1w75=wI za|pYV=V2S$K1m)08ke*@4@3EA<`TB?R>s6Rp*C`DsLgN$P98ZDhK|%Hz4hc!UgR-( z(!_;{_Z8P4&!JhEGN~_g1YSBlW7ou4dw!5A`A2GqcMST%w@{|e27LF1lKVW5KKixp zw6jj_&bj!k?kjhFvH!r#bFaFzPSk7sE@sh-Ds<9cMXPQ1y)_{_u3l&MPWn&1_{A@# zw6}=tFT>@%=)9^%I5AiQ4A2N^;n*_HfHdeRXj_gtEQ3`0 ztupJgxZN$c+_I)^Zs}+%Mq6Cs38ja2aX8}j9j~ozn7H)7rfxX!fQ#`Z3*vaCt|-AM zvcQA$dL91xsDpaAmR9w|wQ*_Vp3ympYwHPo+peUw;ixige&X|&C7$|*GqpPhudE>UfmZTeCXi#Sj3q3eN(Dee~KIXwHWp*Y_{G1N+J5GTBRRUax3Vl6|K;V zkZRi;1HQAi<6h}(yj;IbLa5a_<%?JXDGkh4-fq{~8Po=5-*F2a!dSVy0w&w-E9k3{ zMcR4-pq{uWf;`Jh86g2B{0YUiBLhM@xOjMiQ^;$diJCCa>WPsSk8kM^4=v;3p;3Nl z5+CK%F{xV)>=5T_$_5u4R)Hoe{qA767i-(S3C_ia|6>fH?O&L$d zm(_aP&S|s{zWMq2?t>rvV0ZOZS9iPS&*?7i&g(w&@ds*QTNiJ~T#Qrh=wpuV_SbKx zKlS8O-7(KPraSqRlN}}QL}$su4R3kNTdsP|YhH6t!S=6%FPGjGX_C7ZZsL_Oe?`qK zE-ryHqu5E%7;ZO`pa1;l_lzV|gcfrNphijCN=}=!T^lplq_xhs>}`u>lCvBh3~{Bb zP z*urksIGzqCfSa`~n~CmLhT8a~Z5YaS`#i)E{6ga?1}Ev@#e+jgF6?yDDef*X?$R@c z9nnb3j_3XN-+$=0G1@V!F3<59-@;M#N^9xpffoL>^tS06DUNn+#TWdcZ|R+B(GCxN zq)&G4JgR&6k%zmp&p)fXv^%H!%pZTQd-91VyAw`&=I_*_3r&A^&;8w7e&u(%M?d%V z?u^~1cCY-Amv!e{@N7HWd&)i>U9a4|w)lBZeG1kBd9rQ9rUO=F&|mVBm-HyAaX+>o zoJH?Jg3T7K#N9~NaLi@o!D$e%VPJaT4f2PM)Am_7?bj!}FTAkdcE5DjbG!K$p4YwW{U7PR z{@6FVlTWRi?#2H&@H>yH3$UMfu>0+wetY-RZ~Cq7c{Ks}YWH~eumAmTb^rO-?&vPQ za(90@u4w*&D)%pb;wOG$vWqyWWFcI(LBFGJ;8h3rKa*O7zINgA!J*4=ZgTJ5y}K8d z2rPqcrbIBL3AdWlCI+1#rF}ZmKygc0o-aDJ9UV9WCvjzXaPcwNLTPvihHD2VA;V{N zwgVIH_>@yNabfG_wJx+RmDc7@D~>Mh)}GKiE!=B`2i>E1nD*$mjqWm*H#(i0iM~-X z(b8{h<9mFYCr*Co8+wI~sSlI%Tg)-UVAKIFKKer#eZuhB+LsoYR4%%OJ|Uwq`qJao z5tlkV2aott?F2I|m%40W=LjQd)2ag=eRBQ<=Xdu%@R@GU*-v%z*PP$I@%?Y=zWk*x zcNboKe&2re;sf3F&98r}yYKyf)}4FV+1)KC?e6C4yYHu+c2alR{om;R(@*`^?kE54 z-`R2OalMVaslG;cWqkqg-YUE7ZTDpx^f$cW4gHn+>d@ELmvc_^Ww@&NXhgfbgo(D6 z35N!0IDzqXIE|YHbEnx+E5)U4jJDkgZI07k+wCq0I`6_4yaJO!Wnd{Q%peP|+CfD~ zW2}Yp;15rQ%5lOr-qIvLWyD)IF1>|Wk2s!fRyU5PQK0%VeYH{AIHYGNKO2S4tx5;} zllk<+I2qD@`qs~><~|0w8oHE+lf30wm^y^|d8nJ{qhBowNfj({yOYV;9*@J@vHikw+g{xES~CGU#7<#tru!_511H_{!t`x%r7F zpV*x?e@gez-SsuhZ`Z49b(!w5KYP6U_P3s#JMp9w_nda>X-C)hTzq8a-j!^-FWaEM z`OR<6p81b3Le)tbbF?9h!$8^UbV=eB(ty&d{v5*opf z4QXJr|2GiN&# z6gXbA0*){6@u^Fgcm_$@8yfN~9F^AQZ`OF)g%^}Vc(Re(6PhQbF^XqY+m?%K(mIy| zhb}Y@z@K`9H(~1QD_-Oec>IEs9=1qA*J5p61l`CixafOdj=S%Z_jTX; z_7mNAcNcY^f8dMV-hEGhe5p9r-)cYYtW&xZPCKsq_BX%NU3$eO-LCUL(H(f!f$kk& z{$Th2{_Q)vUFV%+CwB*0%TC<*-uJ%u+!wv*MPIz5j=0M|bM`fos`?!AnDmj!`5~5S z$dA-^`!PQCTFk4yJ-UC#S|i)nvM`oGw>7aDTm&Z_FB}@~2rEJ1J?q$bX#~^&v;A(6 z*=l#MfJ+_1c)}K!y7Md?mDc8O<#_nD)p(#iCV1Q^WxbXAbh~YnaUe2p42Wkew56rd zzjj84@1wVHD~*SSw!AvylO8y->}b%cIB8(%I65*%i}a+$5B(`W23T8KA48vdQm-&B z_2fCBNrQT3<+Mp#T}Hg;bN6-UTzO{qg^xenJ^8ICyW^Xi?%<9&?wIcSmtE8S$=mMk zx^H&fjW2#)cjte6bN8?B{6D(CP`{-Prg%12`1aP0%L!#$Us-hj+;TrMvn+#NuSWEi zrKp0>UoXaO$q?eK68;5UATZ-?h@?k8>2E=p?}F8HQ_Ya7So2 zf~&0){46iVsY|`P&e_#{>ZDJ1C!Tw3_mQ`Mu8tpS5$l`o)dmiozVCjeh1Kg8nmgE!rD(;;J)^mK@Zua`^R7|RLKB{WzfP>eTEsL~mPhhQ+=!d94+hZ`>Z z5W;671I{HuTkbdCeDfir6dKlx7n`kK{7rvtHrf}XSDVOK{+|c?4I@Pqq@86Wwft-<+1v0^k>&^qq8*! zOM%_Hr@kV3>@nTB7yHT8%Bz1*m8~gz-qW`*Vd-CAtKUe!v3^qZ#Cmh#o5hPNKG{#I zPHfPteyj2Q#mHBcz#LsOh<>{rBdhYhGYC@KSvml-b=X=8SOfl88B2^J9ll^3dpz)Z&SU@{ZWJAT#xnlEh0a~)?&?mz;N1;BhOH;O2*hy4EDS8rnYiFrFOM;tjzkZ`9pjx& zB`7++U3sTGeDQ&YPkvnDsT)t=^DIwTyBYoKYJ@3#N%`$?G7f~l8`0=Z)`G>M+DYKz zkee$v<6}~)Gj1k@KT_c6)Yj0AYIh8lRl1#0zuCPR-B4!8M7;LM=jl_rR$RXJ$H>$3 zK9w7N%LbX`nDAtghNr=sF!)!(H#qSAf{V|spHe-ed+32jx&z~WvZJ@(3wGpbbJAC< zJtk%4_ZPi8Yog*D{lC^Z`ov^SWYCM?{ss5C#Xet^-ZtEB$3P!7Xax_08N=4dO-$7i zfEdVO0N)yL9ct?-1{^GW7uruzn>en;3NMJd)j3?BCV)C!WwH(MyZr1M7yn9}J;;w-P^xZHc}OKjbsk zbbG#c!uIe!pKGTWPZ)W|oGoBD!7C??gE!vuuwH3H2S)##c>Ia|P4z44i*b*C^YMih z`Ve~jbMT<8=-ELplnr@-67^#(6Rpm{PGryvuHSAi;d*)9!1Lm}A7-gK4}JyBwlYRW z@CYF$3c+B~YFx@|G!HMQ!(zZ0ah=BLBpv4Sv*|G9(pf@fIq7k2JZY1J+Rdk}1jMWm zJ#L?dFO%TfhIyI;ZJ#}zx^-d53_*##mVVy%N z3rn~2Sv$K&AAal^@1hT3M?I^L4JmqdEcE+T?|ILAF23!y+wQ+(!q?X(HR!R(KbYB{ z$~o_zx7+O@6w@#Y6EJ!yW~5xg;HU6nz~Rv;CJXRKA*#pCKpmp<0-p|v@rFBeBusrP z4dDs?2!i_EZubFybgiWQE2U?vmD7jQ>Z^^&n~af-($1~S>y6m|lh8DY{s5EXO=rrE z5~G(Usbed^w6beFX+Hy*k9pD0_+tA#`D_SV0tVmU$O=C8Bzhf>mE(qW`BwWA4?o#` z@ST5NADg-0;AEk`5a+_%avZ!>Z~q(VwMagyCLZ5Yt#Xr2=Do(o`T~Qv}vawZqb^7g~Kj^^4 z9Qh$n43M4DuYUEb-FfGow^)%apO-Pkpwqw69j$EugJ%|9^5td6*Dm)nj%`S|Y4?!@l#C%)P3ulzdLt#I*R6r;S<7xsgxZf4v$X3 zbQ1(PhbwUP1y39Hi8K6zezc%5GzkfViH`5LYtOb@9S0&OtHZK>rH5mHoJ(uR%q*!} zihtwA=Oi=@+crs=ZJ5b9K%e08Qhg|&o^(0O-JNZ{bI|C<0LP9DIgf9x{jl|J6`%C% z2s7?@n#E+c^5KV@B|HAaW4qJKpnvg$k91Ew{zP}`8K*3}AJUIi&rajAb`M@$X=hjb z;X5YSc3;w3L8HUyXPb#*Nx;CxB*@LIT#pr<^pz#)xBxl|LhH`$Im%?F<~_ z-~o@J^1yS_+OU6Ehd%@&f}`CAl!*@d*Gg%xL$haErGAbwn`uRBfIMcP# z-1Ac9m&zZ9carp3;+~}btqRlfm7GlClyPUrYs7Xl$LZfmaBUTs*2dt+C^zJF_)Y(0 zi(VR@T4b_Q?nuFHp$X=MW9mC4^_}*5VXk}Pb5HgkifP_h8&&PdwCKGu=yQd4Z`ryN z?z`{47ZvcYO|tDix`hi>74mB9Tz>(sR^zv6Ou1_3!Aoz$?RJ@%V^(7;TpS~W2o>@e z5hHFj%ZN*7yv;DPwV{mi8_j@gXB@iG7r~M4{M?tD%;s|OBJkVc@;MN>ArD){k!x~4 zO{JSLwpDm^q_;zV(kt8~eM_c%3xr%*AZ>&X%&cc0;u%|IjM2mFO6<`%y6BqLfe-KL za|_Mzl|95~`rZd)p4$6VciL4acOSXu{_e4FJl36c?wR$@`N7w?TbxV9(STNy1rvw* zK$%}(`?Yty>s?C~UGkQ@>*V{&nBQ8)_Tp+l9St1luhfs)Zr5QXL%J__J0&Cp5uizLM?x*&Ar+fUN zZ*?b~cVhR%J$t$b9{6lGfAQ`^3%zz?uvA^@u^=wnxPxt}9f6ls+DS#n;}upg{;P3| zuF&hpSbBqA1iXTQu9@GyLfF4E_VB|G_uD&RmPYdk*FX*RET3_;D0b(J9w`{n6zxat~R|+Bj8)jX%o2_PJA~?JB`1V@5bo1TYC-+`(ZH( z^buq3sLz@2{QUf4;73Fr8MZ>V(3*y8?UM1!NjvGJle;s|I{0(Q=XNJ|_kZ%wyWJOG z&>j1%gBKNT%cDad@hzSqU7@*l1bhZ|U)hth%68sdaDPxfHhEaAe_qs}-+1GV{cW?V z{ChE^Dk__`qi2q-00NUiFGOT!LKKxP35Hx~yTXi-F=yn#YuIKr;<%^1X$QV|wmQ$b z%2FLSvPZTP590tHa(KHH9C^tY%9i`I+BHiap?lk{JqPGYZc_e}EsF^^-7|L9p6ZQJ zW5xqRYDbt$+B7H(E`8G*_qyqR^fC1wd2M`u^RaLBll7BMJgJ{tnP4&M7P@SqGU=b- z2~G0!qsdwAxEx?VtNbe}pFv+#5so$Jg|z=VTnWbcRq^$ZN+V!|MTLlKXDJv5j*)g@ zj&aurKQE^doJMSBBi=Wn`Gfgd>B+z~h?S+uZ3H*w^-*ZV zBRU2?x}kQuci0^-xN9oyg37Mo>EBTq@^mqS9@rPBG8I`}`vCx}(5x_QtAFlupF2dH zo9b=?a^MlC>}r)^2-+y2_GETt7H9@$AZh- zvA&VqR?{WpcpDvS94zIcj~EZez_I8?>$j!aFpK<*F$>C>$xU?++;jDHxJT^fTVf z+LcMKD!$rZ_+}#=!S0wlXl64eVlymyeNEJDdA7rLJll#^j&88+&YrkzUEcfXi@K2p zy-M_!s8-^a7ZF$3|1ZY$=jT@EDtPR%$NFsp=QU;<3>jh&n{C82U{MM-c_x9ucut4- zu6@pIHhI%F1o`VBL;7?zZmIIxl=~Hw?YWwd^^l`!@npGp z=p%ZWu8#3oE{?4PukZQX-I|q*^*rk>XPt@HgI#QIgAMy2vM8O4VQ0K;!!zz^)Q|K- z+1ojjvsz5|Kiyfsk3M#0GVW3w3+0{j+nmRg@!ng=k5Y-fe_I8NcKfYzm4{(w7&B#B z&xZB=6Nc*)2Hg3%I|R>p&U4n6uq{^mddN`*+)7!wRC)O(zg7&!&8Rjmg=3|(t+d>5 zbu%maW`%d9?cNCG$j2xd8Alsf2K_Ui`AjcoSzwKW-|FdPicN|D<3Jq00i9)g57f8Y zyZT<-zPD8D3n}d+=t$zlEZW-2*DUa_7fusl zliyJTeWSG*J-qS0?M8E8R=lxT7`KZvnv#R(==3yQ%phzuc^XIetkU((ni%wcf^Lk| zM7`?NZ?@gp&Pn7WV~kC42f|UdTk`B`?TYUcuhsrb@oC|sZ_i-aGYtAcYWnYyUtR=V z>a4t0<~!{3TmCaz*}{pSgb)>vI}?0H&08QL?bZ~tFk2=^;`#X`!n)G#o+a*;(zM!g zM#g=2d7KHR)Ilo!ez6=YT%oC+%CX78LaG!g1*lZO|jb^fJE8%oX4F z?b%m9%5u=4oBQfBm&Gmi+(R?gCvj-bgx_kN&8`02;Z8*9joaabW)RM*j%m=j z5*%qy!j<5db(t6uG)}6FW=+#Z#XqZljE-4uyG_EJqtiU! z?x`p1Quue+*%P{F9bM<>We-m|`ILTlpnrXB8F$OjsNc}-T)lQ&cDTP*2K@!KQa``) z``=X=_R%v8dM)MqgT0zj+`xd>Uj6~+!d_Q1%NTV=ta8M2N7@Qi+r8Fj#bp3R2@V;( z{k$>`;O|y+2CK>MW?20i+tZNiY2et3vM{SQ(MP%4vsK5@q`YGojk%f1;2~XgOus{- zK0m3dAMD^Rw-3OhmyU3bUfb<^%LX4?Tk^i^&OO6^AC^#s=We>`racutt7ZeQL{J&< zosedR;fA~PA#wKorELZUVVPfG002M$Nkl&1@go8mJHRhL#e^&G@myV49znt;4629p#=dczU{50ikBk*rI zG~jjY(sKB|oI1c-deoln!N0|SPT$$#c9~qCEZ2p0$KBdsVo?6a7VtbnNgrm=-}uHi z_OG$k@2>vCTIOF;06Q3p1mdlV?!&7z)x}6K>Rx9bW zS<|?g@o!aGO1nlW>*Q^eenaCZIyVY^TbYjN)8)zpct@r}A0?r~k93C@%jM(5JgYJC z)OYrDU;FcKbfcVBVV{~j)XUY-xu5unpV;%~fBxskmH_-+f>bkt9+=T`uJ0tVvrg_O59+gXYX?_9 zWT#-#y3_v)1|81*c3!Ft{{W7A@4ff1Gs!~+y)1qofA_oJeQT}G&#goFvf~F==g!W} zE=HZ7hcE`6f(iji-^wAu&~6@Yrq%Xo;n@njpZeh208G)p#*^`~S=xurZMj@q;R(N2 zA|uLLV7bg}F&12F+k%Z#8y@l&r&D*mNv(I#pQz)FZ+)jbwG4W1xXaMD{a`0|C4H%k z-CwueYw@^~-l&!O?X@~T@s2z0@QV2%qkhPs*A4AHv1Sw3DO>~<+`+R4TQ-ElY;QQj zQJFN1%8FwpL{FW`Yk*KYy&GuuZ5qGRolH*?b?bwHKus8c;O^%OqsRf`*Q0+-?p2a18c!A zaz!^ezx5T*wWxD)4y+I4v=&{XsQ>o2zTJJfd%QdQ6{mN{o^Wh;U}1Y-opx|tgtY)P zv6y7ct0R3zS1{-cJHiJnuFKw@1m<8W?Ul zgtj;~Yh0%oEbbOy_@te*S=+l!_jEX5yil+vfuqLMbZS{&EJxZ{*of^#lZBX7;Yu%L zt*;bKw{|)@wrbk_bzuL2x)k?Rne!*R6VIsMIyvU)#jiSjxzElwTN>LsY3tC6cIW67 zKTs2c9d6B+asLV&wL(9H>X1P%gWX%@D)<4Psw)AgdUy1S$IQYF_aPJVoNa{V5_*V= zO&HNuvnB6&ZohxN2|I9|NM^td@XdCHp0U18Y+H4;v!;I*6SLLejGQg3sA#=jq1YlVL3eYisg{o;!+?&G)JcH8sJCcgBgFYSlG3KTNSeGF-d5$73n74frR z*anb=!${CZZ8gzxVQ|!B=dc2s@L@UqxE$E!vZ9r@<(8cVyta;NZ_+0T(Y2g*Wt^>7 zh+Zp%<=x05>LQj3ZB)ZZs_ZfTovR3(XAOHBr_m{ms?Uq|^xncqLAv=EP=Tqz3u>AY z@x!Toqi`?QZh38f8*k~8KCB~Y;8M=4T|Cb%j>IQjRirJ##Dim8n0m*J-QYq)e9E*q zN2LX4n-{v0mgg3i_%MC=9QbkR@>54(htEmh4B<*?#~=M*W$2Zu#rU-u_^=up@zA7n z+B^u4zf+%mee~hSip2fhskNIux3IWP-x)uSt?#?VzbFMsF)%OQhai2M8ewc@<)yz|ae(cIm4-`z97dv63ITkFHhrMnO}DRIN{ zoAFs&4HCNrsoA?)xO&epa0!P$le9w#k>kj#&YgE7J7 z;04o;8~L8|DroJ5^~YM$TRM6K^+$R1$^$dbr99je*RYMla^TSk?_#j>!SUlRR>7st z)+H@%8a_*>Gvd&|2QG0TSYA9X@!*%PZ0p+RHXfK!Y4Tc}fnCpV9G#QUq%C$3Kl|Cw z9wvvAl$|w&mVd4s|9v+cjmeEy_Tkce0AI9Cb!-ibL-vMUXF8y z?owT?&JQ@|txvO`yHNg6b^VB{%Bs$}19f(OX2mZyaBsi;_8q_f`@i20)EB+zMI$Rm zC}*%+!Ox0e3q)_2K)WeU7ZYq}ZM*4kV4VCU9p58!2~)G@z)2I&fYDc;ghhdABEOzF`E6Vp_|TYVAt$eOi?us+<+w&Y!}62hYGK;Ax>J9`VSf8Ou5M+MCk#K5 z798PSo`pl0Hg8mZOJ^Hz4Smv0Dmc&4Nl6nLn|Lf=7}(GxWr z>#n&SO@aK90z(kZzD?#%s$x z?G_$sZrJ8l@rdIU*QP5IPvOQW3tJDyDvt1a^Fkgx!A0g$hd5;{RA+qh+j5ByX>a?k z&08wo=C?Q!S6^VnwMSbFRPE=(r<7Sv2sga5aG@J+@%DMK`U2aweKB}>quLO@w0Zc} zKBufYlb-tJB_3XT#{YzoLCT)d^UNiLGd}VqY<=WS2)3nLJzN`#gG-ux&(n6=K#!x9 z&SFru-4r>X%c^_7@})<+FLqz+Zn^HV?&MPs8uVc;`WpWoe~`7s`Wvi19P^XU~nTJROj9q3o+wHogwsS<8n5X1wJ*%~s^xkp&^1@DyhZn0S0( zAPg>i<;fo7OmPdXxSTn0k+YQP6YG!X(3>!Mc}}=kf2B=e6Azwo;Sg?A+0ci6V@I2; z(79pxarJDr^t3DCO6U(S(|2&R@o_kZb$X6mDbwaB9=yWD$!lae@|;jVCa*2i%CS0! zJ~FP}QFWs)^|!R9j+BwNm;34nRto^<3eQyu{s#m?LFH4r_Q{@ZSsihyS z(jP6~Pc3?bo*V9!xGM;?3qnSVL4VC_Uencg-n+NH^{t()cnTI`UYRIb<&Fervg14i z0gkCKa_PS_gjv>|w+Od07YxS?W8JwoN>lR^0L zSr{kZ02$>{KKO<(k&uG zD4J(UOZYd9It<^rIzQi2zq0nwgO3!-Z*>=4aY6qZ=qBuK+r+h(J>^ZV?0(akaq{)C z{(j(r2YO?E(M1<^H{X17pAJ^p3g>E4u(!$|Rjc*ys`B@gw-vfS(%NIKO0PkPObs^+ zFr$-3Ain?mzrSp@5OG@W)^bnL8ewS24l(x)FTlt*>vocHX$&(t$) zpESCXA-5o$pPxU}*ZSGS%e^e;w}n*+kadDTK&`t8%B zDxvC~J5WEHdTPZlAXpL@aRTN-1xN58xZ#Ey`W5>h{m~zFpZUyZx~s3gx;OS&K_R+| zFVwO10zAMYjIVbAH&g@hJ}!MAM01|O7}R{LOcIa6fk(L*Xv%~@@kxg>zO7q4&n> zQTo02`Z$W)63+%y0^rkffcuZ8===zW3T(Gqt-E#ir+@mV*#_vmzYdOZh`@x99@!@U z6Fy)*KA822ueA$r)r-I3G2V;I=M8>dpT;LGG#l&`0zt`VBBk+grQcI$8;VmttqUzn zrM3A>#Yf>>s?0{s*OpA4@HqV3sPt~rwK5JYCA0cHzO6wyK4a3jbeYX=VBn3pjAP@P zJki(SG9KZ`I5w`u!Gg2f3Ky8*6mkj0uaxG1WjZh-T%6 ze8+R16UxWm7zhKF5O_A=<$*Jp(Q6kaiXwx(#R*@$I+RcUrA}e%LQk7E?Rd+FY2#iC zeCQv=r_J83#dtTa&Ev`}7k(U`&6Yk&F0=tZ_>5y=c%%%yY&_FJ!683mmJY}y-l9XE zF>hsPg~%xn4^J=1A1(@%;}VLeKJl&QmesaW#rx{=+n4HfwLj~=(*5WUyr?_%j8nRO zd!IfR4}Zcx{Pj^7JpbrNKiYlnbD!(^`GOa`pnnBgzJB9I(W0O9arJM%i(X*6s!z`- z*soR{bB7Fi0i3lkbLb5^qh-5YClihqxi|ta%Ub=R+d|FPE;NVhT*bc7nFoQH<20GXnYd0yydFd@4b%bUi zysb<9(%N_nvzBo*q>XD??=5`;&|zq?Qm4>U33$zYp=bwx0CYe^z`>Qp24-C&+{(& znPrQ7-OOj|dV}7VEx;Q>fKW%9$w4sA$pecB#tm`aRrj9Vz4zYRZ^vI$xAb^tI0zv` zF(QlM9#`jjr)#g*_uO!2Fts7=nS{3R7_74Kd4`L((&l5h@l9DgR4;xTuo-jj-X@6CcR_laj0|Xns!wmof909<%HvCTN|#;wwBVc{e=AS$G+8l_TDd4 zWpmxdSIl=icGedqzjN@r5_rzzr=5{ced<%)Lk~UF8*m?L^Y$2fX>tVyzZT;ezRK4J z)lU_j+h1{K>AQ=7&m!We4}bW>vDl{qu1-3jb5-I@Je@O+JrNoq0nq7I?0(?Icd9@A z=}&jR_j|wBe>T!3vUAQkrxz^vA~53W-sldEc;m*YAFi2%=I{?}>$O!Ld^$7UfWk|# z1|5E8Hz0#Bc$9B_`T}k+acw+l+u{0fKwsp3iow3^wmC401I9IjDO{<`xDPHncP{hN zIdnzz1vqtORqr`^1uUJ!yKSG>NYO+e@yf-}!$Yo9KJ+IHO)G8FYRgTn{^}OE9)0+0 z-DltV#qPP?+1+^;9{h0IF~|7SbJz3Q;?|0st-Giew%1*EUH{qFPk!=~zQx|_eQlbQ zF1*EK6SL~S{ne*CYJth1b8|=4JLp-you|{v^|$B5&FIn*GDbNIW^NPO)27Ydj&1s9&jALt)gddD9pzlQ@;Vg# zF$#|{Hq$_bS?CPHQ))W0#E!jKYUAL3#UKu;M@D6#e_wAD4+qk}1jKPqd1>7F#dc5A3Pj{9B;F2FD>P?P5I#PJZ%5) z8O&C7+KLx=N07z0f{T*d3~kveJl_nw4viV(!o-ue(vZ%gzvyLSX_PS;)|I{o8wVx} z5OFYkyI`>kWi>CIZlm+)cV69*|CCLrjv)=HcfCV2#vOG`-86r4Uw7{xeX4u1+uNPF z`_%5EfBKRBxLF%_@7~=XK|5;J)=Yqu_iWcy8v78t7u<`5c%yu5^a9_Wn=<{2u=TZ> z^Qyznib2=uIv@&kF$ObcfeX@vDF-G-&!=P=akCRM7+VtWdCz-#9Qn*Fx#&NH~!K6p|uyo@+p3^QATPsvZ6Z75GUJPHk! zzXM+@?|GG1!Q9^7pck^!s)Cb>@xI~i)wTZOgu>%0QURwD6)ffg3nr^}ooE)rYZT+| z!}A~bzz2GqUWciWX+Exbg#>^*Glvy&t9ZaLNKe!5)}XiCNY{+DP1xa*M%? zDj0a>hsJ$=e!ibQVw_*sa#P;q!s^y#IxBdB7{MeQ@oinHqfMJ6-nJw>&~+rkgjeC?X5>ZM5ZZ^&NuMNKP1#BCkAqpSddJao zB&DyG_sY{p3?L8T1(Vb`>9^$M7kWiOndSD{V{YQl9Qs z2O8;owudcpxtk%!w^L3zwHBJ^bvNC3Q}_1&{O<1m{>8U;|Lc#vx;yjPXY~2-Dc|y7 zNE;Y+v1=BH%W?23i(l|8=*1H%enRDaD+c`rtKb6KR~b7HZe_ffgSbJs80gr%G#Z{5 zcSh2OX&7&5jHuN+rus4+=RHaWo)NVgCLD0ZxDSKPKEUQRx*Go__78F9XyLFxc^ z0UR4}Iz0Kp)SWsL_Q2bJmdyeDBfwkDZOg@0>(S}Ahm6oE4BKiQy+*gXjAg;L*7DcZ zhnDC`?J~a6m92Vt3|91S&f*z$i#Y}!PqYWF*0=SvJOjhYPu=2hB#qtk29s~zvo~yy zde}l2+t`~Ejz6J0`dLSJU;oNCx=;MkrwikO?z-=~x_|#1z01*6Y!}-W+Ij+)_=8q7 znfR1!?5O7h)rNBm&m~p#W4%EygnJf{`W2V{yaR(Lsfh8LhC?W)&KP%TE)_7~UWE(8 zz02q9-52T@VQ20!@Mb*>JjTMM^Y~#~;BIGQ&LZIFW1tC8@QI^Kp0wbGM_TZw9n;{+ zHjbw`pbzmje11A-^To8qpp1-ez7}j#yp|kTj*%EgmvO^*d96|%cH{? zZcbhdJpIhjazg{31zC%$2dqEQ9q=j#ADz#DGpfApe{gJ$qhN+S$EVWSy52VI+tK~` zeV^?<{NL{FF6z$go^w^%(!+PvQ|;LB|7Y(`;4Lr8JKGs(O&PL^@rWF{HoO!UpXlbOk$m^YKmB*uv`88vRis0fOh*r=G2zr>g$TArG?P$G`-Cl%O9x z=tS+~#(Bq|N_%(4-#PSJxu1p_S!G}dW=iK8Nc}VvF2um29TTw$1d-i4q6pVVUI=4L zeR7_Ihl>y5cyT{Fc&oas#K1=v=WOK%2H_eLd`!*?5UjLUZ)I!TtR&$TB?^vv)9G;l z?*($eccHHzUEvD)2Y*L-^fCI?M}MW$*r#Xj^<*5N2Ql80L3nsCHq2(k?LszixrNs5 zqdhn(ALQWKZaY;zz+BSCMl|+YKM^c`L|eB^eH(?($VmkU?!?uH(cIDn2R!4)SA) zkBM0k5nLQN11p4C5oYj&2Sbc66ehfh;9a-4rr+Ll{v6oT_!=XPuISPHxwIF;p2UGx z=h+ycEt`~9_R>RLvGeTHm*;)Y$>o4Y?cZ&LBd57|10Gmt5a68? z@r*SWjMUfmz82@H$-|ZH@?w=IE&$`uIjuNp<;y9w1Y^FKK){}i_g*{UTakH~!3Xf; zZixu z#fM~G?aA~_lcTXg_$5Ez00uk9#ygc{@1_BFzIYAm-^UFf*xcA%_3Q$AI7Rl^{cjIc z+kK;tz1Gi(tvuggbC+9og=|LOor7z9 ze%7WEu5&%JrcZ*t`teoO53O>YkRAHdFr^Z{+A1bT4%x}3@p4TgVEAQ~h7Q8!@F{guqBJKS{I?(1e ztLLqL4uPKZFRF z5kpU4cHSbPbG}xhqC8qcJO(;~x044;U(XE?GJ#VNNA(m(z4n~A6_f>l6`nDS%_vg{ zF}Uax99uRmSAMoQF2_7x;w_#J;_Gt6c`lsL5<@aq+r_TOVD_-Cv9_2!D8(+oF8vM7Ko;8yvgr*qjrGw|49@{Cz@PYBR=fWuXj)Xk0!3 z-Qa1*=CkwaY}mj`UuEfMoP-X}KI_VtZ~SVx@OLk%hwVGcsb`&3_S@eN-i-Hjdtgf8 zxVcHhyGB>%FfXvIEXqrJ+Szc9!krq}f_KRhue~JDW53<{2pV+2)G9W^V%%tT=G++7PT+$lxjerdRi5?S6DrJyd`mm-sCl$_rU7oF%0oMJ z#;>`qao1Dsl{has=IFg660?>=z{nY7JK=HS1aH-51xGP4r0>KrN6@!T`}wZ2{?k5v z(uUx{_BtFTq-^hh|NF}+r<~HQ_N?$Ip8NBZ!f(Md(s1GAts1425kD!W`c|O{WS6oG z-qi<};Q2^R@eHr_ln}jK3G~oU^N#*5cF6o+>~WXFcyuH>Pyg{^z5xt2h;3s>#|^`9 zh(5=`x=tAyviXYRHg+60+sXFAi@jwtoq}?@Y$sgV`E2B3Go^!^cgF40*5VEyfddEM z@jT~l5fSH}4VrrVcijHXZ`@VRd)p^U{U!PG;$M0}dF+CHJs3l4iTL# zp8fXib^J&z>puTl)2G+ItNb|2Q!AjuE5IF3T z5jb%>8)a5e?v-GGpiLaI@yEqsP&mgnFpnkVaBi<~-x2ahPKUp4akw-z2~ z;ppM5FQp|&5wG<{SA-O}{WLsk(?Phm^(#3a+VBN0_LQ&^X^AY7E`}@?bF9UnXWTK^ zpV)+P`wnVP@8USw(m`REZjuFDlIkn3ee5qg4K6309k-28HelMab#dIAHf`Fy<8B>y z;0AW!xA#n?^T=J>wO8t~s zdBIuFDQniQnU_O{Q#Q{WdVI)SbZHwpw4L#NkFFoX*>`QNSeHt~sWb>;=L&%78)nVb zeztn!fyc2)IYLSys^btjQw~s2HbY3)UY}`(79N}k*#ZK+R&(KxI_24o=iWS?V7z{4 zpwyJxuHF#~81T=EInJK4=h%lFz|OeA$=HM9F#6MPSp9M?M`v_QekIe=@|jGhMayFH zWiiKU`SnQ4(+xI6+U6(a1G$L;TgoQIenzIoG1oGtRDeh98Jos&XSW@P&55&h+OcVD zm(7a@j5%&L&A9A$YtMq0e)8bAAvh#$>&D5WHFSj!`UkGEICnT&U^te~;^gM~LoDb0 zpO4qw`PTBX??0s+`}AYVgY{uJ{q+r;QE^H?P8`4R6OTp-#v4GxgVm?(SX=*X1JD2= z$n_*hj)F|TO~&CEDc%i!)Wp@SAI`Q-`;-H;Xw49orr^-4RYEKY7-sH9AYQfBd>SKE7#vx>=!%6 zE@dOaKCyiwr=ty+oHBdJ9yu*#=VF`KERG87jBAWI?byH;-{6_Ft($KiOk=`Dei*+p zw))OluUSye0$3Y{3$m($=Jj!_Q=rnuINC0Ig^UNkMCHa8l+6_aW3G17sK@i*xtQZl1NS}*dP07YMZbQM>uK@?pQj0L z5_z1uN@3g0t7k}@W<-sbOJL|{G%wr2Ad?AO>J{$aYOnumE{GTlZ=g1S^~MOi~9fB19_5Gn4{Zn8s=)ZQtI(xQeG?ujmsIg#h~99 z^n03o$b6X#|BPwwnS=V7qimzH)GLqUu=r2pq|JRPn~+qQ$mZx9Cv0<&6GR``VtZo` z*dOiK1>=hP_M@@;A$TV3*Du92+C%qj<9Gb2_r~w}<~`-(@A`E4jo1Hw^_li>m1md7 zRfoR49DC}M%b|xK+VS$>`pawlf(N8Uymado&&X%S;m$T($5*^2tGNPxqJwRh4}UAp zJFA}f+4KF~L*KoOBAf^iVbcuYQA&|BvLiGr=hz8KfOJ79 zG%+&S^-KTY8$Pt@pnTfTmV%u?nc)#wDPL*nO2)sH$4cY-sQ3<}aa_59GbqBN9Ru9N z7;N^0vk;ulnXjC*`79OVsLgfr-dxN)HE%iS*j97c{8q*eoOj-N<@D1}?=~s=!YA~( z4nANH3!!aT{cX zeXyK)&S~Yi6OY~H)axeC4xK#mK(rGLW%!Mk;qRa^;X^iVwQ4t4&|W)oPKfNPP2Rry zWmtuj1`=r?9TosqFUA26YO5VaiWJE^-4xMk#sg#_8pDOa90Y4A%HYHC!P#VJgF1n8 z!{qR!Z8J$eaEJ9Z)-d7gOW2vbu3LD)6Tjoo$t8|IhC-QJATb)+XG{wiG;{6@hw&(7 z9KKb)GErN&Xio>EqR__;{}PfnX7ndzNz-A#lc-!9br$*TFnlsjpQe6!>Q`FIj^N8|0e{x6TU)+y^Bv{RuYR+vJ+SW7%L8TK zudgrL@7ht;AGNOBTJA2FTzGkP=sx+n>!cNr$U)3z)q~HjJy;hX2ZurYWJC2ER^Q?r zy%=Oas*bIGm{rl3ats=@1)4ktv`Uk5Y3kHdUb{kyW94%A;fHrhg@7P9>X_{q3!M)Q zCLLT&AZ2ZE%|WT}*R}1YnV*YS@PN;-puZSHU{a?neZXLZq+~>PF-nv#MoFF#vYYS= zM#>Yxf(QOkK#_8b#&%8V)l+J^g2%2+KG)i62afUK*`Juo5?UD~pH!Ps@_{vt6mA(a zd9TI;=2Qf4?b!Q{T|4*$ z2YGnW7m=Km4GQ|C9bIUHK2@)_KFpz0)DYb^o-2>=ATa~DQ$7ms3p|K(|Cuv~2%;di z5)=uJ=#UatgdCorH_TPn8j-YFiWI(cg+49)_JLvYGd{VNCf~|E$|@yusmKtz7U>v% zN*TNyC&EQLL0$C3*v6vhF=~vSGKNl?g^7IhS6g}br61TW9g&-Id9n*VU=0gt)7H;c zmOAk90NrpJ7Set;9P~}QVQ_|(&(^O$rnVw{XY1D=3$1-v+JK?FUpLov`UOVD(~s^% zm)ksE>!*xPX&YTkK04}TO3+Rl{WxfWyj%wcc+nU7DNhIEpgCu{sV7Y~TICjs8sf!G?r#n*mrB46A z>*LFBYTFAt$+Px<8mrQ66#yY%yR~rwWrIipWkCc-&TvymD;DL5SSgM?^kA$Bok^&? z&uo)Yh|&yTcvrvN{`Kh?h97#+Hdg>o#H-eEW}Kugf54>|8AG1_D5qDh@!#>kYlhMy zKwf!_tu%1-CzHUYd*F*EPvphOrX9F&)<*j*4AATpK|A=TUR%Mn@+>a8!un4cI4#YA zp)BQT-=^l&C?W7hX*)_AwDjd{j6`^~c=y|83~eI2wtaX-PNJZmyu`HCSIjlLM83Ih z+k>fIgr_=v1!aPAWzsmu=%=#i0eLB>zsmBaP4t=W=&xPu0h|I?nh;!F!!c<;A06!) z%>2`ros2&B`P{;8`;C$}J{r)M1HTB zUaD0n>kh4(iAUF8S-bAmazZ(xepKevvVDis!a-1W>9ldkkgjm-bkQlbkC55eI*KO; z?X-bgeB)rKyGrQ#bRwP!bzNSX; z!40x$-@;hVdH7nGm;gN{?nYai2n4-&xzgy|P0WzYIP{>uZ-j<`?TW)c3eKR~feXsP z!gpV7!ehshbV*Pr3d%BW#%A2pHpZP{&xwn=I0}92(&(x-77+Ri;I^=$>)M4c%JfZ8 z9$g5I>gbWWtFF4LY~H*%&AU`Pa4Zhy3fh8|g@yLPrQf$5KXv^webE?xq@5I<=hWkRGzTzyUJBJ-dw*8x2C-4WzQ`C;*CFE4muTw4!%}IxqMLuo27S6DIi-$J->tX%oDhG#5(Jl|aX~7Pj?6Z5kUwqskk9?)7ycxUL-e#3Q?3S2O3vk%zWm zvmq9g9tP)Ad{@MC5>Bwqr#S1`co_eaxu|VJ(<-m6J+W124Mzf_Nm6)^kt zuKQ&fTRFTK6guLA9-HdtF#Yr+eQ2jA!(=p#vDmZv?eFhcP)-B(a)S|G4w?sj zT-U5xT|V;e3+e}DZYcF9z{)HC#Vg85&pV;|x4Mydu-*=QpgQyVLoJhp*a36M3AS5# zPPFsN8v7O;hv_1x&lXuYC$w$XRt4Isz#xpK#!;$tXj66CYv2&~!a(q<*6=p!@wvJkY= zMLR|MM-LZbjOD<8bVh%r=p06`^7R|mmm99UvHbbJeOLX2%#QMtzwq*M!n2Pr-@0qp z_W<;t)S0*Z0Ec{~j@`{KZwNWzZf{eoPmqUWPRsb4L4iYGt+5F^mqQAJr1|DJM`sW) zg5;oqR%#h0S{2!ypt~Q!bPPuSFoo&&+j~742k;l)o4dWLccZ==2 z?<;@xJMXMNz;a)Ce0@Rfl|TK8vU+V@2<#Ys`Zf&aT;-XQ_)ivYb@8cAP3+wHRWgBF z+PdazwKpFJg@={e#K+_r4l(hc;)CqA)ziXBpWnnHw;7CKh4?fux6FY?-Q z=n+7_e(&}CIY5E&SzM_hI<-*vXW~y2esp@60h#7ldtp7q0Zu5puxZPc9@?RkE!#G2 z_zzLB^f|QgPs98g4Dmz#$Ld3HA9?3z$}RQdF+cmZA1y~bp}tSs{x-qm$LhNvb{p%Y>Oj&cGSM*hA)*r`R8vh^#!u>${#tsJpa2-?M`MFi#K-N zoHe;@+_o)5!99Kd)Ju~0p(EIk=^_u!aEcbrCGeWtAh!Ow=H*YR>IB0TB0SB`HcAclJ-WU(DjAE!O-y4ADUj?Y#C-O-gj zZLX{Y-Y*r7!)!+%A9~KdYM-51zs-EE!56@0%k%uxd|)o;zWfqfjMhQ(ZSCqcIt30n21hoIT}ot-y5dKf#?|-WTBL_9c88H z9z2KX(y;QD&c({NdK{cv{QC8|)+YJI!gaZiGY&suWA$nIJuMo+MQJ_4T#I3gp3ekVzIF#^zJqFXwyn z5V|%t-ohZA+Py;uv{fFBzw(u@be$Ztr+yF+%nIYWk@lc}7CIP+k?qMupTr2o1Znx$ zZ@2e)at_e5EF1?x8Kj$o+Re9YF8L0^LmB)n_{3n%R|u6)9vveYF_n_RbP zU=3=cE(<64ngfH{1zzd`Q+dkLrcGz714DfatL@v*kJGl_cez}nAv%uNE&r#9qjA7@ z-*!*6SK+1khNohD6rJ8@{XXT^FW**v`-lIe98@;cPrUA1Uh}$Fm9_h&$1If8(-oe?z%WL7+UVCk)6Y7-@3cDS8D#HlQTpl36g<+G6ats?Fa93iA zen;*Ue;DoIi?$f;euw;Q?N=f%mIKZ?mYN1GWHc=FW!GM}`Sed&3$ve(F=^A>6U+Pp zPrpoN`9x(c%yw*bv&}#FiTWo^e`RqVDeI@6Bk|;I;HcM+JlfEQ!-(o5w0YMlPpYg> z-)z_Yy0(7{Q~62?aA(;2yqz`;#<5YMgL`toOLjSd-negm|2_AYxBRF7Rc^cM&ia$6 z-!6arzMt3aWt_jkIQ_6wboLx)rKq44bMwR-bA4qtuilltu+HY0Tg)Fwmw&q}Fd%zV{nlz_F8#l4xW7awR)fo{yw)U^?L`oCuZ!753e{seT3kuUmMh`GiUW576N}zeP~e! z-vqGrQ)Y~|UD}u%>65m>S(`QwMy^ATKFNnRsWNr)Nx@5b+fQBy>^48BtZO{;FMZpx zrOv~d?X@dg$bfbm6>l!>sR51VSf7_`R;?*-|DW$HANuQ0*T>+tm0$kvuPvvXc2aqu zehn`AxY#^_E89l)eZ6$8+-A`OaoTxKOL=Q!;Oxg)I;%mE5bhhZguHR%#*QZC{Qip=4n6eH?)6XOt7}7W@0YjqwCxuvZ+y7A?PL!0 zLm!|1b$G5{%TF}tT3$#Q1FT=lq`8(4Po(&sh_}k{H)WAU%Jmmq2iJb8K4tQP_KO+t zBD%AX<8tWUUNYWd)3}gy1vWX-U$1!yuJ^6?%|HBi7nI-n4{s}nmjlaLKm43>&Z}P5 zIsWup>=a(HA${FT9Xf0Vjz0S6&UW~!oF8(b<82=nXZNdXgzD8akIYl3Q3MTGfSP!F zl478rL#Oz2h429{7$wJ9dm2CH;=z3CTcrdidL&J>;0&LY$&2`$Nb$+7jcF770xyPN zN^YET^3t|l^1&_R2j-yExC!tJOsN>0M}ZYMgHrtm1>+B^OZyhblqJ;{AGN{PL7~OH zKbGs1B?V))6NR)hW^hX$zmkVn_$Q6LQ(XX-0z`;-T_)}8Sp-#2f05S?_=?JIF@K#N7S=N&9gTx;*M>%Irm20Qf6RD%DJ zMjR2ZuM=h{8zq<&l#gN*$TVc8M`K zWPz_@b`|t3?eGl@F-AHMGrG*9n92#vK;GnJs`9Jll42^=sRXnjZz` zY;Dw~KIx#bXRAy5mXFF@_sh~YX$x0Aa#Y{1Yhksp=?!^_@`;WuQ{Kum;~0x0kR~6w zNwpg`Cj8pE7FTt%h2Rp0K3m)Q)WMHk3m+DGy!qfdNnbo?JEWdi-)F-<<%^%cxxDer z|6UGVe_*-ofp3-H{DWUDhdk!sve@^{htbpOZQBM7eousdcKesi4m<3y?j+r=-TUg% zH?OVTsdFWMCuii>(kRuaN(fLCTtCVm;4M-sDG&cB1Ovb^j2cXmJ@t8lQF##gM~9?s zKK1k^2G-y`fzg(=`MK)bw*9_` z^%|cSB22=^R(^2Gb&FpB;y@k03zwrxNVzoqA`5ABQA!u3jA!&Qa9X_sKan1`y4W8> z|CGrGA9=yGaRpYp~smr+H->lUtbvC!{JiKo6IHOBD?a(`o zci$WnRE#TNeMHI_B^iYHN-9GSg<$kYp(%XR))T>asBBLSt&X5Gv?i}!#J?Cw{Omhz z{LzQ*QECR!QJ~bd^5~^@6xb>ipW~2&ORoDo4{oED_uEbL+F}nr=v&BuC&o!S=~!_v zfi)?dw%>elYGDnNZQ4XPTo2NZ^p`T2Vq2E}`X)w)r5wJaP<3e=U8cX_MX$+R1V3%1 ziORuD8!&@Q=$Te(OygwHlKHey<4p_iQQ@G&Y2Lp3?_2J>`~LFVzw*cB%h%pot}eHg z-~GMUl~YeYxgKLL-9vDL=%6=nZe<`(5BL<0n?vWTm2>J&)9<+Bj&k_nhts2d{2uyF z3d!pONYLYiD2Be2Lr~TtH4ePx(iZ+4kko`6g)iEqZ6@Y&p=T02`ZVK3B6#xJP`K8} zwT?S5=m!IWKODAHRHiO))4okJM%po=`t}VT7%L&5Lkx`zfpd6~bRou=6y{RlG}pM1 z2fgYCeaVcza(+VK=_h6&pN5FMm-k_}k0sPonNDzxIZITF!a(%esZw@VMPrv>(-IMGOZnIHaej5UKw>C2Kh)$3ZA5AyNwr!iuczs8G&D!eu*W0#NCF!>9 zQKA5wD~;k%vOElyvbp*$=Xx}lU?z}!CeA20o3zVik_7L_MA|9*3{B)6rya+Q?o5mr zkk)ZC0z&wrZDOmC88bZVU#EPW6h3%64OruhJI%I{$uwc^g|)mmFi1Z$M_T!7XFl3# z*`e7~dDw}b$H`}Y+NCk*`sYol=82B?VpwXAGKe%IZ?k{!=O|0+_rJQoG!HZv$yny4C^9r{n~ni{W%m! zqgK(zAy_}k1i08&oN-_+r?!}vNiq&^OfW*|6s%6z#SFod3}P&#%Cqa{xZ}K)3FHrN z4_Yt|qOw+&V2EVgj?>cDwr|Vln-5&_uwu>l^MyN~{%{Chqr%Y#4e6IO{U?E$zSBy> zTk_9*hG+6~jk6qRmH?O(P&u(jjua-}yi z3Vyk^$Rp3}#9RBJZI$8nYPVO{2Zm2tTfaDS=#!uPWJjl~2p(g`4fI&p7OW1+vhN(G{$afADsMzGn5>@;CqU z-Q~YjXMR-uaLh3;Ija21AO2!FXSNKceyAmd7%d5x={>wc??n$SK zFZve(?lf^+Ojyx}b_3BLzvY+q>7$)GF-}`veScB!bth%&IdThv%pqwUg*HOQ(0;iF zxUOASpVr^Lv;5^ByrcZy8{S?vmB*9=AHRQj{eSY8>{$yfyAzVGv&W#To0b4S0@gE$B1%*^Vs!%^{!r_I(F= z8xVci^2{&&5(9TG{1&4gt?TxwcJ}^lDc{#;I=khJ)6OCv)7;d+~>N@ z0f*0V*bTOu0~->yMcd`%;L+qa&A)xex651J{O9HG{_OmE$9#P`@%xS~uY2=PmDT&y z=RfLeYfJfk_Sxh;YMmo?!53V~g*+n%vW(u(`0ll9>pSR|*Y?k<&S874T%*CbAxcE> z?%fC}8yD7cX^#)?EoEgpDqdl-Nn?V9;lui;UcbHr=e)(7dYDuuVvf&S$3Vfw$S?d) zI&A!fDi0pxz@H1(z@*R=SP1{d8E2{6hK_0Cu~2-#=ji1$@troTxpZgR<4qGD+%td8 z@oDQvpEuygX|q#g?0FitMR1*6JR6p|#=dj#+SyFRv4EG@A8VR?3M{hQe{cu!u{mtVHFHu^%{`8}%&X(xax1?f19(4N2{A&%3xMQ*v}F>hR2@WRBT zco^MI((o6|IOMeBye%T)!12@Mu>%Jqh7}AEpM@5`Ha~4%2KQlbGj?ce+oi58YvCo| zPY1QfhbVVjzc)X94vSb3`>uJPQ*;cEYz+(Z9F zJ!bhQb=S9(&?pvRjvF8m=SMj>qX>0eSWDd=lPEEUqGQ|;UJ#ID@;G#pKor1tf5c?c zhETM_`#A6j4m>dv4t_$??qZ7n2FcA>!GF-WnaEN)1XuaA#miiSk2fuET?=@Sv0Nt~ zoZ!HK;9Fp;6LXz@()olw%=y4t$$i87l}y8Oz`fPa;Dfhx+MLP!GIs{GO`mC|u`wAh zY38%Bl$mq!3-IGB%t0rzciwqtXZzEJ^8r^tUt(Z)6=VMEbg-JeeK+h|F8}0Jn%erj!XsD6r(VS z(qbS-(<##g$Wto30Kq<8X~#2W+Q^R* z#%(_e%zhgEM^xIGxN>dHGb?*#&7j9b4s0Z^D;Ylb2~P`j#68; z&wLd_SLS5qWeY!J4odZ71B7$`_Cw{3KlO*@@dtfZx%{p#m*4uMe_g)!RWBt1owKHbMalH}(9=14po&k^iKDu%;ioHv_DzhC`eyi)E>iVDfiJ!Q9?JHjKip_6* z>sv3WTlSMH6LwVLO!WF%2Ea(he5Hm~$>iJX*=P#=+GD!OLFwHC`TEztzWXbB6y5!h zL5j{n2^ll#Y~#*V2d_Sy;Hob?qa?0PPV(cd^Ms}294ke~ZH|4^$3cT7hGy_gzD!~U z!}xt1jFrCN#i-yxCcab@zzwco;_daluRdmVE&sck z-`OpDp7_Kko_EVFx13xJwjKIJG(tq6lpMiI4H$(MshE}FAbP@7$|DMx9>+(qt-2_) zRTd|ccKSx4!@Hz|#+tM&w4}f5IA1t$rsQSe;ocbMEt-rbWhN~?WL1t9d9oJKCruk^ z_=e`WLRO~6f|GHjDbJ|@oPw7!_+|kRx`L1I9=mnnv&MO-1TI-8^RU|=`RlkK8X9)-!lL5O}CUk{`LP=&imU-%ah8ZOR3LY|L&*WSdKaF$rbL* zt+$zTWi|ucl^XB?{p>P_?(`Nvqa*m1fOmDHwW|8=a^i_6dbquG4*i4^PPpmwpZ|Qh z;f5PJ24mzTK|g}Dn+sy&z|p@|l5zS@yDdYOBaRk!c$0~sPP;go^uc%!Gu(FDZQV!p zDH)ie5IU1~g;V?&Jb{b@m!~Ke9GoHCD2+V)$xK_gS{WX8*kK*+oFij{CeB+M4m-Hx zMLV8+u9F&jSfDdP;PunMi&Ep^%{SlN;mHtM0AvwmaUy>C%U>>A>a8TO7!Y`)gOTCr zy(!>Yxd|hHFSa-bm#)Epf7;H~WgWMe(5#kF^_#r=ge2HsvD^pXKq}ynAh{6V_ZH?t390A zLOf%`_|d04&8UYsZE1lbykjV8%rh zLQzVLg`Bcc!=&Sm3V+mg@Q6Yrudh5N3LGORi18SW);PR42jS6 zFNbRj8?>;|@U*Ey6MO60qQ|xL)?07&Tj=GSbIxJUyQ7ZIp;u$~X-56%qmN$0;63hf zkDHh_4$okel<*AR3U^|_i`cOhcpRgY!f=Ffh7^z!-~iPN`o`HQBOnSZEEFG%DTMc~ zIWRkL0w;Jlz$-XE_OXxcoERrg_VCPNMSpUWn(S=|4N2R&N%P~t3U2x^26PNvu0`~r z1ziF<$jz}Ip5TLM!iZbyF8;*X5KF(Z=y%WWK&#oyd1m8U)*!=J@w(XZRN99Utiw; zmmjY8%+D*E)*V{buiB@)@9l3cr@rXqjz9e$SqUG_arBs9u?d4{3NC}{ma+`ag4D)~ zEy`(wGIEOTz{86#zIey8pZ#q2&u^(Gk~itwIrPd9Uy1`@=f^+(@l{72d1R^g)pxHP zH5?^`v5cyt709f_fEO5u9(nha8GlTSL*&FMk2WS@grU8d@;DrQr#W%J7mO8SU}x$G zofEe(voqC>9Gt*#QlbgO=}`^=?ulJN{Rgg)w7Zz%zxl#t3>X1CZH*v$@wyH8g9jY6 z#i}-ps09JJ;+fNnVGiD}5sKj(*saW6k4lezkrzBh?PrX|4)B9-^klKeeNcaS+p)I%{Cj??oOsGJIvW+I zMlXfHl5*(m+DZ&~K@Zp%cHC*AA59}0wwb+(GnanmGoR@;lXVkrqjK+4pZe5qqq~!2 zHGsF(4&SWIIC$g6jXN*9?6OsMCX5(BVcJ}bN;^)>E@-(Mtk45bfwClW;^<-I@q)66 zInJR_aU9x(_Q1?Ffq+R^`V&s-(srCQxDqP3oEnGZTg;+7yev2@${zpt#}~VCV`t*R zT_oFt`QQ{7i;)ITa^R4|k9O>|Ntrh2#rp)jKTv00Uzw((jPx#N@uHU+bwlIc;Z_^%5uFooj(WYOy(&%}JC;Nxgi4{rr;bn!V(^4J<>0z1!sTlj6>yt#M~?&U9k`L4=R zS3fhMbLg8kZTeb$kL`}?xDKvHYiGS)b>4aBm9x)2ySvXw;YMXpkcyHpc*`|J@Y#W2 z8b{9gT963ttup!)M{Id97f-+kn~j*s);m*bhNPAP%=;hZ?UDM4`W zJMg*ipA^@H?uQpGU8B%3s0~>r&{M{s@8Eqj!)iGX5SmEFwiuur_-x@zwpr}a{m837 zZpt(6v{G>UV@(V8UN{TG0rHBSjP5MVNW-DR!8~B|=5wMtuKuw}UNc*_c3s(g#dYN^ zZ}^LH=>^x9W9qM%f9cNK%WuE!_2rE3d13wKu(}wp@0aiQg#C8kHggM+9W>``R5&^I z4@~)mnq$McIGvho4%ix-NSg*U3FO1xeCbPHDwke*Y5AV-`5t~{N3}&>Gw+^ozvPlj z)~&6?*X!>0S#GUBo>U#h&XZ0$soVX0=tCbWFMa7tyPZhu$Yw(yGvjnPNQf;b1_u|+ zgQp3_IdbIib!3Ba@U{{%(X_!>$}f%@v^5@BIsP7}zj1;uC!#MrZ@THG;;jTLIds7H zh$D{Zj+5;oqtx(@6W4d#u}7tIvD@JZ*-6nTKS}8G11wR%*LDY=CvzDS(L+4m3i0C> zj7pq42d^K!p)+D+I0=qR)n_H*yi~lJbX@vpeoCXylfs&$9~skgu|F5ag*R${V~QI# ztS|T6eQ$a1yUs1Y@wz{&559d@eTscYIq8*8E3f^xKU_8)v$1>dt^F-fw%MteIqEbm z&%&60f;#h#9T!H$scXE1|KJ%rk>hsu9KHN5exb|8?ZOK$EN7m1X7`LxrL%VJ{848B z>;3edYpb`nOW#&IU0-)7&#QoURA#Mt#xtJLt$NNq_uS5@TfJcv;m;NfPB|f9Re{Nn zU25jS3l4CTqJ=^@+CUTfJW;4#PwSZ>bM)apau# z#(Grj9tyk(U!VYcq7(0koB4+yF+}JMkJ>hqR`N9SdzTx#k;yzzoS7QJ0l`gRf^qG!KTaI(_#(0tS zTy5uD&lZ{s>+0{9Uw8Elxt%l^*7A< znr8omXXYe)%_|ZA*lP9>Y<7`@$5Z1i2j4Ra-{8q^qk~^M=9pu4>jFNoG1pvkO?kl! zUa;E+MRpbb#TjEQukNBU>+TuDxQb$7T&?RIGpBymS!Z<*RAC@Ma|I5Dvs~&x3E&$? znw6c!1{@ui+CdALI_*hie0(*&F)86}V`wkT$f7&ywF`8-PH{O5!sf`~t{r%Lx)bl1 z()=S+w4a^zEwW-o{yH_{<*i--!6Yt zsXxkEHlF#o^5!@GQhC}5$98_F|4LfddFEemWb*_YN2ijG+&OY5n4F@#O`3(c@zXy2 zXTUA1#5`l;(d5Jr&UC|DI9FbIWjX!y)B6vrui}qu_`(b!yS@}Rb8#`@0-9Bjw0?o6 zW6B3U@PYE87rm$)b<|OvVZ)?B%u%KeBONnCYEZkGF&~x;gZZ#VBVGhn9G+E=$nX<1 zhGCp*G3`eLKUOpJTRb>UG4`+k2mIIG&d-r9M{W_~7}u%Elb%$+l~kWp=NQO`lhJ-u z9uFIPC6<#d9xPU9d7N>Taop~|*Jn>UgF<$BUC^x&6O!D`9ma+(z+GSSgWQD{{$kNI z$~eJql(u`@jK%@7##i&#B3*tl<-aInRkhx+v%VL;PyG~YrT40fuPJ}@%YR-jx#V-@ z$Z~M`QvIE@fAxkRDnIy>-&YPg|7;4o)RIXO#+>d$~dt`))z0uM{(s()DHAs3k# z45rCqQ9-z_2{y+uaL2@qnG{%geYKfy01NGQk)A-8?}y+_`P`eWU;pWjZ#i z;4i>Cyl?UD!*w0lgX&g#8GdClFE%YL-^n7n!f}(6S59J77#2JDtFOMgGc0t$YbW`b z4?0>HE$qdnYwviA#{n{D57vJ4-W3g7S;9&yad7!V6Gw@BjLy#hxs9idscd5Df< z_Ye#@>ld2P)51=EvFMD^o6XQJHSZUT7tV2fM(ONLE|VxKON;` zoVZ38rRETrj^pjz%{jYYCuC03M6^f8r@_l%c#cvI54HndaCaik9(X9-f&_kI_*-G_ zB)6(Vw^titn_jDT{WwdfN%cb{->AEaTPlzvDuZ@AbjSci`7nl4|MaInUEcfN_m&sF z@P*xz)ewM?c5Sd~TId~Agg8T7Cop3=VsY;>j+1-- zMCIm=g{2(>T#r5W*zOdD>_yI>zFIhYHiC|1k{hoNdl(MWEXQNP*va?dF9lwG99G&j zUeWv+9>WBke+%G=-auJX?R{qgdYb%&R)Zu@rm;a8tj ze*70+Ri1S0#?EQ&e(-I=!Ra0z3bFG66}{w}!7p}R>h$iJ z&wQruvv>Y8zCzn3*rB7Rdu6Sbd)oTJwG~)x*LnB5>I&wzdL(^BO&``15QAb41$1-X zy}|SAalL!G?z3~=t>ZDcvT^UD8*7vRKAhlVT*uiQxt+MLf!UeIAZjNrb+E{QBSj(% zigndhS9M=?!&?UZxZ{rN@P}{9&!xtFIgW3Ugim-Ec`pY!hgU5wF)UI>#Ic$O>hgVg zsS_FxK;|iVdQ4YBV{|_7_ogeC17vD(Pj6RxU}w7xOTAbAjj!Ea{{H`bxcvUV|Lgj@ zX#3Zf(dx&SwyiF|`)B{Ayy#^wsK1`JZ$~%!=d%bm7xd?#@lZaC=a!$DgQ;VK#W;4m zc8l$$aO|1S7F6axeX!_w&U2o#`=K~x>d}YKP3XSvTCeY#DeD~Et}RYI@u-E{EAg8v zz-QJY^*YvfKBR#;fQpO}!(+Gpp7*?`JA!v~s2`&x4I)-ixyR8UG*LEq#gTK0c0KNm zGl1FI#DGSi6Ad<{PH=!X#e*w;cu>k~2#$g%6i04x1ph~ZBcHEa@RO1=BxFs$mUBRF zBI5#QhQ&PERG*Ka#~y$bO>STPV`R)JU;MLcH=p#)#GWq?N8#6Ej4=uxdr})bB||zu z#<6KjNh2J_4QMb29k1Va_kHDpb3al3^e5k5zVzVN>z(rb%T4v6w_kX}tIGHP$l2wv zBOX)j-mc$N&}Uk~{c}8=D@2dsjMlzm&yL*!8h%*-%msIn`taI(X6xO4b3)6Oop#!3 z-6Gy|Y!yPTeyVPQ%QtjT<+1 zr#N(;PSJH?A!rYN;7`*4gZD@ecuRI#eC+`C_ID@ zhb^>@JwC;)PQHy?#(_K6*pV|wEtucF`qrIpR6XD~jmw^)&)8@jvgljQ+1K!S|7v*1 zq1RnwcToww44_JE_b$4DgT$^r5B(2Qr0xfDs#Y5AtvmbAlkuFG2NCAO7&yR7^l*{g z3}@&;BJjapZjKzzcoW>^^Uxcop2ZI%4*xhM?e>PzIDoedB4Z@K5<}!2=WGGIu{v%$ zb9$b4+TCZjd-sr!9lLw&*-hvheOm|~M2{B&_9GD{ewyzLxww$K!BP1;%KS;2b?fUr z_d4A^f9)5_yZ+bv%iI6tBjvDiK)s1ufBXD^ear9u=`WY(oPKisM*I4CJ@hsVcX;px z?5O$APmRmN%saLhyf}6zrskcac#d5;*xIDeFuaD9hi`C(EBIbV^KiLaZx$ry*W1_T zyf&eQGZ*-}z?d0hXVsh4^*H{nsz;xlDeKPTyQRVzGf%qLPFL3kJ8HVN0`nBztllLA zQcjNb`OklT_qvW%hh4=9C!Ek3CrS&sED+Lf29co&BDB?y@I38D0CqD@64Wo0BL{oF z0SpQUcZ(hGm7|A2KK0a7J3&Thqw-{2oWjF#`}NyT3r-*Iq}TWr{w}mbn-s@!`bGX| zq7$w?xhq;QTg`8&UkS8(HxE1^?}v9bR_E^(9eTzPm>)vmjf2D9whPaJ%p(dB{a z6XyHS+g#GHkmq;i8_2-i5$urp7N@^%eSy!hlhwG6z2jSj8AtBQMdNj z*LP-bsDPi!q1V+(cTPW-(uE-iW?VdK&-i%Yixabxc5Gm^!}$l{8RP~g+GO>Lv4rOp zpgbfL0nCNlK;Ux}8k+zKLS7gJ=YUOH_}f(xA|niUU*F5ZCX12u+nbKZ0elWG=>vH! z_t2Y|1JR96(+`1xaTMLo?QRhmv1fSzyHGW=fC{!a(_Km_m#JM$^+%qzxdMfir2inJmE=?E88F3KK0}E zKKJ8qEPS0&Cj1@_YdWwA->;v+`SLr{3~*K0KKgocZ7|s4rfV6+Tja zd|$2sZcc0H^C%%ar-vds9m{dtjszXUTR2PUl-;~}XO0=eJkd`GtWm~I`;4jYa^~x( zG%bgAc!{s{l^t9RTQ)A;WG!;!YgVr*x782Bod1Cf%U`|zef53vyXps9H zN2Eo81%NuckKD(I;4;RX$SiULOwK)BwAwvcc|Ge{&+3j%DI(z!5`)|q)FPw1;)laO zJdMs|ce-5lBMgW0IH9E{3uX&LMt}o%3S{AIwa@U_1#H^1sk^nq7zyT*(8B5pX8G6Z zXPcj;%igLvIDr3bfHbE|b97m>YBFYv_gTMB=g7bQwQrP9oquup-#`1F`kB_->d|_A z?Y8dBU-VB-EN}YhbIJ+NKE67APh!`1!K;56SFa}_EPBXU_II?S!V8Sq+Gn1aHx>z%kAaD4}Ge<C2|H`OZ@AxE>xMh@ro&wT))mldfDAm}00zVe!H%7QabLo5g!}B?#pUo3%rHAL zr0{X3)4*ZAG|bkYz&RE7Hb3>LPjyEvXmY>YVkLq^M>lb*pwQ>uiu*Ft;`3}cF1I>- zn6F&JPrSD(2J?{;!aH+B!~@@tcWcU`nNe{J@B8r{P>o|}ge)QlIrhK|A7fm`;psHw z+Kv~T+On0NX9u&1SxQ>Ge&(p0Bj-H6{?%`kfB3ue%KP4QUb*pGx73fq>|gie+sn}} zJgWTCzx>(q?B}0Y9(C}eIy;^R-uQ~e490WZPA}+ubakO|FrIm4e7C&vG(3N0F4>Jc zDRZLiN6c*Ev{l#Ie|UmrZfS3G=OJ$=(xFGa69{!eZ%%o_-Lq}qs(N%s*PuHe*_GS9 zL$8-v23%hOf3qTSa7Cu;Jkx2S1ac6vl5s!WjedkOJ{#+oWbrj3A! zJ%T2}V<9>PF9y<+i;md|(3kT(;g9wRvmIYQ6WS|y9Qq?M;LS7wUgAGJc_c23!bg0F zuH`G?u-$GV6{y z=)rXbu(LkK-@TLGBGqd@=Ov_~z*aPv0bzu3-gfPFvvw30U35`rXb@^w;pjq$!Iqy7 zF8WU+povn$#q$A98W>2g?!lcvV-VZ%v{#M?j$H78Ai;Yi1@ulsj^Jb>;5ivQ(s&uY z!B4d3_Jftb$bmB+cJ0}@`woIrB)g4vK@?bf)9G`7d?K60)>C>Rvbh`TFQEA#%net6 zzI^okA1{}EZN~`zrEuht zgz@jnaId%4JmLPG4!t(4ZFc&$`?iYoMb(i$sU8XMs1E?l`%DG0 z7-CgrRb#i#sX1~WAV!75cO2+`Ajj_ObDj>&D>-%)7^t5=#n4?us zv8CQ2v^%%s_Srr=pa^6bZu)_349D&iVvzHn0QD8qWf*V9B>*q!7I|144Vnbw!d$5K za7{=)>1_N^r`>FA0=G4|bV_iqF^)Y>-Tih(g=6RNrP(R8V`a>w8K<9yj(&Nr=jxw! zduob5WW$Iv-10H}3rVwaMaSyvs?E8lexmi-%dacvz58S3{eO62-G^_hPpwzGTwgzX z;SW8tob#hEDbIY)Gs=GT12OEF9XZ*xdbN=F4ug#b^PK;Xn&;8)VSOekH;#bbY!n=? z$0x~~D;{*qDVIL*GM{Wf%{90wZ}r|axSYS+U{2C3OgtE8ENw+Pf1^R~~hJo?@H<yEq1HJ5$1y#K8q?mp4_s8Ww@>;3Wiowah<@duTE`YZpqoc@naEBkDyza_DZ9C@D~ z9IDNefQQr2kH{kYl5)D{hIwLsu+^UP;)6WpE?AJo=D^8`GN*1{nMdYC@}M#%r(pWi2i(KK*jnfddcEusHp)Xtua!WIS=3Ij7D7 zfE@^5qx*qnyp(~N@s)|nq=LKvrl36ir3uLgSLO2Ub;{BwY5L}RIi+wTTl{1z&@*j( z!>842cKu+=j_o_jtzW5c-F)nl^7sGa{Q9iYjrG;Ded|}<>TjUezaRXimy|QlKCNv2 z+_mMXr#!xUU2UoEkw+Lv`hJ?aw2gBm^F(#>(J^^tu7&iKkJC!t97sLc zr#>lsMAt%_?+RwhQkSx%p(oeF(%`_Tm^)q{wX3i|^&p)^rk#*_^Ui#w-)I$#14d|f zjsBKj>gjV^t}L;|4ZVq>8Lvd;N!vETL)yZWPiXU_@+N(!of@C9ma~V? zWX-xY-Ld+8_uOCKAiBPM^1~OGzyD7kD_^X4$2sx`%7f*g`U={Q{Q5cFPnjO|q$iYB zYgU!(zOcD_1&yrmcqw=_+n9Jo2h4Btrgf6z@Gd+@BRIyS*BmhY7hOA2_bM5O%drY{ zS)DKlS7qRf`e);6rw)ex@XlC%f;_jla%uyH-8tOE;M)zl>tFXkT*YH^ZM*Fq?|8?W znm+7E?qLqSR_>f>w5?9=YwF~FVs*N1!cY7P8>ArTh=D+?{5h~uoEHKGFgSm~uGVKT z-S@LVu#&PG@=%)HIs;`4&Yh9hHwL%^Q2zyPuG>_dJ`^bZ)l&lHpZw$}yORQA*qOrz zE$YV!8OOJS8BnYCyUpE7C6v{fbqM(bQmP?M7E z+w!!Prmqx^>5~(kv{4VQei&3XXLwQKRlZ*Zk>!29qYkK6hdrxs3&kNhzF+y0a0jSDCA z;I%wGo6ne`1uVzp&QZU4`!~B|^$-2c1?5A3b8+2+SN_!9_`UUT{gl&=DZlVjFD@t6 z`{Rcnd01^;7hLrT_Z?dwuHTc=xETE`GTF;fLv%)ae4-n8P7Y4U=r|{Cp=HtPmoM3M z8#IBg$M5Jjs=Ub72F-ZjbLwD%<&;^Sxu#w8!bz{dp_^yMqWkTbHNT_6WZb&@=k*o< zr!(B41DHmYahKK3FR#1wos19Q;|2^xR95|npwJ%K$5hU6RJb7wlSP5kCIk=CfobO+ z=T7h#DZ-!Og^%&X2s?25w56O7c!xZ z^3aj%X{IggL3#K@|16d*irp5oW9QJt++*k1@dy55c+%212={he_4wVEB`+PuLt}^; zJ1N{#m%foH`O%9+*P?N>X@kD$pHzKtYuiqe=Q!BB7WTMs^3$bjs$KVx+tvrRm78w( zV)@JkmzIC{laH6HZ`e`}nK@RkXGi6%pFFjk`Msx=<4$~PIrz~Bb@Kqf;LypSzP=`K zBFi9|Zg)>(^JYpc>41Z&0{JHw?sr9Wq@Inlq<<*OLMFu89 zCZb78&s+=oiR4X=CXRa7sSCdYTfdAUFXUR<59!}8&voDqYB#7X{T4F~j*JWbm`5JW z;mpmY++*k1osMzr7Rh*zCzH_8@-qDG(;T=`cqOqXng*sc@67$s;I{WRAz{wRI52@dqtZrrGM-hNlP?y4KgCqDS;@(*wMWPRbRK1fyH zAFs>R`Z<{W$`AhP>E(>?c|qBD^ikdW=G(Sz+x^5keEPVfyQOVZ+!neWoZ!Yj;vG4W zXYg-v#vk?Sv~eO#fB6A+LA@u_y&_GI`2lUCC!r;;vpt{dz-YP@o$?4g~)Ou<7lxap3 z6b1B)KFZ-pAJgs3^#`XNzw0pOKmCn`9~M5~&KG7Mg=xd1FloMX|l=9+No?c%&dwMzih{MY2dVhRt94*=56HTs%~V zpXkyCkNFjgPm55ewrsXjTDrcGTLBz{Kz#tn?X=>RtWf>Tqp;EV`ZaUEb z!#L7G!I8SZ?nr%I{q9D6QvLSZ?x^?1H7wi($S6?yl*K@#$A=Sr#pD?c-LjbN~Ef@XD?6 zK91kv&}+w?^#TD?(4NOxRuro%6vsh(Hv=R!UYzkj2O#s0|_=w{w(3 z-nZ-HIo5T?(#hDOVDfqRfCKkKF__6Haqt{BhQdod+)Zi45m6kyNn@aAVuxK z0Z%?*CG#>gEOa`IN0Awxl11*Z+p*{S)pkQpyX=BEcJf;c$KK}&UFg%%zt$(ZLuV4w z4(_6BQQPPkn&_;^R+z6DlfE(5oOX0JItY%u>xA?0ROV3z6$r< z-~HX)V#9s(Y;>Ir!PorKKF@mfajbRS{qriTkE)&~+s(|O$r}X|^ zb$qKGP0tlD3j_0^3Qmf$v`mzTILAdel#tMrEktO?Hb$$w7>ThP>kb|sjy!Ut=o7R8 z#lU2#V-qyNS3oPJ>Eqsx*)^QypSECFy%Bt$U$b;w)G9O%qbu~Q7x7A}JQE6k88xXg zZ74hAms1gZP2Ug)hKNUELW@iC;OTD+aNG9jw>KS~1Cgs9`06^2o%41douTs8D?21} z$3i$?o+FRUx5#Mp(Z_E&?ihpGhvrsyv=ig7<+T&(G8*wkbONYMz%zYBZDL2#-x%_{ zes{d?;_tn`d~wT{%GH-_F6Y1NqVkDzH)ZfFF(IL@2pcE+KpEj z?vK-Xu#7oMfV=jYpQH901@@?I!t1n$L*}qLJj?4}cxxxl0otkCbooAs-8hFH9};;4 zCK|=X4)8~h1xLPkYC{N53qgzEP4!zU^o9MiQAC$MXz1a*`~G=tcf|}X4;jOTxPcD+ zf(tI_8rS2rYwFLO-d`QvhRV2|b)Z=}0~wF$bJkX)1kyvS8=4|BxD=d#EEb~N4Q>mP zZSlc4QBV$NJ9tjs2W&WSio=P2>|-D6Ca@zMW!h0Db!gEa4T&xC?U-$O^7@$cgzeOT zf({UBnlD+}PQcJ4H3`+BBZe)`n-0(mJQ6LU(3*)GV)Rc0N5~lcd{^1~r?2+LFgCfQ ztk?7re>n@xFAFzMd$C3KiZoai#d&PC-qH{k}F8r%2 z%kA~2QT#wkeblqQcD7G>{wtqZUik9omS;TsxO#8=(6ZWY+`aMp+THl9rujSAi@wlE z#^xm47c#W)jU5{xuP(fDbk2E;93uX*xAaMx4S;@l9lI0ULszbsDuu_Ey5M!1aMoF8 zb+(C4I8AWt%IPp$ijRNbM2e8&3C+i9vUA$TW3n&_{KM~ zs1?qtubzMY`I{?KPpa3-9y-UIX)A#QrN})D4sSMx6od(e)8t4~)_`5`Y&#|zCHw@>%r2K6mflDHhZdj3$`8Vu-kA@AdXfH%Y#W1aZXa^U!Sxr* zwv~JDxwqV~`SWGV=e|^Ky7o)uf7dqvwr#7=C{!56u$Y)MzP}}%u_p5w>6#au&wL}Ua_UeAAfvj zW9@8hq=eWVwl^U>&-GHLXh$pBHgDeCon*Nc72SuQYx9G>=imjltIs#(fmi7~&vgw$ zS8oFyx*i|>=ttL_dFGi9)|J79b=P=OWuPy{srrsUSXLMW;}}kW#IW}23C0Sa5Odrx zh!|}bD{wsZM50?&`IrVnmDRP$$!UAg!hJ-F=X3%7R+1iiARK~p;-Ia?fC&u_Cx;(s zM7!A1>zX1PkCW8Ct)G+!V9X|mKHQ9{k4Uys_)$o7lb2K(dhrJC6cP_xLj#_ut4?57L#LlBJ>o5~fR zx~5$CmzR{!-}Ke)!!PLcyW@xL`(5SPuRX3DbK;ZA@z1KyBRt`VvcAr(9rZyuJ8}U` z(HPSR=5%B+3A{mg#CZo-@@CW6OFqKR)aK7T)yB@$f{%`{m$4=64BP5j|AfHJ^>Rz$ zhh}pCjUJ|E&n-ey$4=RqYlnwUc-T_1(54sG;9V`haHf2y@P|6|0IbgGV^s+M+G@&# z9W)>W2#GKtN=XJF6_8zu2m}xoN65L4((hqFrgQ-pPRYXxUQe?cv@3U?!wG_Vj29C) zE&^eo7%F_hbPhR3MhqI72rF%~iy!3V@k3im04|uVbIjP|q;tsuEc6N5!a<5w3dnJj zeI^vTql|c_JsiPEgm*&5PnzFlR5)! z4%o5#O!Jm{{AjLNESqC=O#Ad-$vlnjqs0Sio$ggfeB0N)UatJq)#Xb!e6^had!H%S z-d%4=)?@VgMs@vy+tzYK-It&K&!1hM_u`YwvBy89eAiU8y>ec**JQD zCUzwBfWdC^DcUEDf@9h)Rf-1k;X6Du>NbHB>p1h^rJcyGq8FX62hg~q+S%2$-B&9A zu9@lokRuAfnRKW_KjVxux=wZST~-l$usWHwmH7|5j}8HX;D8|P6_!yaD8%(Q`5m_` zr86f0O6Lbxgi}vFwNpArBJdi-Xl3dW(1R8V>X?y`C~%xS<@9`kSLN`?0)}E!Y6~H& zRAn5$wkC;H9XQ4k+b}@zZS}1Azyc$aQ5hM!haU&73=SMPy5!^V)djckAvh(S6^R9? zgcJNkyoax{1q&6l-B;)}mVB-kY}{oEICRr*fi8RR*3QdL-EAr-V2txYNbCjN;=FBY;B3Lqw%NpZP*R?aGcUn21{h=?odH)JTO``K zuO!{TAGGI{XwR7Rd5K2t_=fOvn5=5~j=JDkU3qa?J^j9~!Ww%29NeJ}9iUoYlT|l; z@Pi+`v?6(Gy;ipSK6#FPJ`^aBmfp;!6fS2$eT=0whgwQ>0l)%NC4g1tD zf7P9su&TcE>-*SvG>j+1%BPLreBq&Q(hwT6(4+sE19{c$vdb>(eswC2y`5|6Kk4`j z*)Q{etkv8&(pT4Gi=3Q5oE3W-Qw+pW~qRO|+{hbqk*7rWO zJolw1)mP2xH^U!)MA@+4`feW6nf&f}Xm95k-Z;rLHlDH}B75bUoyqP!wnE$32>b}# zmN%iroX_G{J2B2%`;5ybWrM#e+Rq4fdnG_jVm4;7jj@fL*iJlzIHakawy&XS( z9^-(GZ9E_w+knj^27yKdVxGh#2@O~3|LuE!X>&OD-gC}9=iVb=N&D`7_Fn5>|Fr&p z{cEkgcDeJ>2V?uySuvnK+$MLA8S;}anOENQb8jrCoOx0?^610MUi-w`7x7Qqd#Scc z9qf9l)1GbGbNSc<9d7sWiv7^0Iahene~v=CX2+yD48Or=JHT_6UtZ29;b}u@lbqEd zu|4dCR}`JuqzpWg4)rB|RiTkT>aEjOf9BdVHb=*Su7ELC{>JiC^&8*uksq_C30>E* zNgG?o3q9zYpiVjCJ8PxN)dkwyZ`{MH(%AbGYf0qCBS6?mj;-i$h&8s37`)8M2Tt51rFE0lj zF{g^w8|%k!F#0_;;@t|q=xSCj@1=3G!dH9Cc}9-iR}6h8nq#-HR-2eA$BvF+5e>__ zY9kSmZ;Gu~A6@%cS+R6=x&23XmLL7;Z6Wg~syXrKUWY4>x${`1e)hXhEEm4_jpe9$ z@$HC14=4kJ17#@Y#YN(5oX(#JKb>DIyiFd;%YG!U=^{Ij4qjX5csXNsgB|dUjm@^M zJXvs>?26x49?{@4P?S87%a`-I*=xMH?Qi z{)ya2C!QH<=M&%cu6I@ZOP#O7mKU$ksV!vZi!AD$n8;VnpN9{4Fs5P0oj+H{m=68Y zOE0ZFPb_e`^DAHZ%A?^B4i5nb-rJ@@igF?%mC3z!QwkALdN&jYv7NwbwQhA%bP8{% z-L>!Ea)<<=p~;gCAe~&R@W;y6j4pL$V@TZaLtd|J5W4$#oz9tKr#KD~4q0Sb4FN5j zyfWYzzURQn3SE+Cc{Jh-R%2?0dt;tfe}msmcv&yFDL1n0MF$byU;N9jhBNO_+u2Y_lsU0VtxH&hI zLE@Wdc8n9wcF$I@sd&nHs2eZccGOu#qQkdeH0C^Exbf$w8-yECg|M1MiJo zvC}o0tNHWLpIc(&cyo-H&xmI`7jD%7k6e%G(4+A7MT-^zvLPJ$;y~iED96cH4xM6f zJcxl@4Ur~QHNT|{A`Lxg(5Ya}b9d*iIx*45S~x_`yiovfsyl{GXln=CgkR@}hR6YD z@(fOdpMrOf@fCfW*An$;$nGoeekv9@arR*1w?@P9=WrR=X~flu2hEPer+!vnKP32~ z0WJ7|Ui|3>eqb~7Pe1-l`R4E6P~JJ`q_TclbfkvD^2h&84{t4J%^N6RzViF!(qI4i zGXKQEviYTu1!FjplArmz-_FUubU^TPuN(YJS`!xekd=9K9oIE6@0hQ-(PNQ1$8LIx zlVxM1ET8Z?IircpLc>S&Wq3Z^qP7>Fd$Bz9z{Bx1vlZoz8}2E$eDR)$!=I1!=<$im z%KXJNVQj;C)-Rn{-uR9)%Sop#D2K#`FMI7hJe)2PUmx$9zwrDEm0f`!I!8+tE~7j| zt0UWG{+2yEtDIx@_FMu`F14TsigZldFy@o$rPmDg;LUpb^ga!7jn2-xFNvCO=}D6i?}__A^>S zC;4RHMLujWo28@0E@%6bH;!+BblMP=U(q%TY7ph8L{qMoS1 zR9?@Ll2JyHWD-Zw zdEl%8q|-(hWzt}k%{(Fm`6!FXo-*k?d8G(#68=*v4ZePm30%O&3p~k&ocJ`J$Kp?x z>4!+j$0uI!t)e&+O^918da0;Q-M8;`1-YHXtvQLubZR6QdLNcci$E{jJJ#&p)Tv zTR99vtgok6avS#dQ?eqik1cJ6PSR!%?nlydyZ$CiT+JE-ir zS9BOd_i{KL8rmM3z(<#M*eoUf*{1x?Lw@*b_vi&L+p#vR&1=Wnw6-medecd;8Adp? zWzJE1aL6MiJW-{xB6N9Y?H(f!yU!?(KlnuX(ck^FeC6ZcD0h@K!G&q@_o?zHpZJ&M zvdcd>+(|`NmsA_A_<$z(;sd@Vk1C}5@DKdR$m`C0myQuTntrkw%F5^f2+ZgRxk~Id zxw2W2$9lCHk#BRz?79&+%@t|nq0_hyy|xYPcSHD_qH)cNxs>gpRFx<>0>YR`LLe9j z@yeFD8uz-L)PaG9+RYhJ9N)&(=qPn#os_@M@NVNX9z6V@;2I}ocTgS;Sfl2!;D-*K zpp*qVQ=ydcTw~Sw%9Mrz3MuYd>4tTRu}OnNRO^qnKd)k zf>ece%|DZAOjBl@44ty;+~D9~6*+S5I-XVz4-5=cj-4SSSGp;UCf`cOLI@d!8(q<+ zy_K*&K7O+H(TB^*dt*NQhj*2q{>9zlu%4(Ew0X5GUZ$!B)Q>;ysB-pu7FIj94aB0y zIR_tDEsQhl%w}xZFuYI<4oQbI!>qliFQ4T(H3I(ljP5*?%l553ro+~rCGfyy{OeBJ zZ@gmzlf7HEY*{t3WT@RpQ`+8U_2E0c zVPh>Sl-vW04B4y^o4YN3+fe4#i25H~v}lo0@rgV10JIITSTOeBXFl_po5IMyC78c0 z&eIukf=Hv^jDS|}Q8t~d|{jc9Hr=C1eHa;}0AG^<)S=Oz3p@nvpo*C}eN<27yteUbsr+G9GS$wDjZ zRku!~&1tL@_Ntpm(t;y;HyF;|cCtFW@}_<(pL*kZdPL#VL-wvk;igI+dGOKU`S5Sw zS?>DIs)#vXs1~(Fi;0b1w#43GRSKB-Q#dQ<1ChYf$^O88VOu%3oL0X3cQ=&tE;^@b z!wpq*^b;;^RYeztPTnNtaG_ql+-MSC&oTn}}tG-SrJ1TG`Gs&~GS?p@q zPYdEW^uPD~;~)R{v_->Pvimt|8aF~$GKSrC!+ekRx)=g@OGJ9Ho$!_&&SX^RZ9X7C zjnr@iCGKWQhA|3O(+)&$-)m~<7)xF_CE8Y@cb+Sw=wL*;qWp#daJ4&RZ+OFj8aK0L?{ zBitCzOzM~F=f-RK!GI6Lh|Z)T;ndG#J*($a5Bx6s^IjKZvDE>Vi zbFb@Sp!Sdc`|p(52kuuk#r(PNQNNyA=RnFKoed{rjSI(au2jt?LOkI)FtM3VC8(ZS&u$7`z-sjC}h$%1{syW4NSy^=8}=;dVCgn{fW(7r!_nh_NYX$)V@#Yf<5~as3}-vC4FYn)B^e zLM-Aqa?AHM4vLS^i6$^K5^xy<2Hx-p2975H4UJ>!RZ9BO0cjuHO8# zX#C(omdQic4sr%le*CH@^+-u)Uf0jAnw&4x~gbyzxwbOf+g2yFXF>p5R|;f2)@(^vw?q8tfal<#IrzENiUBWQ~% z48;*VXGG`>ffc{-W*{^k`MbsQ(P(M~J{sUdDH~Ikhd;$7(?-0NO=Cb74u*`;ba0&b zfj2q=8iIS-Nyz%~D-9)s;5v0j$G`}O`>x%GN9K3WwL}(@dx^hu%Bp%e@(13BA9+~$ z@IU{h^3p%vROL~J743$1!BDPQs^70)H_JQO_u%6|AAaQTR`E!_)$`{)uw0W@rhMl2 zXxE8PXnhsIS?u-jBe4oShT@-o>gjUlU3ZrISKnWj-}qp;{)(T*yW#OckC*}XVwoZI zBV&EK&0Y>Vd*5=%aR-z`j+qlvB1e>c_m7VuZF;&qdh6QIH=RnK`W=p>=>&N?*Z}QO z`%9-or&FioO`UN~-%N*TzuHFfFwc0~tj*MUQs+h9@5NbLf~Wc%@H#NwonQF21?7MI z==+UGOap{N4iyLCm&b;#IMwdfs75}VLC%+pD ztb4(uI!rP|t92cwZY|_A{ljjxLNhwqwCwoR^#E*o6t-`OLyv&xT6M?$abH(U99wee zf#~)tuDD`moVR@LbDvur6&)J@hN5BaY?%ph0%r`N5Qyc#7_3@Du@iN72H!Zs0H;j_o`j51(w{ zqruGbj3ZwAokx~Q`Gb`QzGMdg@92tqt}~L7SI^%96!P;7Eaj5_>PTaZ@18T-R67m2 zdt{>_OYqF{uH}Qy@o_SrKI(``)?bz$0TPvpM^e!;d~RcJK@L9^WEQ`n)5KK6H|~`{d!CGuh<< zC-_TfN*ePze;ai|hw^l?F(r&VH$I=t-*AR2-QIyunA+V!CExSmcgAabE6bmM_3LG@ z92A?^4wXma?TtVGPrqH>_U^Y-XtG^`5N!+$c1nAYv_0^5z^(4S{Ez4Oq&%LFrE4!Q zIW@oFOGmsRWd9PQrWRGB5xry4N{{Fi=m1D)8!37}0<3R#a>WIT~x8(0`Ay7O8AVJuv@uxh}VJC*>Tro6^Z z00c()-0LJIE?_WXl$g-qpaVlW;HRFt0rXoVfrrMU(WC+F1dqusGaioZ@-Oh&?R~C-F-$Z`J4_#uUXRI@K+v(-;Qbp@W^vz=~e25dQvY^N8}+h z`7$wjS@*TqURyoSP6Qb8fTfg7zI&rQ)a}NzVL1=)Bvy}PO zfeyTL?Rny=t>t}XT+5qy$?G>-)q{r|v@eu_VGf+UENHX6s&}EET^Dn<8^ajB7#}-& zc4K+!foIF3KX^J;V8`@LtXWu59*s8(W|vEjJ-!@q_JL*goc+onM;%n&c;VSG$3DO8 zj)oXYHcTwahs$m@OBu0XNtbgTNiTe}J-RnmLKFJQhWzS$7^~b=JWIKujU!DSxNqU7 zH6XwH>E9~v`N%t}@3zm{b5=R!j1$VSC(f_rjW6WnAVaoH(1C8wO4N=Yb=_#BGjU+o z*grV9*N+Kq^cAk0Ilh?!(x%7rCCcIj8-pM8!U&G*#uRzC18Dp6gz*HB5Y?FiBLuMAYgOqIXTnV5Me+6GH6rsa;3v�P67bnj_~_@Fnjh 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 literal 0 HcmV?d00001 diff --git a/v0.1.6/examples/index.html b/v0.1.6/examples/index.html new file mode 100644 index 0000000..c625a69 --- /dev/null +++ b/v0.1.6/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

                      List of Examples

                      NameprovidesDocumentationComment
                      A Benchmark for Difference of Convexcontains a few simple functions
                      Bézier Curves and Minimizing their Accelerationtools Bézier curves and their acceleration📚
                      Solving Rosenbrock with Difference of ConvexDoC split of Rosenbrock📚uses a Rosenbrock based metric
                      Difference of Convex vs. Frank-Wolfeclosed-form sub solver
                      Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
                      Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
                      Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚
                      The Rayleigh Quotient$f$, $\operatorname{grad}f$ (A/I), $\operatorname{Hess}f$ (A/I), objective📚
                      Total Variation Minimization$f$, $\operatorname{prox}f$ (A/I), objective📚

                      Symbols:

                      • A Allocating variant
                      • I In-place variant
                      • 📚 link to documented functions in the documentation
                      diff --git a/v0.1.6/helpers/error_measures/index.html b/v0.1.6/helpers/error_measures/index.html new file mode 100644 index 0000000..c71b436 --- /dev/null +++ b/v0.1.6/helpers/error_measures/index.html @@ -0,0 +1,2 @@ + +Error measures · ManoptExamples.jl
                      diff --git a/v0.1.6/index.html b/v0.1.6/index.html new file mode 100644 index 0000000..c5313e5 --- /dev/null +++ b/v0.1.6/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

                      Welcome to ManoptExample.jl

                      This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

                      Each example usually consists of

                      • a cost function and additional objects, like the gradient or proximal maps, see objectives
                      • an example explaining how to use these, see examples

                      Helping functions that are used in one or more examples can be found in the section of functions in the menu.

                      diff --git a/v0.1.6/objectives/index.html b/v0.1.6/objectives/index.html new file mode 100644 index 0000000..979cd66 --- /dev/null +++ b/v0.1.6/objectives/index.html @@ -0,0 +1,187 @@ + +Objectives · ManoptExamples.jl

                      List of Objectives defined for the Examples

                      Rayleigh Quotient on the Sphere

                      See the Rayleigh example (TODO) to see these in use.

                      ManoptExamples.RayleighQuotientCostType
                      RayleighQuotientCost

                      A functor representing the Rayleigh Quotient cost function.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either

                      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                      or extended into the embedding as

                      \[f(x) = x^{\mathrm{T}}Ax, \qquad x ∈ ℝ^n,\]

                      which is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of $𝕊^{n-1}$.

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientCost(A)

                      Create the Rayleigh cost function.

                      See also

                      RayleighQuotientGrad!!, RayleighQuotientHess!!

                      source
                      ManoptExamples.RayleighQuotientGrad!!Type
                      RayleighQuotientGrad!!

                      A functor representing the Rayleigh Quotient gradient function.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either

                      \[\operatorname{grad} f(p) = 2 Ap - 2 (p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1},\]

                      or taking the Euclidean gradient of the Rayleigh quotient on the sphere as

                      \[∇f(x) = 2Ax, \qquad x ∈ ℝ^n.\]

                      For details, see Example 3.62 of [Bou23].

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientGrad!!(A)

                      Create the Rayleigh quotient gradient function.

                      See also

                      RayleighQuotientCost, RayleighQuotientHess!!

                      source
                      ManoptExamples.RayleighQuotientHess!!Type
                      RayleighQuotientHess!!

                      A functor representing the Rayleigh Quotient Hessian.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either

                      \[\operatorname{Hess} f(p)[X] = 2 \bigl(AX - (p^{mathrm{T}}AX)p - (p^{\mathrm{T}}Ap)X\bigr),\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1}\]

                      or taking the Euclidean Hessian of the Rayleigh quotient on the sphere as

                      \[∇^2f(x)[V] = 2AV, \qquad x, V ∈ ℝ^n.\]

                      For details, see Example 5.27 of [Bou23].

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientHess!!(A)

                      Create the Rayleigh quotient Hessian function.

                      See also

                      RayleighQuotientCost, RayleighQuotientGrad!!

                      source

                      Bézier Curves

                      See the Bezier Curves example to see these in use.

                      ManoptExamples.BezierSegmentType
                      BezierSegment

                      A type to capture a Bezier segment. With $n$ points, a Bézier segment of degree $n-1$ is stored. On the Euclidean manifold, this yields a polynomial of degree $n-1$.

                      This type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.

                      Not that this can also be used to represent tangent vectors on the control points of a segment.

                      See also: de_Casteljau.

                      Constructor

                      BezierSegment(pts::AbstractVector)

                      Given an abstract vector of pts generate the corresponding Bézier segment.

                      source
                      ManoptExamples.L2_acceleration_BezierMethod
                      L2_acceleration_Bezier(M,B,pts,λ,d)

                      compute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.

                      \[\frac{λ}{2}\sum_{i=0}^{N} d_{\mathcal M}(d_i, c_B(i))^2+ +\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

                      where for this formula the pts along the curve are equispaced and denoted by $t_i$ and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by $p_i$, and to each $p_i$ corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      See also

                      grad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier

                      source
                      ManoptExamples.acceleration_BezierMethod
                      acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{P},
                      +    degrees::AbstractVector{<:Integer},
                      +    T::AbstractVector{<:AbstractFloat},
                      +) where {P}

                      compute the value of the discrete Acceleration of the composite Bezier curve

                      \[\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

                      where for this formula the pts along the curve are equispaced and denoted by $t_i$, $i=1,…,N$, and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      This acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      See also

                      grad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    T::AbstractVector,
                      +    X::AbstractVector,
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector,
                      +    X::AbstractVector,
                      +)

                      Evaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment},
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X
                      +)

                      evaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    b::BezierSegment,
                      +    t::AbstractVector,
                      +    X::AbstractVector,
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::BezierSegment,
                      +    b::BezierSegment,
                      +    t::AbstractVector,
                      +    X::AbstractVector,
                      +)

                      evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

                      See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::BezierSegment,
                      +    b::BezierSegment,
                      +    t,
                      +    η,
                      +)

                      evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t$∈[0,1]$ on the curve and a tangent vector $η∈T_{β(t)}\mathcal M$. This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.de_CasteljauMethod
                      de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function

                      return the Bézier curve $β(⋅;b_0,…,b_n): [0,1] → \mathcal M$ defined by the control points $b_0,…,b_n∈\mathcal M$, $n∈\mathbb N$, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let $γ_{a,b}(t)$ denote the shortest geodesic connecting $a,b∈\mathcal M$. Then the curve is defined by the recursion

                      \[\begin{aligned} + β(t;b_0,b_1) &= \gamma_{b_0,b_1}(t)\\ + β(t;b_0,…,b_n) &= \gamma_{β(t;b_0,…,b_{n-1}), β(t;b_1,…,b_n)}(t), +\end{aligned}\]

                      and P is the type of a point on the Manifold M.

                      de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function

                      Given a vector of Bézier segments, i.e. a vector of control points $B=\bigl( (b_{0,0},…,b_{n_0,0}),…,(b_{0,m},… b_{n_m,m}) \bigr)$, where the different segments might be of different degree(s) $n_0,…,n_m$. The resulting composite Bézier curve $c_B:[0,m] → \mathcal M$ consists of $m$ segments which are Bézier curves.

                      \[c_B(t) := + \begin{cases} + β(t; b_{0,0},…,b_{n_0,0}) & \text{ if } t ∈[0,1]\\ + β(t-i; b_{0,i},…,b_{n_i,i}) & \text{ if } + t∈(i,i+1], \quad i∈\{1,…,m-1\}. + \end{cases}\]

                      de_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)
                      +de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)
                      +de_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector
                      +de_Casteljau(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +) -> AbstractVector

                      Evaluate the Bézier curve at time t or at times t in T.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +    Ξ::AbstractVector{<:BezierSegment}
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Θ::AbstractVector{<:BezierSegment}
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +    Ξ::AbstractVector{<:BezierSegment}
                      +)

                      evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in $[0,N]$, and each depending the corresponding segment(s). Here, $N$ is the length of B. For the mutating variant the result is computed in Θ.

                      See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X::AbstractVector{<:BezierSegment}
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment}
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X::AbstractVector{<:BezierSegment}
                      +)

                      evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,N]$, which depends only on the corresponding segment. Here, $N$ is the length of B. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    b::BezierSegment,
                      +    T::AbstractVector,
                      +    X::BezierSegment,
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y,
                      +    b::BezierSegment,
                      +    T::AbstractVector,
                      +    X::BezierSegment,
                      +)

                      evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in $t∈[0,1]$. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y,
                      +    b::BezierSegment,
                      +    t,
                      +    X::BezierSegment
                      +)

                      evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,1]$. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.get_Bezier_degreeMethod
                      get_Bezier_degree(M::AbstractManifold, b::BezierSegment)

                      return the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.

                      source
                      ManoptExamples.get_Bezier_degreesMethod
                      get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})

                      return the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.

                      source
                      ManoptExamples.get_Bezier_inner_pointsMethod
                      get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )
                      +get_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)

                      returns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned

                      source
                      ManoptExamples.get_Bezier_junction_tangent_vectorsMethod
                      get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
                      +get_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)

                      returns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.

                      source
                      ManoptExamples.get_Bezier_junctionsFunction
                      get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
                      +get_Bezier_junctions(M::AbstractManifold, b::BezierSegment)

                      returns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.

                      source
                      ManoptExamples.get_Bezier_pointsFunction
                      get_Bezier_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    reduce::Symbol=:default
                      +)
                      +get_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)

                      returns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.

                      This method reduces the points depending on the optional reduce symbol

                      • :default: no reduction is performed
                      • :continuous: for a continuous function, the junction points are doubled at $b_{0,i}=b_{n_{i-1},i-1}$, so only $b_{0,i}$ is in the vector.
                      • :differentiable: for a differentiable function additionally $\log_{b_{0,i}}b_{1,i} = -\log_{b_{n_{i-1},i-1}}b_{n_{i-1}-1,i-1}$ holds. hence $b_{n_{i-1}-1,i-1}$ is omitted.

                      If only one segment is given, all points of b, b.pts, is returned.

                      source
                      ManoptExamples.get_Bezier_segmentsMethod
                      get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])

                      returns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.

                      There are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let $c=(c_1,…,c_k)$ and $d=(d_1,…,d_m)$, where $m$ denotes the number of components the composite Bézier curve consists of. Then

                      • :default: $k = m + \sum_{i=1}^m d_i$ since each component requires one point more than its degree. The points are then ordered in tuples, i.e.

                        \[B = \bigl[ [c_1,…,c_{d_1+1}], (c_{d_1+2},…,c_{d_1+d_2+2}],…, [c_{k-m+1+d_m},…,c_{k}] \bigr]\]

                      • :continuous: $k = 1+ \sum_{i=1}{m} d_i$, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.

                        \[B = \bigl[ [c_1,…,c_{d_1+1}], [c_{d_1+1},…,c_{d_1+d_2+1}],…, [c_{k-1+d_m},…,b_{k}) \bigr]\]

                      • :differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence $k = 2 - m + \sum_{i=1}{m} d_i$ and at a junction point $b_n$ with its given prior point $c_{n-1}$, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as $b = \exp_{c_n}(-\log_{c_n} c_{n-1})$ such that the assumed differentiability holds
                      source
                      ManoptExamples.grad_L2_acceleration_BezierMethod
                      grad_L2_acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{P},
                      +    degrees::AbstractVector{<:Integer},
                      +    T::AbstractVector,
                      +    λ,
                      +    d::AbstractVector{P}
                      +) where {P}

                      compute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight $λ$ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in $[0,N]$), where $N$ is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting $λ=0$ yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.

                      Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      See also

                      grad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.

                      source
                      ManoptExamples.grad_acceleration_BezierMethod
                      grad_acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector,
                      +    degrees::AbstractVector{<:Integer}
                      +    T::AbstractVector
                      +)

                      compute the gradient of the discretized acceleration of a (composite) Bézier curve $c_B(t)$ on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in $[0,N]$, where $N$ is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set $λ=0$ therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.

                      See also

                      acceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.

                      source

                      Riemannian Mean

                      See the Riemannian mean example to see these in use.

                      ManoptExamples.RiemannianMeanCostType
                      RiemannianMeanCost{P}

                      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                      \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

                      where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

                      Constructor

                      RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

                      Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

                      See also

                      RiemannianMeanGradient!!, Riemannian_mean_objective

                      source
                      ManoptExamples.RiemannianMeanGradient!!Type
                      RiemannianMeanGradient!!{P} where P

                      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                      \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

                      where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

                      This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

                      Constructors

                      RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

                      Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

                      RiemannianMeanGradient!!(
                      +    M::AbstractManifold,
                      +    data::AbstractVector{P};
                      +    initial_vector::T=zero_vector(M, first(data)),
                      +) where {P,T}

                      Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

                      See also

                      RiemannianMeanCost, Riemannian_mean_objective

                      source
                      ManoptExamples.Riemannian_mean_objectiveMethod
                      Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())
                      +Riemannian_mean_objective(M, data;
                      +initial_vector=zero_vector(M, first(data)),
                      +evaluation=AllocatingEvaluton()
                      +)

                      Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

                      See also

                      RiemannianMeanCost, RiemannianMeanGradient!!

                      Note

                      The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

                      source

                      Robust PCA

                      See the Robust PCA example to see these in use.

                      ManoptExamples.RobustPCACostType
                      RobustPCACost{D,F}

                      A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

                      \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

                      This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

                      \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

                      Note that this is a mutable struct so you can adapt the $ε$ later on.

                      Constructor

                      RobustPCACost(data::AbstractMatrix, ε=1.0)
                      +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

                      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

                      source
                      ManoptExamples.RobustPCAGrad!!Type
                      RobustPCAGrad!!{D,F}

                      A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

                      Note that this is a mutable struct so you can adapt the $ε$ later on.

                      Constructor

                      RobustPCAGrad!!(data, ε=1.0)
                      +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

                      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

                      source
                      ManoptExamples.robust_PCA_objectiveFunction
                      robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
                      +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

                      Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

                      See also

                      RobustPCACost, RobustPCAGrad!!

                      Note

                      Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the in-place variant to be used, though that keyword is used to setup the objective.

                      source

                      Rosenbrock Function

                      See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.

                      ManoptExamples.RosenbrockCostType
                      RosenbrockCost

                      Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                      \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

                      which means that for the 2D case, the manifold $\mathcal M$ is ignored.

                      See also 📖 Rosenbrock (with slightly different parameter naming).

                      Constructor

                      f = Rosenbrock(a,b)

                      generates the struct/function of the Rosenbrock cost.

                      source
                      ManoptExamples.RosenbrockGradient!!Type
                      RosenbrockGradient

                      Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                      \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

                      i.e. also here the manifold is ignored.

                      Constructor

                      RosenbrockGradient(a,b)

                      Functors

                      grad_f!!(M,p)
                      +grad_f!!(M, X, p)

                      evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

                      source
                      ManoptExamples.RosenbrockMetricType
                      RosenbrockMetric <: AbstractMetric

                      A metric related to the Rosenbrock problem, where the metric at a point $p∈\mathbb R^2$ is given by

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_{1}^2 & -2p_{1} \\ + -2p_{1} & 1 +\end{pmatrix},\]

                      where the $\mathrm{Rb}$ stands for Rosenbrock

                      source
                      Base.expMethod
                      q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)
                      +exp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)

                      Compute the exponential map with respect to the RosenbrockMetric.

                      \[ q = \begin{pmatrix} p_1 + X_1 \\ p_2+X_2+X_1^2\end{pmatrix}\]

                      source
                      Base.logMethod
                      X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)
                      +log!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)

                      Compute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any $j ∈ \{1,…,m\}$

                      \[X = \begin{pmatrix} + q_1 - p_1 \\ + q_2 - p_2 + (q_1 - p_1)^2 +\end{pmatrix}\]

                      source
                      Manifolds.inverse_local_metricMethod
                      inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                      Return the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                      \[G^{-1}_p = +\begin{pmatrix} + 1 & 2p_1\\ + 2p_1 & 1+4p_1^2 \\ +\end{pmatrix}.\]

                      source
                      Manifolds.local_metricMethod
                      local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                      Return the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                      \[G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix}\]

                      source
                      ManifoldsBase.change_representerMethod
                      Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)
                      +change_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)

                      Given the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.

                      this function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.

                      source
                      ManifoldsBase.innerMethod
                      inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)

                      Compute the inner product on $\mathbb R^2$ with respect to the RosenbrockMetric, i.e. for $X,Y \in T_p\mathcal M$ we have

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1\\ + -2p_1 & 1 +\end{pmatrix},\]

                      source

                      Total Variation

                      See the Total Variation example to see these in use.

                      ManoptExamples.Intrinsic_infimal_convolution_TV12Method
                      Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

                      Compute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads

                      \[E(u,v) = + \frac{1}{2}\sum_{i ∈ \mathcal G} + d_{\mathcal M}\bigl(g(\frac{1}{2},v_i,w_i),f_i\bigr) + +\alpha\bigl( β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) \bigr).\]

                      for more details see [BFPS17, BFPS18].

                      See also

                      Total_Variation, second_order_Total_Variation

                      source
                      ManoptExamples.Total_VariationFunction
                      Total_Variation(M,x [,p=2,q=1])

                      Compute the $\operatorname{TV}^p$ functional for data xon the PowerManifold manifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i$ denote the forward neighbors, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I_i = \{i+e_j, j=1,…,k\}\cap \mathcal G$. The formula reads

                      \[E^q(x) = \sum_{i ∈ \mathcal G} + \bigl( \sum_{j ∈ \mathcal I_i} d^p_{\mathcal M}(x_i,x_j) \bigr)^{q/p},\]

                      see [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.

                      See also

                      grad_Total_Variation, prox_Total_Variation, second_order_Total_Variation

                      source
                      ManoptExamples.adjoint_differential_forward_logsMethod
                      Y = adjoint_differential_forward_logs(M, p, X)
                      +adjoint_differential_forward_logs!(M, Y, p, X)

                      Compute the adjoint differential of forward_logs $F$ occurring, in the power manifold array p, the differential of the function

                      $F_i(p) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j$

                      where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$ Let $n$ be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold $\mathcal M' = \mathcal M^n$. The adjoint differential can be computed in place of Y.

                      Input

                      • M – a PowerManifold manifold
                      • p – an array of points on a manifold
                      • X – a tangent vector to from the n-fold power of p, where n is the ndims of p

                      Output

                      Y – resulting tangent vector in $T_p\mathcal M$ representing the adjoint differentials of the logs.

                      source
                      ManoptExamples.differential_forward_logsMethod
                      Y = differential_forward_logs(M, p, X)
                      +differential_forward_logs!(M, Y, p, X)

                      compute the differential of forward_logs $F$ on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function

                      \[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j, \quad i ∈ \mathcal G,\]

                      where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

                      Input

                      • M – a PowerManifold manifold
                      • p – a point.
                      • X – a tangent vector.

                      Output

                      • Y – resulting tangent vector in $T_x\mathcal N$ representing the differentials of the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.
                      source
                      ManoptExamples.forward_logsMethod
                      Y = forward_logs(M,x)
                      +forward_logs!(M, Y, x)

                      compute the forward logs $F$ (generalizing forward differences) occurring, in the power manifold array, the function

                      \[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{x_i} x_j,\quad i ∈ \mathcal G,\]

                      where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$. This can also be done in place of ξ.

                      Input

                      • M – a PowerManifold manifold
                      • x – a point.

                      Output

                      • Y – resulting tangent vector in $T_x\mathcal M$ representing the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.
                      source
                      ManoptExamples.grad_Total_VariationFunction
                      X = grad_Total_Variation(M, λ, x[, p=1])
                      +grad_Total_Variation!(M, X, λ, x[, p=1])

                      Compute the (sub)gradient $∂f$ of all forward differences occurring, in the power manifold array, i.e. of the function

                      \[f(p) = \sum_{i}\sum_{j ∈ \mathcal I_i} d^p(x_i,x_j)\]

                      where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

                      Input

                      • M – a PowerManifold manifold
                      • x – a point.

                      Output

                      • X – resulting tangent vector in $T_x\mathcal M$. The computation can also be done in place.
                      source
                      ManoptExamples.grad_Total_VariationMethod
                      X = grad_Total_Variation(M, (x,y)[, p=1])
                      +grad_Total_Variation!(M, X, (x,y)[, p=1])

                      compute the (sub) gradient of $\frac{1}{p}d^p_{\mathcal M}(x,y)$ with respect to both $x$ and $y$ (in place of X and Y).

                      source
                      ManoptExamples.grad_intrinsic_infimal_convolution_TV12Method
                      grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

                      compute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some $f ∈ \mathcal M$ on a PowerManifold manifold $\mathcal M$ this function computes the (sub)gradient of

                      \[E(u,v) = +\frac{1}{2}\sum_{i ∈ \mathcal G} d_{\mathcal M}(g(\frac{1}{2},v_i,w_i),f_i) ++ \alpha +\bigl( +β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) +\bigr),\]

                      where both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.

                      source
                      ManoptExamples.grad_second_order_Total_VariationFunction
                      grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])

                      computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1,q_2,q_3)$ with respect to all $q_1,q_2,q_3$ occurring along any array dimension in the point q, where M is the corresponding PowerManifold.

                      source
                      ManoptExamples.grad_second_order_Total_VariationFunction
                      Y = grad_second_order_Total_Variation(M, q[, p=1])
                      +grad_second_order_Total_Variation!(M, Y, q[, p=1])

                      computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1, q_2, q_3)$ with respect to all three components of $q∈\mathcal M^3$, where $d_2$ denotes the second order absolute difference using the mid point model, i.e. let

                      \[\mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};q_1,q_3) \text{ for some geodesic }g\bigr\}\]

                      denote the mid points between $q_1$ and $q_3$ on the manifold $\mathcal M$. Then the absolute second order difference is defined as

                      \[d_2(q_1,q_2,q_3) = \min_{c ∈ \mathcal C_{q_1,q_3}} d(c, q_2).\]

                      While the (sub)gradient with respect to $q_2$ is easy, the other two require the evaluation of an adjoint_Jacobi_field.

                      The derivation of this gradient can be found in [BBSW16].

                      source
                      ManoptExamples.project_collaborative_TVFunction
                      project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])
                      +project_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])

                      compute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function

                      \[F^q(x) = \sum_{i∈\mathcal G} + \Bigl( \sum_{j∈\mathcal I_i} + \sum_{k=1}^d \lVert X_{i,j}\rVert_x^p\Bigr)^\frac{q}{p},\]

                      where $\mathcal G$ is the set of indices for $x∈\mathcal M$ and $\mathcal I_i$ is the set of its forward neighbors. The computation can also be done in place of Θ.

                      This is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.

                      source
                      ManoptExamples.prox_Total_VariationFunction
                      ξ = prox_Total_Variation(M,λ,x [,p=1])

                      compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all forward differences occurring in the power manifold array, i.e. $\varphi(xi,xj) = d_{\mathcal M}^p(xi,xj)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • x – a point.

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place
                      source
                      ManoptExamples.prox_Total_VariationMethod
                      [y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])
                      +prox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])

                      Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $φ(x,y) = d_{\mathcal M}^p(x,y)$ with parameter λ. A derivation of this closed form solution is given in see [WDS14].

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • (x1,x2) – a tuple of two points,

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • (y1,y2) – resulting tuple of points of the $\operatorname{prox}_{λφ}($(x1,x2)$)$. The result can also be computed in place.
                      source
                      ManoptExamples.prox_parallel_TVFunction
                      y = prox_parallel_TV(M, λ, x [,p=1])
                      +prox_parallel_TV!(M, y, λ, x [,p=1])

                      compute the proximal maps $\operatorname{prox}_{λφ}$ of all forward differences occurring in the power manifold array, i.e. $φ(x_i,x_j) = d_{\mathcal M}^p(x_i,x_j)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

                      Input

                      • M – a PowerManifold manifold
                      • λ – a real value, parameter of the proximal map
                      • x – a point

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.

                      See also prox_Total_Variation

                      source
                      ManoptExamples.prox_second_order_Total_VariationMethod
                      (y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)
                      +prox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)

                      Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $\varphi(x_1,x_2,x_3) = d_{\mathcal M}^p(c(x_1,x_3),x_2)$ with parameter λ>0, where $c(x,z)$ denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.

                      Note that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.

                      Input

                      • M – a manifold

                      • λ – a real value, parameter of the proximal map

                      • (x1,x2,x3) – a tuple of three points

                      • p – (1) exponent of the distance of the TV term

                      Optional

                      kwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)

                      Output

                      • (y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.
                      source
                      ManoptExamples.prox_second_order_Total_VariationMethod
                      y = prox_second_order_Total_Variation(M, λ, x[, p=1])
                      +prox_second_order_Total_Variation!(M, y, λ, x[, p=1])

                      compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all centered second order differences occurring in the power manifold array, i.e. $\varphi(x_k,x_i,x_j) = d_2(x_k,x_i.x_j)$, where $k,j$ are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • x – a points.

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.
                      source
                      ManoptExamples.second_order_Total_VariationFunction
                      second_order_Total_Variation(M,x [,p=1])

                      compute the $\operatorname{TV}_2^p$ functional for data x on the PowerManifold manifoldmanifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i^{\pm}$ denote the forward and backward neighbors, respectively, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I^\pm_i = \{i\pm e_j, j=1,…,k\}\cap \mathcal I$. The formula then reads

                      \[E(x) = \sum_{i ∈ \mathcal I,\ j_1 ∈ \mathcal I^+_i,\ j_2 ∈ \mathcal I^-_i} +d^p_{\mathcal M}(c_i(x_{j_1},x_{j_2}), x_i),\]

                      where $c_i(⋅,⋅)$ denotes the mid point between its two arguments that is nearest to $x_i$, see [BBSW16] for a derivation.

                      In long function names, this might be shortened to TV2.

                      See also

                      grad_second_order_Total_Variation, prox_second_order_Total_Variation

                      source
                      ManoptExamples.second_order_Total_VariationMethod
                      second_order_Total_Variation(M,(x1,x2,x3) [,p=1])

                      Compute the $\operatorname{TV}_2^p$ functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by

                      \[ \mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};x_1,x_3) \text{ for some geodesic }g\bigr\}\]

                      the set of mid points between $x_1$ and $x_3$. Then the function reads

                      \[d_2^p(x_1,x_2,x_3) = \min_{c ∈ \mathcal C} d_{\mathcal M}(c,x_2),\]

                      see [BBSW16] for a derivation. In long function names, this might be shortened to TV2.

                      See also

                      grad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation

                      source

                      Literature

                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BFPS18]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
                      [BFPS17]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [Bou23]
                      [Cas59]
                      P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
                      [Cas63]
                      P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
                      [DMSC16]
                      J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.6/objects.inv b/v0.1.6/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..da6941d8a6192eab4bdd61825cfda50562c155e8 GIT binary patch literal 3988 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 +References · ManoptExamples.jl

                      Literature

                      [ASY+19]
                      T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.
                      [ABBR23]
                      S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
                      [Bac14]
                      M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [BFPS18]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
                      [BFPS17]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [BPS16]
                      R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
                      [Bou23]
                      [Cas59]
                      P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
                      [Cas63]
                      P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
                      [DMSC16]
                      J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
                      [LNPS17]
                      F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      [ROF92]
                      L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
                      [SO15]
                      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                      [WS22]
                      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.6/search_index.js b/v0.1.6/search_index.js new file mode 100644 index 0000000..b78ea9c --- /dev/null +++ b/v0.1.6/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Difference-of-Convex-Frank-Wolfe/#A-comparison-of-the-Difference-of-Convex-and-Frank-Wolfe-Algorithm","page":"Frank Wolfe comparison","title":"A comparison of the Difference of Convex and Frank Wolfe Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Ronny Bergmann 2023-11-06","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Introduction","page":"Frank Wolfe comparison","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing ManifoldsBase, Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices mathcal P(n) with the affine invariant metric. Let q_1ldotsq_m in mathcal P(n) be a set of points and mu_1ldotsmu_m be a set of weights, such that they sum to one. We consider then","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmax_pinmathcal C h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"h(p) =\nsum_j=1^m mu_j d^2(pq_i)\nquad text where \nd^2(pq_i) = operatornametrbigl(\n log^2(p^-frac12q_jp^-frac12)\nbig)\nqquadtextandqquad\nmathcal C = pin mathcal M bar Lpreceq p preceq bar U ","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"for a lower bound L and an upper bound U for the matrices in the positive definite sense A preceq B Leftrightarrow (B-A) is positive semi-definite","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"When every one of the weights mu_1 ldots mu_m are equal, this function h is known as the of the set q_1 dots q_m.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And for our example we set","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Random.seed!(42)\nn = 20\nm = 100\nM = SymmetricPositiveDefinite(n)\nq = [rand(M) for _ in 1:m];\nw = rand(m)\nw ./=sum(w)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use as lower and upper bound the arithmetic and geometric mean L and U, respectively.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )\nU = sum( wi * qi for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p0 = (L+U)/2","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can check that it is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Common-Functions","page":"Frank Wolfe comparison","title":"Common Functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Given p in mathcal M, X in T_pmathcal M on the symmetric positive definite matrices M, this method computes the closed form solution to","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_qin mathcal C langle X log_p qrangle\n = operatorname*argmin_qin mathcal C operatornametr(Slog(YqY))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"where mathcal C = q L preceq q preceq U , S = p^-12Xp^-12, and Y=p^-12.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The solution is given by Z=X^-1Qbigl( P^mathrmT-operatornamesgn(D)_+P+hatLbigr)Q^mathrmTX^-1,@ where S=QDQ^mathrmT is a diagonalization of S, hatU-hatL=P^mathrmTP with hatL=Q^mathrmTXLXQ and hatU=Q^mathrmTXUXQ, where -mboxsgn(D)_+ is the diagonal matrix","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatornamediagbigl(\n -operatornamesgn(d_11)_+ ldots -operatornamesgn(d_nn)_+\nbigr)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and D=(d_ij).","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@doc raw\"\"\"\n closed_form_solution!(M, q, L, U, p X)\n\nCompute the closeed form solution of the constraint sub problem in place of ``q``.\n\"\"\"\nfunction closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)\n # extract p^1/2 and p^{-1/2}\n (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)\n # Compute D & Q\n e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk = QDQ'\n D = Diagonal(1.0 .* (e2.values .< 0))\n Q = e2.vectors\n #println(p)\n Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q\n Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q\n P = cholesky(Hermitian(Uprime - Lprime))\n z = P.U' * D * P.U + Lprime\n copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-Difference-of-Convex-Formulation","page":"Frank Wolfe comparison","title":"The Difference of Convex Formulation","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use g(p) = iota_mathcal C(p) as the indicator funtion of the set mathcal C. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function is_pos_def(p; atol=5e-13)\n e = eigen(Symmetric(p))\n return all((e.values .+ atol) .> 0)\nend\nfunction g(p, L, U)\n return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf\nend\nh(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"So we can first check that p0 is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"g(p0,L,U) == 0.0","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"true","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Now setting","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We look for a maximum of h, where g is minimal, i.e. g(p) is zero or in other words p in mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The gradient of h can also be implemented in closed form as","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))\nfunction grad_h!(M, X, p, w, q)\n Y = copy(M, p, X)\n zero_vector!(M, X, p)\n for (wi, qi) in zip(w,q)\n log!(M, Y, p, qi)\n Y .*= - 2.0*wi\n X .+= Y\n end\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can further define the cost, which will just be +infty outside of mathcal C. We define","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_dc(M, p) = g(p, L, U) - h(M, p, w, q)\ngrad_h!(M, X, p) = grad_h!(M, X, p, w, q)\nfunction grad_f_dc!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Here we can omit the gradient of g in the definition of operatornamegrad f, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As the last step, we can provide the closed form solver for the DC sub problem given at iteration k by","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pin mathcal C\n biglangle -operatornamegrad h(p^(k)) exp^-1_p^(k)pbigrangle","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Which we con compute","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution!(M, q, p, X)\n closed_form_solution!(M, q, L, U, p, -X)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For safety, we might want to avoid ending up at the boundary of mathcal C. That is we reduce the distance we walk towards the solution q a bit.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution_safe!(M, q, p, X)\n p_last = copy(M,p) # since p=q might be in place\n closed_form_solution!(M, q, L, U, p, -X)\n q_orig = copy(M,q) # since we do the following in place of q\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n s = 1.0\n d = distance(M, p_last, q_orig);\n # if we are close to zero, we reduce faster.\n α = d < 1/(n^2) ? 0.66 : 0.9995;\n i=0\n while (a < 0) || (b < 0)\n s *= α\n shortest_geodesic!(M, q, p_last, q_orig, s)\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n #println(\"$i a: $a, b = $b with s=$s\")\n i=i+1\n if (i>100) # safety fallback\n #@warn \" $i steps where not enough $s ($α)\\n$a $b\\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs\"\n qe = eigen(q)\n if a < 0\n qe.values .+= min(1e-8, n*abs(min(a,b)))\n else\n qe.values .-= min(1e-8, n*abs(min(a,b)))\n end\n q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n return q\n end\n end\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-DoC-solver-run","page":"Frank Wolfe comparison","title":"The DoC solver run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s compare both methods when they have the same stopping criteria","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;\n gradient=grad_f_dc!,\n sub_problem=dc_sub_solution_safe!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(300) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 30, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(p): -0.77661458292831\nAt iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.\n 17.041637 seconds (16.55 M allocations: 1.629 GiB, 3.09% gc time, 92.32% compilation time)\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 23 iterations\n\n## Parameters\n* sub solver state:\n | InplaceEvaluation()\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 300: not reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 30]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s extract the final point and look at its cost","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_dc = get_solver_result(state1_dc);\nf_dc(M, p1_dc)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.784425242474807","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (1.1886583723800445e-12, 0.06669240322431051)\n (1.3411042178831775e-5, 0.0671353506908023)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For the statistics we extract the recordings from the state","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Define-the-Frank-Wolfe-functions","page":"Frank Wolfe comparison","title":"Define the Frank-Wolfe functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For Frank wolfe, the cost is just defined as -h(p) but the minimisation is constraint to mathcal C, which is enfored by the oracle.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_fw(M, p) = -h(M, p, w, q)\nfunction grad_f_fw!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend\noracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-FW-Solver-Run","page":"Frank Wolfe comparison","title":"The FW Solver Run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Similarly we can run the Frank-Wolfe algorithm with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;\n sub_problem=oracle_fw!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(10^4) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), :Cost, (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 2*10^3, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial f(x): -0.776615\n# 2000 f(x): -0.784420 |Δp|: 0.04611942377596 |grad f(p)|: 0.17693408 |Δgrad f(p)|: 0.17555618\n# 4000 f(x): -0.784421 |Δp|: 0.00372201632005 |grad f(p)|: 0.17694619 |Δgrad f(p)|: 0.00749427\n# 6000 f(x): -0.784422 |Δp|: 0.00205683506784 |grad f(p)|: 0.17695204 |Δgrad f(p)|: 0.00414088\n# 8000 f(x): -0.784422 |Δp|: 0.00140675676260 |grad f(p)|: 0.17695565 |Δgrad f(p)|: 0.00283200\n# 10000 f(x): -0.784422 |Δp|: 0.00106177438611 |grad f(p)|: 0.17695815 |Δgrad f(p)|: 0.00213746\nThe algorithm reached its maximal number of iterations (10000).\n155.661032 seconds (55.49 M allocations: 94.001 GiB, 2.24% gc time, 0.56% compilation time)\n\n# Solver state for `Manopt.jl`s Frank Wolfe Method\nAfter 10000 iterations\n\n## Parameters\n* inverse retraction method: LogarithmicInverseRetraction()\n* retraction method: ExponentialRetraction()\n* sub solver state:\n | InplaceEvaluation()\n\n## Stepsize\nDecreasingStepsize(; length=2.0, factor=1.0, subtrahend=0.0, shift=2)\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 10000: reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"f(x): %f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 2000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we take a look at this result as well","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_fw = get_solver_result(state1_fw);\nf_dc(M, p1_fw)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844220281765162","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And its feasibility","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.904818928410655e-10, 0.06659173821656107)\n (3.245654983213335e-5, 0.06713970236096602)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Statistics","page":"Frank Wolfe comparison","title":"Statistics","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We extract the recorded values","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"# DoC\niter1_dc = get_record(state1_dc, :Iteration, :Iteration)\npk_dc = get_record(state1_dc,:Iteration,:Iterate)\ncosts1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))\ndc_min = minimum(costs1_dc)\n# FW\niter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]\npk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]\ncosts1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x_k)-f^*$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-8, 10^-2),\n xaxis=:log,\n xlims=(1,10^4),\n)\nplot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label=\"Difference of Convex\")\nplot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label=\"Frank-Wolfe\")","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Literature","page":"Frank Wolfe comparison","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\n","category":"page"},{"location":"references/#Literature","page":"References","title":"Literature","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.\n\n\n\nS. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nM. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-of-the-Difference-of-Convex-Algorithms","page":"A Benchmark","title":"Benchmark of the Difference of Convex Algorithms","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Introduction","page":"A Benchmark","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where ghcolon mathcal M to mathbb R are geodesically convex function on the Riemannian manifold mathcal M.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#The-DC-Problem","page":"A Benchmark","title":"The DC Problem","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We start with defining the two convex functions gh and their gradients as well as the DC problem f and its gradient for the problem","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":" operatorname*argmin_pinmathcal M bigl( logbigr(det(p)bigr)bigr)^4 - bigl(log det(p) bigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where the critical points obtain a functional value of -frac14.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where mathcal M is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We first define the corresponding functions","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"g(M, p) = log(det(p))^4\nh(M, p) = log(det(p))^2\nf(M, p) = g(M, p) - h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and their gradients","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"grad_g(M, p) = 4 * (log(det(p)))^3 * p\ngrad_h(M, p) = 2 * log(det(p)) * p\ngrad_f(M, p) = grad_g(M, p) - grad_h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which we can use to verify that the gradients of g and h are correct. We use for that","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"n = 6\nM = SymmetricPositiveDefinite(n)\np0 = log(n) * Matrix{Float64}(I, n, n);\nX0 = 1 / n * Matrix{Float64}(I, n, n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"to tall both checks","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, g, grad_g, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, h, grad_h, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which both pass the test. We continue to define their inplace variants","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"function grad_g!(M, X, p)\n copyto!(M, X, p)\n X .*= 4 * (log(det(p)))^3\n return X\nend\nfunction grad_h!(M, X, p)\n copyto!(M, X, p)\n X .*= 2 * (log(det(p)))\n return X\nend\nfunction grad_f!(M, X, p)\n grad_g!(M, X, p)\n Y = copy(M, p, X)\n grad_h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And compare times for both algorithms, with a bit of debug output.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dca = difference_of_convex_algorithm(\n M,\n f,\n g,\n grad_h!,\n p0;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n (:GradientNorm, \" |grad_f(p)|: %1.9f\"),\n (:Change, \" |δp|: %1.9f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470\n# 5 f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127\n# 10 f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103\n# 15 f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011\nThe algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.\n 3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The cost is","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dca)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25000000000000006","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Similarly the DCPPA performs","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dcppa = difference_of_convex_proximal_point(\n M,\n grad_h!,\n p0;\n g=g,\n grad_g=grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n \" \",\n (:GradientNorm, \"|grad_f(p)|: %1.10f\"),\n (:Change, \"|δp|: %1.10f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470 \n# 5 f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692\n# 10 f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316\n# 15 f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968\n# 25 f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530\n# 30 f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048\n# 35 f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001\nThe algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.\n 1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dcppa)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-I:-Time-comparison","page":"A Benchmark","title":"Benchmark I: Time comparison","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()\ndcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()\nN_max=14\nN = 2:N_max","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and run a benchmark for both algorithms","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"for n in N\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I, n, n)\n bdca = @benchmark difference_of_convex_algorithm(\n $Mn,\n $f,\n $g,\n $grad_h!,\n $pn;\n grad_g=$grad_g!,\n gradient=$grad_f!,\n evaluation=InplaceEvaluation(),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dca_benchmarks[n] = bdca\n bdcppa = @benchmark difference_of_convex_proximal_point(\n $Mn,\n $grad_h!,\n $pn;\n g=$g,\n grad_g=$grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dcppa_benchmarks[n] = bdcppa\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]\ndca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]\ndcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Time (sec.)\")\nplot!(dims, dca_times; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims, dcppa_times; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-II:-Iterations-and-cost.","page":"A Benchmark","title":"Benchmark II: Iterations and cost.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"N2 = [5,10,20,40,80]\ndims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]\ndca_iterations = Dict{Int,Int}()\ndca_costs = Dict{Int,Vector{Float64}}()\ndcppa_iterations = Dict{Int,Int}()\ndcppa_costs = Dict{Int,Vector{Float64}}()","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time for n in N2\n println(n)\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I,n,n);\n @time dca_st = difference_of_convex_algorithm(\n Mn, f, g, grad_h!, pn;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation = InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dca_costs[n] = get_record(dca_st, :Iteration, :Cost)\n dca_iterations[n] = length(dca_costs[n])\n @time dcppa_st = difference_of_convex_proximal_point(\n Mn, grad_h!, pn;\n g=g,\n grad_g=grad_g!,\n λ = i -> 1/(2*n),\n cost = f,\n gradient= grad_f!,\n evaluation = InplaceEvaluation(),\n stepsize = ConstantStepsize(1.0),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)\n dcppa_iterations[n] = length(dcppa_costs[n])\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The iterations are like","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Iterations\")\nplot!(dims2, [values(dca_iterations)...]; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims2, [values(dcppa_iterations)...]; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And for the developtment of the cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where we can see that the DCA needs less iterations than the DCPPA.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Literature","page":"A Benchmark","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\n","category":"page"},{"location":"objectives/#List-of-Objectives-defined-for-the-Examples","page":"Objectives","title":"List of Objectives defined for the Examples","text":"","category":"section"},{"location":"objectives/#Rayleigh","page":"Objectives","title":"Rayleigh Quotient on the Sphere","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rayleigh example (TODO) to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RayleighQuotient.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RayleighQuotientCost","page":"Objectives","title":"ManoptExamples.RayleighQuotientCost","text":"RayleighQuotientCost\n\nA functor representing the Rayleigh Quotient cost function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either\n\nf(p) = p^mathrmTApqquad p 𝕊^n-1\n\nor extended into the embedding as\n\nf(x) = x^mathrmTAx qquad x ℝ^n\n\nwhich is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of 𝕊^n-1.\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientCost(A)\n\nCreate the Rayleigh cost function.\n\nSee also\n\nRayleighQuotientGrad!!, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientGrad!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientGrad!!","text":"RayleighQuotientGrad!!\n\nA functor representing the Rayleigh Quotient gradient function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either\n\noperatornamegrad f(p) = 2 Ap - 2 (p^mathrmTAp)*pqquad p 𝕊^n-1\n\nor taking the Euclidean gradient of the Rayleigh quotient on the sphere as\n\nf(x) = 2Ax qquad x ℝ^n\n\nFor details, see Example 3.62 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientGrad!!(A)\n\nCreate the Rayleigh quotient gradient function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientHess!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientHess!!","text":"RayleighQuotientHess!!\n\nA functor representing the Rayleigh Quotient Hessian.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either\n\noperatornameHess f(p)X = 2 bigl(AX - (p^mathrmTAX)p - (p^mathrmTAp)Xbigr)qquad p 𝕊^n-1 X in T_p𝕊^n-1\n\nor taking the Euclidean Hessian of the Rayleigh quotient on the sphere as\n\n^2f(x)V = 2AV qquad x V ℝ^n\n\nFor details, see Example 5.27 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientHess!!(A)\n\nCreate the Rayleigh quotient Hessian function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientGrad!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#BezierCurves","page":"Objectives","title":"Bézier Curves","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Bezier Curves example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/BezierCurves.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.BezierSegment","page":"Objectives","title":"ManoptExamples.BezierSegment","text":"BezierSegment\n\nA type to capture a Bezier segment. With n points, a Bézier segment of degree n-1 is stored. On the Euclidean manifold, this yields a polynomial of degree n-1.\n\nThis type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.\n\nNot that this can also be used to represent tangent vectors on the control points of a segment.\n\nSee also: de_Casteljau.\n\nConstructor\n\nBezierSegment(pts::AbstractVector)\n\nGiven an abstract vector of pts generate the corresponding Bézier segment.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}, AbstractFloat, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.L2_acceleration_Bezier","text":"L2_acceleration_Bezier(M,B,pts,λ,d)\n\ncompute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.\n\nfracλ2sum_i=0^N d_mathcal M(d_i c_B(i))^2+\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i and d_2 refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by p_i, and to each p_i corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}}} where P","page":"Objectives","title":"ManoptExamples.acceleration_Bezier","text":"acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector{<:AbstractFloat},\n) where {P}\n\ncompute the value of the discrete Acceleration of the composite Bezier curve\n\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i, i=1N, and d_2 refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nThis acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n T::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n T::AbstractVector,\n X::AbstractVector,\n)\n\nEvaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\n\nevaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t,\n η,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t01 on the curve and a tangent vector ηT_β(t)mathcal M. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.de_Casteljau-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any}}","page":"Objectives","title":"ManoptExamples.de_Casteljau","text":"de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function\n\nreturn the Bézier curve β(b_0b_n) 01 mathcal M defined by the control points b_0b_nmathcal M, nmathbb N, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let γ_ab(t) denote the shortest geodesic connecting abmathcal M. Then the curve is defined by the recursion\n\nbeginaligned\n β(tb_0b_1) = gamma_b_0b_1(t)\n β(tb_0b_n) = gamma_β(tb_0b_n-1) β(tb_1b_n)(t)\nendaligned\n\nand P is the type of a point on the Manifold M.\n\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function\n\nGiven a vector of Bézier segments, i.e. a vector of control points B=bigl( (b_00b_n_00)(b_0m b_n_mm) bigr), where the different segments might be of different degree(s) n_0n_m. The resulting composite Bézier curve c_B0m mathcal M consists of m segments which are Bézier curves.\n\nc_B(t) =\n begincases\n β(t b_00b_n_00) text if t 01\n β(t-i b_0ib_n_ii) text if \n t(ii+1 quad i1m-1\n endcases\n\nde_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)\nde_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector\nde_Casteljau(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n) -> AbstractVector\n\nEvaluate the Bézier curve at time t or at times t in T.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Θ::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in 0N, and each depending the corresponding segment(s). Here, N is the length of B. For the mutating variant the result is computed in Θ.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t0N, which depends only on the corresponding segment. Here, N is the length of B. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n t,\n X::BezierSegment\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degree-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.get_Bezier_degree","text":"get_Bezier_degree(M::AbstractManifold, b::BezierSegment)\n\nreturn the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degrees-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_degrees","text":"get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\n\nreturn the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_inner_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_inner_points","text":"get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )\nget_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)\n\nreturns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junction_tangent_vectors-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_junction_tangent_vectors","text":"get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)\n\nreturns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junctions","page":"Objectives","title":"ManoptExamples.get_Bezier_junctions","text":"get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junctions(M::AbstractManifold, b::BezierSegment)\n\nreturns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_points","page":"Objectives","title":"ManoptExamples.get_Bezier_points","text":"get_Bezier_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n reduce::Symbol=:default\n)\nget_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)\n\nreturns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.\n\nThis method reduces the points depending on the optional reduce symbol\n\n:default: no reduction is performed\n:continuous: for a continuous function, the junction points are doubled at b_0i=b_n_i-1i-1, so only b_0i is in the vector.\n:differentiable: for a differentiable function additionally log_b_0ib_1i = -log_b_n_i-1i-1b_n_i-1-1i-1 holds. hence b_n_i-1-1i-1 is omitted.\n\nIf only one segment is given, all points of b, b.pts, is returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_segments-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any, Symbol}} where P","page":"Objectives","title":"ManoptExamples.get_Bezier_segments","text":"get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])\n\nreturns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.\n\nThere are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let c=(c_1c_k) and d=(d_1d_m), where m denotes the number of components the composite Bézier curve consists of. Then\n\n:default: k = m + sum_i=1^m d_i since each component requires one point more than its degree. The points are then ordered in tuples, i.e.\nB = bigl c_1c_d_1+1 (c_d_1+2c_d_1+d_2+2 c_k-m+1+d_mc_k bigr\n:continuous: k = 1+ sum_i=1m d_i, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.\nB = bigl c_1c_d_1+1 c_d_1+1c_d_1+d_2+1 c_k-1+d_mb_k) bigr\n:differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence k = 2 - m + sum_i=1m d_i and at a junction point b_n with its given prior point c_n-1, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as b = exp_c_n(-log_c_n c_n-1) such that the assumed differentiability holds\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector, Any, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.grad_L2_acceleration_Bezier","text":"grad_L2_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector,\n λ,\n d::AbstractVector{P}\n) where {P}\n\ncompute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight λ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in 0N), where N is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting λ=0 yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.\n\nNote that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_acceleration_Bezier-Tuple{ManifoldsBase.AbstractManifold, AbstractVector, AbstractVector{<:Integer}, AbstractVector}","page":"Objectives","title":"ManoptExamples.grad_acceleration_Bezier","text":"grad_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector,\n degrees::AbstractVector{<:Integer}\n T::AbstractVector\n)\n\ncompute the gradient of the discretized acceleration of a (composite) Bézier curve c_B(t) on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in 0N, where N is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set λ=0 therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.\n\nSee also\n\nacceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective-Tuple{AbstractVector}","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the in-place variant to be used, though that keyword is used to setup the objective.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also 📖 Rosenbrock (with slightly different parameter naming).\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\ngrad_f!!(M,p)\ngrad_f!!(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockMetric","page":"Objectives","title":"ManoptExamples.RosenbrockMetric","text":"RosenbrockMetric <: AbstractMetric\n\nA metric related to the Rosenbrock problem, where the metric at a point pmathbb R^2 is given by\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\nwhere the mathrmRb stands for Rosenbrock\n\n\n\n\n\n","category":"type"},{"location":"objectives/#Base.exp-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Number}","page":"Objectives","title":"Base.exp","text":"q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)\nexp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)\n\nCompute the exponential map with respect to the RosenbrockMetric.\n\n q = beginpmatrix p_1 + X_1 p_2+X_2+X_1^2endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Base.log-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any}","page":"Objectives","title":"Base.log","text":"X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)\nlog!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)\n\nCompute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any j 1m\n\nX = beginpmatrix\n q_1 - p_1 \n q_2 - p_2 + (q_1 - p_1)^2\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.inverse_local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.inverse_local_metric","text":"inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG^-1_p =\nbeginpmatrix\n 1 2p_1\n 2p_1 1+4p_1^2 \nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.local_metric","text":"local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.change_representer-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, ManifoldsBase.EuclideanMetric, Any, Any}","page":"Objectives","title":"ManifoldsBase.change_representer","text":"Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)\nchange_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)\n\nGiven the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.\n\nthis function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.inner-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Any}","page":"Objectives","title":"ManifoldsBase.inner","text":"inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)\n\nCompute the inner product on mathbb R^2 with respect to the RosenbrockMetric, i.e. for XY in T_pmathcal M we have\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1\n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Total-Variation","page":"Objectives","title":"Total Variation","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Total Variation example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/TotalVariation.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.Intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.Intrinsic_infimal_convolution_TV12","text":"Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\nCompute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads\n\nE(uv) =\n frac12sum_i mathcal G\n d_mathcal Mbigl(g(frac12v_iw_i)f_ibigr)\n +alphabigl( βmathrmTV(v) + (1-β)mathrmTV_2(w) bigr)\n\nfor more details see [BFPS17, BFPS18].\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation-NTuple{4, Any}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation","text":"L2_Total_Variation(M, p_data, α, p)\n\ncompute the ℓ^2-TV functional on the PowerManifold M for given (fixed) data p_data (on M), a nonnegative weight α, and evaluated at p (on M), i.e.\n\nE(p) = d_mathcal M^2(fp) + alpha operatornameTV(p)\n\nSee also\n\nTotal_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation_1_2-Tuple{ManifoldsBase.PowerManifold, Vararg{Any, 4}}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation_1_2","text":"L2_Total_Variation_1_2(M, f, α, β, x)\n\ncompute the ℓ^2-TV-TV2 functional on the PowerManifold manifold M for given (fixed) data f (on M), nonnegative weight α, β, and evaluated at x (on M), i.e.\n\nE(x) = d_mathcal M^2(fx) + alphaoperatornameTV(x)\n + βoperatornameTV_2(x)\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_second_order_Total_Variation-Tuple{ManifoldsBase.PowerManifold, Any, Any, Any}","page":"Objectives","title":"ManoptExamples.L2_second_order_Total_Variation","text":"L2_second_order_Total_Variation(M, f, β, x)\n\ncompute the ℓ^2-TV2 functional on the PowerManifold manifold M for given data f, nonnegative parameter β, and evaluated at x, i.e.\n\nE(x) = d_mathcal M^2(fx) + βoperatornameTV_2(x)\n\nas used in [BBSW16].\n\nSee also\n\nsecond_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Total_Variation","page":"Objectives","title":"ManoptExamples.Total_Variation","text":"Total_Variation(M,x [,p=2,q=1])\n\nCompute the operatornameTV^p functional for data xon the PowerManifold manifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i denote the forward neighbors, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I_i = i+e_j j=1kcap mathcal G. The formula reads\n\nE^q(x) = sum_i mathcal G\n bigl( sum_j mathcal I_i d^p_mathcal M(x_ix_j) bigr)^qp\n\nsee [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.\n\nSee also\n\ngrad_Total_Variation, prox_Total_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.adjoint_differential_forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.adjoint_differential_forward_logs","text":"Y = adjoint_differential_forward_logs(M, p, X)\nadjoint_differential_forward_logs!(M, Y, p, X)\n\nCompute the adjoint differential of forward_logs F occurring, in the power manifold array p, the differential of the function\n\nF_i(p) = sum_j mathcal I_i log_p_i p_j\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i Let n be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold mathcal M = mathcal M^n. The adjoint differential can be computed in place of Y.\n\nInput\n\nM – a PowerManifold manifold\np – an array of points on a manifold\nX – a tangent vector to from the n-fold power of p, where n is the ndims of p\n\nOutput\n\nY – resulting tangent vector in T_pmathcal M representing the adjoint differentials of the logs.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_forward_logs-Tuple{ManifoldsBase.PowerManifold, Any, Any}","page":"Objectives","title":"ManoptExamples.differential_forward_logs","text":"Y = differential_forward_logs(M, p, X)\ndifferential_forward_logs!(M, Y, p, X)\n\ncompute the differential of forward_logs F on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function\n\nF_i(x) = sum_j mathcal I_i log_p_i p_j quad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\np – a point.\nX – a tangent vector.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal N representing the differentials of the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.forward_logs","text":"Y = forward_logs(M,x)\nforward_logs!(M, Y, x)\n\ncompute the forward logs F (generalizing forward differences) occurring, in the power manifold array, the function\n\nF_i(x) = sum_j mathcal I_i log_x_i x_jquad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i. This can also be done in place of ξ.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal M representing the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, λ, x[, p=1])\ngrad_Total_Variation!(M, X, λ, x[, p=1])\n\nCompute the (sub)gradient f of all forward differences occurring, in the power manifold array, i.e. of the function\n\nf(p) = sum_isum_j mathcal I_i d^p(x_ix_j)\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nX – resulting tangent vector in T_xmathcal M. The computation can also be done in place.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}, Any}} where T","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, (x,y)[, p=1])\ngrad_Total_Variation!(M, X, (x,y)[, p=1])\n\ncompute the (sub) gradient of frac1pd^p_mathcal M(xy) with respect to both x and y (in place of X and Y).\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.grad_intrinsic_infimal_convolution_TV12","text":"grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\ncompute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some f mathcal M on a PowerManifold manifold mathcal M this function computes the (sub)gradient of\n\nE(uv) =\nfrac12sum_i mathcal G d_mathcal M(g(frac12v_iw_i)f_i)\n+ alpha\nbigl(\nβmathrmTV(v) + (1-β)mathrmTV_2(w)\nbigr)\n\nwhere both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1q_2q_3) with respect to all q_1q_2q_3 occurring along any array dimension in the point q, where M is the corresponding PowerManifold.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation-2","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"Y = grad_second_order_Total_Variation(M, q[, p=1])\ngrad_second_order_Total_Variation!(M, Y, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1 q_2 q_3) with respect to all three components of qmathcal M^3, where d_2 denotes the second order absolute difference using the mid point model, i.e. let\n\nmathcal C = bigl c mathcal M g(tfrac12q_1q_3) text for some geodesic gbigr\n\ndenote the mid points between q_1 and q_3 on the manifold mathcal M. Then the absolute second order difference is defined as\n\nd_2(q_1q_2q_3) = min_c mathcal C_q_1q_3 d(c q_2)\n\nWhile the (sub)gradient with respect to q_2 is easy, the other two require the evaluation of an adjoint_Jacobi_field.\n\nThe derivation of this gradient can be found in [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.project_collaborative_TV","page":"Objectives","title":"ManoptExamples.project_collaborative_TV","text":"project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])\nproject_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])\n\ncompute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function\n\nF^q(x) = sum_imathcal G\n Bigl( sum_jmathcal I_i\n sum_k=1^d lVert X_ijrVert_x^pBigr)^fracqp\n\nwhere mathcal G is the set of indices for xmathcal M and mathcal I_i is the set of its forward neighbors. The computation can also be done in place of Θ.\n\nThis is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"ξ = prox_Total_Variation(M,λ,x [,p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all forward differences occurring in the power manifold array, i.e. varphi(xixj) = d_mathcal M^p(xixj) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a point.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}, Int64}} where T","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"[y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])\nprox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])\n\nCompute the proximal map operatornameprox_λvarphi of φ(xy) = d_mathcal M^p(xy) with parameter λ. A derivation of this closed form solution is given in see [WDS14].\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\n(x1,x2) – a tuple of two points,\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\n(y1,y2) – resulting tuple of points of the operatornameprox_λφ((x1,x2)). The result can also be computed in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.prox_parallel_TV","page":"Objectives","title":"ManoptExamples.prox_parallel_TV","text":"y = prox_parallel_TV(M, λ, x [,p=1])\nprox_parallel_TV!(M, y, λ, x [,p=1])\n\ncompute the proximal maps operatornameprox_λφ of all forward differences occurring in the power manifold array, i.e. φ(x_ix_j) = d_mathcal M^p(x_ix_j) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a PowerManifold manifold\nλ – a real value, parameter of the proximal map\nx – a point\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.\n\nSee also prox_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Any, Tuple{T, T, T}}, Tuple{ManifoldsBase.AbstractManifold, Any, Tuple{T, T, T}, Int64}} where T","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"(y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)\nprox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)\n\nCompute the proximal map operatornameprox_λvarphi of varphi(x_1x_2x_3) = d_mathcal M^p(c(x_1x_3)x_2) with parameter λ>0, where c(xz) denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.\n\nNote that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.\n\nInput\n\nM – a manifold\nλ – a real value, parameter of the proximal map\n(x1,x2,x3) – a tuple of three points\np – (1) exponent of the distance of the TV term\n\nOptional\n\nkwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)\n\nOutput\n\n(y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation-Union{Tuple{T}, Tuple{N}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any, Int64}} where {N, T}","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"y = prox_second_order_Total_Variation(M, λ, x[, p=1])\nprox_second_order_Total_Variation!(M, y, λ, x[, p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all centered second order differences occurring in the power manifold array, i.e. varphi(x_kx_ix_j) = d_2(x_kx_ix_j), where kj are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a points.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,x [,p=1])\n\ncompute the operatornameTV_2^p functional for data x on the PowerManifold manifoldmanifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i^pm denote the forward and backward neighbors, respectively, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I^pm_i = ipm e_j j=1kcap mathcal I. The formula then reads\n\nE(x) = sum_i mathcal I j_1 mathcal I^+_i j_2 mathcal I^-_i\nd^p_mathcal M(c_i(x_j_1x_j_2) x_i)\n\nwhere c_i() denotes the mid point between its two arguments that is nearest to x_i, see [BBSW16] for a derivation.\n\nIn long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation-Union{Tuple{T}, Tuple{MT}, Tuple{MT, Tuple{T, T, T}}, Tuple{MT, Tuple{T, T, T}, Any}} where {MT<:ManifoldsBase.AbstractManifold, T}","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,(x1,x2,x3) [,p=1])\n\nCompute the operatornameTV_2^p functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by\n\n mathcal C = bigl c mathcal M g(tfrac12x_1x_3) text for some geodesic gbigr\n\nthe set of mid points between x_1 and x_3. Then the function reads\n\nd_2^p(x_1x_2x_3) = min_c mathcal C d_mathcal M(cx_2)\n\nsee [BBSW16] for a derivation. In long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Literature","page":"Objectives","title":"Literature","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/HyperparameterOptimization/#Hyperparameter-optimization","page":"Hyperparameter optimziation","title":"Hyperparameter optimization","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Mateusz Baran 2024-08-03","category":"page"},{"location":"examples/HyperparameterOptimization/#Introduction","page":"Hyperparameter optimziation","title":"Introduction","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"This example shows how to automatically select the best values of hyperparameters of optimization procedures such as retraction, vector transport, size of memory in L-BFGS or line search coefficients. Hyperparameter optimization relies on the Optuna [ASY+19] Python library because it is much more advanced than similar Julia projects, offering Bayesian optimization with conditional hyperparameters and early stopping.","category":"page"},{"location":"examples/HyperparameterOptimization/#General-definitions","page":"Hyperparameter optimziation","title":"General definitions","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Here are some general definitions that you will most likely be able to directly use for your problem without any changes. Just remember to install optuna, for example using CondaPkg Julia library.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"using Manifolds, Manopt\nusing PythonCall\nusing BenchmarkTools\nusing LineSearches\n\n# This script requires optuna to be available through PythonCall\n# You can install it for example using\n# using CondaPkg\n# ]conda add optuna\n\noptuna = pyimport(\"optuna\")\n\nnorm_inf(M::AbstractManifold, p, X) = norm(X, Inf)\n\n# TTsuggest_ structs collect data from a calibrating optimization run\n# that is handled by compute_pruning_losses function\n\nstruct TTsuggest_int\n suggestions::Dict{String,Int}\nend\nfunction (s::TTsuggest_int)(name::String, a, b)\n return s.suggestions[name]\nend\nstruct TTsuggest_float\n suggestions::Dict{String,Float64}\nend\nfunction (s::TTsuggest_float)(name::String, a, b; log::Bool=false)\n return s.suggestions[name]\nend\nstruct TTsuggest_categorical\n suggestions::Dict{String,Any}\nend\nfunction (s::TTsuggest_categorical)(name::String, vals)\n return s.suggestions[name]\nend\nstruct TTreport\n reported_vals::Vector{Float64}\nend\nfunction (r::TTreport)(val, i)\n return push!(r.reported_vals, val)\nend\nstruct TTshould_prune end\n(::TTshould_prune)() = Py(false)\nstruct TracingTrial\n suggest_int::TTsuggest_int\n suggest_float::TTsuggest_float\n suggest_categorical::TTsuggest_categorical\n report::TTreport\n should_prune::TTshould_prune\nend\n\nfunction compute_pruning_losses(\n od,\n int_suggestions::Dict{String,Int},\n float_suggestions::Dict{String,Float64},\n categorical_suggestions::Dict{String,Int},\n)\n tt = TracingTrial(\n TTsuggest_int(int_suggestions),\n TTsuggest_float(float_suggestions),\n TTsuggest_categorical(categorical_suggestions),\n TTreport(Float64[]),\n TTshould_prune(),\n )\n od(tt)\n return tt.report.reported_vals\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"The next part is your hyperparameter optimization objective. The ObjectiveData struct contains all relevant information about the sequence of specific problems. The outermost key part is the N_range field. Early stopping requires a series of progressively more complex problems. They will be attempted from the most simple one to the most complex one, and are specified by the values of N in that vector.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"mutable struct ObjectiveData{TObj,TGrad}\n obj::TObj\n grad::TGrad\n N_range::Vector{Int}\n gtol::Float64\n vts::Vector{AbstractVectorTransportMethod}\n retrs::Vector{AbstractRetractionMethod}\n manifold_constructors::Vector{Tuple{String,Any}}\n pruning_losses::Vector{Float64}\n manopt_stepsize::Vector{Tuple{String,Any}}\n obj_loss_coeff::Float64\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"In the example below we optimize hyperparameters on a sequence of Rosenbrock-type problems restricted to spheres:","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"argmin_p in S^N-1 sum_i=1^N2 (1-p_2i)^2 + 100 (p_2i+1 - p_2i^2)^2","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"where N in 2 16 128 1024 8192 65536.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"obj and grad are the objective and gradient, here defined as below. Note that gradient works in-place and variants without manifolds are also provided for easier comparison with other libraries like Optim.jl. It is easiest when problems for different values N can be distinguished by being defined on successively larger manifolds but the script could be modified so that it’s not necessary.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"pruning_losses and compute_pruning_losses are related to early pruning used in Optuna and you shouldn’t have to modify them.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"function f_rosenbrock(x)\n result = 0.0\n for i in 1:2:length(x)\n result += (1.0 - x[i])^2 + 100.0 * (x[i + 1] - x[i]^2)^2\n end\n return result\nend\nfunction f_rosenbrock(::AbstractManifold, x)\n return f_rosenbrock(x)\nend\n\nfunction g_rosenbrock!(storage, x)\n for i in 1:2:length(x)\n storage[i] = -2.0 * (1.0 - x[i]) - 400.0 * (x[i + 1] - x[i]^2) * x[i]\n storage[i + 1] = 200.0 * (x[i + 1] - x[i]^2)\n end\n return storage\nend\nfunction g_rosenbrock!(M::AbstractManifold, storage, x)\n g_rosenbrock!(storage, x)\n riemannian_gradient!(M, storage, x, storage)\n return storage\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Next, gtol is the tolerance used for the stopping criterion in optimization. vts and retrs are, respectively, vector transports and retraction methods selected through hyperparameter optimization. Some items need to be different for different values of N, for example the manifold over which the problem is defined. This is handled by manifold_constructors which is then defined as Tuple{String,Any}[(\"Sphere\", N -> Manifolds.Sphere(N - 1))], where the string \"Sphere\" is used to identify the manifold family and the next element is a function that transforms the value of N to the manifold for the problem of size N.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Similarly, different stepsize selection methods may be considered. This is handled by the field manopt_stepsize. It will be easiest to see how it works by looking at how it is initialized:","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Tuple{String,Any}[\n (\"LS-HZ\", M -> Manopt.LineSearchesStepsize(ls_hz)),\n (\"Wolfe-Powell\", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),\n]","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"We have a string that identifies the line search method name and a constructor of the line search which takes relevant arguments like the manifold or a numerical parameter.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"The next part is the trial evaluation procedure. This is one of the more important places which need to be customized to your problem. This is the point where we tell Optuna about the relevant optimization hyperparameters and use them to define specific problems. The hyperparameter optimization is a multiobjective problem: we want as good problem objectives as possible and as low times as possible. As Optuna doesn’t currently support multicriteria pruning, which is important for obtaining a solution in a reasonable amount of time, we use a linear combination of sub-objectives to turn the problem into a single-criterion optimization. The hyperparameter optimization objective is a linear combination of achieved objectives the relative weight is controlled by objective.obj_loss_coeff.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"function (objective::ObjectiveData)(trial)\n # Here we use optuna to select memory length for L-BFGS -- an integer in the range between 2 and 30, referenced by name \"mem_len\"\n mem_len = trial.suggest_int(\"mem_len\", 2, 30)\n\n # Here we select a vector transport and retraction methods, one of those specified in the `ObjectiveData`.\n vt = objective.vts[pyconvert(\n Int,\n trial.suggest_categorical(\n \"vector_transport_method\", Vector(eachindex(objective.vts))\n ),\n )]\n retr = objective.retrs[pyconvert(\n Int,\n trial.suggest_categorical(\"retraction_method\", Vector(eachindex(objective.retrs))),\n )]\n\n # Here we select the manifold constructor, in case we want to try different manifolds for our problem. For example one could try defining a problem with orthogonality constraints on Stiefel, Grassmann or flag manifold.\n manifold_name, manifold_constructor = objective.manifold_constructors[pyconvert(\n Int,\n trial.suggest_categorical(\n \"manifold\", Vector(eachindex(objective.manifold_constructors))\n ),\n )]\n\n # Here the stepsize selection method type is selected.\n manopt_stepsize_name, manopt_stepsize_constructor = objective.manopt_stepsize[pyconvert(\n Int,\n trial.suggest_categorical(\n \"manopt_stepsize\", Vector(eachindex(objective.manopt_stepsize))\n ),\n )]\n\n # This parametrizes stepsize selection methods with relevant numerical parameters.\n local c1_val, c2_val, hz_sigma\n if manopt_stepsize_name == \"Wolfe-Powell\"\n c1_val = pyconvert(\n Float64, trial.suggest_float(\"Wolfe-Powell c1\", 1e-5, 1e-2; log=true)\n )\n c2_val =\n 1.0 - pyconvert(\n Float64, trial.suggest_float(\"Wolfe-Powell 1-c2\", 1e-4, 1e-2; log=true)\n )\n elseif manopt_stepsize_name == \"Improved HZ\"\n hz_sigma = pyconvert(Float64, trial.suggest_float(\"Improved HZ sigma\", 0.1, 0.9))\n end\n\n # The current loss estimate, taking into account estimated loss values for larger, not-yet-evaluated values of `N`.\n loss = sum(objective.pruning_losses)\n\n # Here iterate over problems we want to optimize for\n # from smallest to largest; pruning should stop the iteration early\n # if the hyperparameter set is not promising\n cur_i = 0\n for N in objective.N_range\n # Here we define the initial point for the optimization procedure\n p0 = zeros(N)\n p0[1] = 1\n M = manifold_constructor(N)\n # Here we construct the specific line search to be used\n local ls\n if manopt_stepsize_name == \"Wolfe-Powell\"\n ls = manopt_stepsize_constructor(M, c1_val, c2_val)\n elseif manopt_stepsize_name == \"Improved HZ\"\n ls = manopt_stepsize_constructor(M, hz_sigma)\n else\n ls = manopt_stepsize_constructor(M)\n end\n manopt_time, manopt_iters, manopt_obj = benchmark_time_state(\n ManoptQN(),\n M,\n N,\n objective.obj,\n objective.grad,\n p0,\n ls,\n pyconvert(Int, mem_len),\n objective.gtol;\n vector_transport_method=vt,\n retraction_method=retr,\n )\n # TODO: turn this into multi-criteria optimization when Optuna starts supporting\n # pruning in such problems\n loss -= objective.pruning_losses[cur_i + 1]\n loss += manopt_time + objective.obj_loss_coeff * manopt_obj\n trial.report(loss, cur_i)\n if pyconvert(Bool, trial.should_prune().__bool__())\n throw(PyException(optuna.TrialPruned()))\n end\n cur_i += 1\n end\n return loss\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"In the following benchmarking code you will most likely have to adapt solver parameters. This is designed around quasi_Newton but can be adapted to any solver as needed. The example below performs a small number of trials for quick rendering but in practice you should aim for at least a few thousand trials (the n_trials parameter).","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"# An abstract type in case we want to try different optimization packages.\nabstract type AbstractOptimConfig end\nstruct ManoptQN <: AbstractOptimConfig end\n\n# Benchmark that evaluates hyperparameters. Returns time to reach the solution, number of iterations and final value of the objective.\nfunction benchmark_time_state(\n ::ManoptQN,\n M::AbstractManifold,\n N,\n f,\n g!,\n p0,\n stepsize::Manopt.Stepsize,\n mem_len::Int,\n gtol::Real;\n kwargs...,\n)\n manopt_sc = StopWhenGradientNormLess(gtol; norm=norm_inf) | StopAfterIteration(1000)\n mem_len = min(mem_len, manifold_dimension(M))\n manopt_state = quasi_Newton(\n M,\n f,\n g!,\n p0;\n stepsize=stepsize,\n evaluation=InplaceEvaluation(),\n return_state=true,\n memory_size=mem_len,\n stopping_criterion=manopt_sc,\n debug=[],\n kwargs...,\n )\n bench_manopt = @benchmark quasi_Newton(\n $M,\n $f,\n $g!,\n $p0;\n stepsize=$(stepsize),\n evaluation=$(InplaceEvaluation()),\n memory_size=$mem_len,\n stopping_criterion=$(manopt_sc),\n debug=[],\n $kwargs...,\n )\n iters = get_count(manopt_state, :Iterations)\n final_val = f(M, manopt_state.p)\n return median(bench_manopt.times) / 1000, iters, final_val\nend\n\n\"\"\"\n lbfgs_study(; pruning_coeff::Float64=0.95)\n\nSet up the example hyperparameter optimization study.\n\"\"\"\nfunction lbfgs_study(; pruning_coeff::Float64=0.95)\n Ns = [2^n for n in 1:3:12]\n ls_hz = LineSearches.HagerZhang()\n od = ObjectiveData(\n f_rosenbrock,\n g_rosenbrock!,\n Ns,\n 1e-5,\n AbstractVectorTransportMethod[ParallelTransport(), ProjectionTransport()],\n [ExponentialRetraction(), ProjectionRetraction()],\n Tuple{String,Any}[(\"Sphere\", N -> Manifolds.Sphere(N - 1))],\n zeros(Float64, eachindex(Ns)),\n Tuple{String,Any}[\n (\"LS-HZ\", M -> Manopt.LineSearchesStepsize(ls_hz)),\n #(\"Improved HZ\", (M, sigma) -> HagerZhangLinesearch(M; sigma=sigma)),\n (\"Wolfe-Powell\", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),\n ],\n 10.0,\n )\n\n # Here you need to define baseline values of all hyperparameters\n baseline_pruning_losses = compute_pruning_losses(\n od,\n Dict(\"mem_len\" => 4),\n Dict(\n \"Wolfe-Powell c1\" => 1e-4,\n \"Wolfe-Powell 1-c2\" => 1e-3,\n \"Improved HZ sigma\" => 0.9,\n ),\n Dict(\n \"vector_transport_method\" => 1,\n \"retraction_method\" => 1,\n \"manifold\" => 1,\n \"manopt_stepsize\" => 1,\n ),\n )\n od.pruning_losses = pruning_coeff * baseline_pruning_losses\n\n study = optuna.create_study(; study_name=\"L-BFGS\")\n # Here you can specify number of trials and timeout (in seconds).\n study.optimize(od; n_trials=1000, timeout=500)\n println(\"Best params is $(study.best_params) with value $(study.best_value)\")\n selected_manifold = od.manifold_constructors[pyconvert(Int, study.best_params[\"manifold\"])][1]\n selected_retraction_method = od.retrs[pyconvert(Int, study.best_params[\"retraction_method\"])]\n selected_vector_transport = od.vts[pyconvert(Int, study.best_params[\"vector_transport_method\"])]\n println(\"Selected manifold: $(selected_manifold)\")\n println(\"Selected retraction method: $(selected_retraction_method)\")\n println(\"Selected vector transport method: $(selected_vector_transport)\")\n return study\nend\n\nlbfgs_study()","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Best params is {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093} with value 5510.963227438757\nSelected manifold: Sphere\nSelected retraction method: ExponentialRetraction()\nSelected vector transport method: ProjectionTransport()\n\n[I 2024-03-16 18:04:17,965] A new study created in memory with name: L-BFGS\n[I 2024-03-16 18:04:45,996] Trial 0 finished with value: 5639.789870295856 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00027288064367948073, 'Wolfe-Powell 1-c2': 0.00026503788892114045}. Best is trial 0 with value: 5639.789870295856.\n[I 2024-03-16 18:05:11,860] Trial 1 finished with value: 5635.936370295855 and parameters: {'mem_len': 11, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.002743250060163298, 'Wolfe-Powell 1-c2': 0.00037986521186922096}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:05:39,386] Trial 2 finished with value: 5673.101441724422 and parameters: {'mem_len': 26, 'vector_transport_method': 2, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00043339485784312605, 'Wolfe-Powell 1-c2': 0.0027302649933974173}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:10,279] Trial 3 finished with value: 7410.818084581564 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:37,995] Trial 4 finished with value: 5756.566226449636 and parameters: {'mem_len': 25, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:42,755] Trial 5 pruned. \n[I 2024-03-16 18:06:58,577] Trial 6 pruned. \n[I 2024-03-16 18:07:15,366] Trial 7 pruned. \n[I 2024-03-16 18:07:40,605] Trial 8 finished with value: 5581.7437274386975 and parameters: {'mem_len': 7, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0010567355712112379, 'Wolfe-Powell 1-c2': 0.003948002490203636}. Best is trial 8 with value: 5581.7437274386975.\n[I 2024-03-16 18:07:46,021] Trial 9 pruned. \n[I 2024-03-16 18:08:11,512] Trial 10 finished with value: 5510.963227438757 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:08:35,914] Trial 11 finished with value: 5521.388656010121 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006738829952322474, 'Wolfe-Powell 1-c2': 0.0010639659137420014}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:00,317] Trial 12 finished with value: 5521.36958458155 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00010975606104676191, 'Wolfe-Powell 1-c2': 0.0007663843095951679}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:24,680] Trial 13 finished with value: 5520.7020845815505 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 6.743450835567536e-05, 'Wolfe-Powell 1-c2': 0.0008779759729737719}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:50,268] Trial 14 pruned. \n[I 2024-03-16 18:10:15,494] Trial 15 finished with value: 5595.119584581556 and parameters: {'mem_len': 6, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 8.147444451747575e-05, 'Wolfe-Powell 1-c2': 0.00012268601197923553}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:10:25,264] Trial 16 pruned. \n[I 2024-03-16 18:10:50,209] Trial 17 finished with value: 5572.474513153012 and parameters: {'mem_len': 5, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0015998473664092935, 'Wolfe-Powell 1-c2': 0.0005109172020536229}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:10:54,772] Trial 18 pruned. \n[I 2024-03-16 18:11:04,534] Trial 19 pruned. \n[I 2024-03-16 18:11:28,873] Trial 20 finished with value: 5512.3824417244705 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.1581668103921961e-05, 'Wolfe-Powell 1-c2': 0.0002691056199427656}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:11:53,327] Trial 21 finished with value: 5529.088227438692 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.3645031886009879e-05, 'Wolfe-Powell 1-c2': 0.0001863385753491203}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:12:17,911] Trial 22 finished with value: 5522.041370295835 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.0030173525937465e-05, 'Wolfe-Powell 1-c2': 0.000543991948003312}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:12:27,645] Trial 23 pruned. \n[I 2024-03-16 18:12:52,163] Trial 24 finished with value: 5528.840941724406 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.000245400433292576, 'Wolfe-Powell 1-c2': 0.000133639324295565}. Best is trial 10 with value: 5510.963227438757.\n\nPython: ","category":"page"},{"location":"examples/HyperparameterOptimization/#Summary","page":"Hyperparameter optimziation","title":"Summary","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"We’ve shown how to automatically select the best hyperparameter values for your optimization problem.","category":"page"},{"location":"examples/HyperparameterOptimization/#Literature","page":"Hyperparameter optimziation","title":"Literature","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.\n\n\n\n","category":"page"},{"location":"examples/#List-of-Examples","page":"Overview","title":"List of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation Comment\nA Benchmark for Difference of Convex contains a few simple functions \nBézier Curves and Minimizing their Acceleration tools Bézier curves and their acceleration 📚 \nSolving Rosenbrock with Difference of Convex DoC split of Rosenbrock 📚 uses a Rosenbrock based metric\nDifference of Convex vs. Frank-Wolfe closed-form sub solver\nRiemannian Mean f, operatornamegradf (A/I), objective 📚 \nRobust PCA f, operatornamegradf (A/I), objective 📚 \nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚 \nThe Rayleigh Quotient f, operatornamegradf (A/I), operatornameHessf (A/I), objective 📚 \nTotal Variation Minimization f, operatornameproxf (A/I), objective 📚 ","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Solving-Rosenbrock-with-the-Difference-of-Convex-Algorithm","page":"Rosenbrock Metric","title":"Solving Rosenbrock with the Difference of Convex Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Introduction","page":"Rosenbrock Metric","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Both the Rosenbrock problem","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":" operatorname*argmin_xin ℝ^2 abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where ab0 and usually b=1 and a gg b, we know the minimizer x^* = (bb^2)^mathrmT, and also the (Euclidean) gradient","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"nabla f(x) =\n beginpmatrix\n 4a(x_1^2-x_2) -2a(x_1^2-x_2)\n endpmatrix\n +\n beginpmatrix\n 2(x_1-b) 0\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Furthermore, the RosenbrockMetric can be used on ℝ^2, that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"XY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"The Euclidean Gradient\nThe Riemannian gradient descent with respect to the RosenbrockMetric\nThe Euclidean Difference of Convex Algorithm\nThe Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Where we obtain a difference of convex problem by writing","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f(x) = abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2\n = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 - bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"g(x) = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 quadtext and quad h(x) = bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nimport Manopt: set_manopt_parameter!\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\ngreen = paul_tol[\"mutedgreen\"]\nsand = paul_tol[\"mutedsand\"]\nteal = paul_tol[\"mutedteal\"]\ngrey = paul_tol[\"mutedgrey\"]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"To emphasize the effect, we choose a quite large value of a.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"a = 2*10^5\nb = 1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and use the starting point and a direction to check gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"p0 = [0.1, 0.2]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Euclidean Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Euclidean gradient we can just use the same approach as in the Rosenbrock example","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M = ℝ^2\nf = ManoptExamples.RosenbrockCost(M; a=a, b=b)\n∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"define a common debug vector","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"debug_vec = [\n (:Iteration, \"# %-8d \"),\n (:Cost, \"F(x): %1.4e\"),\n \" \",\n (:Change, \"|δp|: %1.4e | \"),\n (:GradientNorm, \"|grad f|: %1.6e\"),\n :Stop,\n \"\\n\",\n ]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and call the gradient descent algorithm","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^7],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03\n# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04\n# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06\n# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08\n# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 53073227 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Riemannian Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Riemannian case, we define","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and the gradient is now adopted to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_f!(M, X, p)\n ∇f!!(M, X, p)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_f(M, p)\n X = zero_vector(M, p)\n return grad_f!(M, X, p)\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^6],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 1000000 F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04\n# 2000000 F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 2443750 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Euclidean Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the convex case, we have to first introduce the two parts of the cost.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;\nf2(M, p; a=100, b=1) = (p[1] - b[1])^2;\ng(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)\nh(M, p; a=100, b=1) = f2(M, p; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and their (Euclidan) gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function ∇h!(M, X, p; a=100, b=1)\n X[1] = 2*(p[1]-b)\n X[2] = 0\n return X\nend\nfunction ∇h(M, p; a=100, b=1)\n X = zero(p)\n ∇h!(M, X, p; a=a, b=b)\n return X\nend\nfunction ∇g!(M, X, p; a=100, b=1)\n X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)\n X[2] = -2*a*(p[1]^2-p[2])\n return X\nend\nfunction ∇g(M, p; a=100, b=1)\n X = zero(p)\n ∇g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and we define for convenience","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docE_g(M, p) = g(M, p; a=a, b=b)\ndocE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)\ndocE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)\ndocE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)\nfunction docE_∇f!(M, X, p)\n Y = zero_vector(M, p)\n docE_∇g!(M, X, p)\n docE_∇h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we call the difference of convex algorithm on Eucldiean space ℝ^2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"E_doc_state = difference_of_convex_algorithm(\n M, docE_f, docE_g, docE_∇h!, p0;\n gradient=docE_∇f!,\n grad_g = docE_∇g!,\n debug=[debug_vec..., 10^4],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_hess=nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000 F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04\n# 20000 F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 26549 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping criterion\n | \n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Riemannian Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"We first have to again defined the gradients with respect to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_h!(M, X, p; a=100, b=1)\n ∇h!(M, X, p; a=a, b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_h(M, p; a=100, b=1)\n X = zero(p)\n grad_h!(M, X, p; a=a, b=b)\n return X\nend\nfunction grad_g!(M, X, p; a=100, b=1)\n ∇g!(M, X, p; a=a,b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_g(M, p; a=100, b=1)\n X = zero(p)\n grad_g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For X in h(p^(k)) the sunproblem top determine p^(k+1) reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatorname*argmin_pinmathcal M g(p) - langle X log_p^(k)prangle","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with X = operatornamegrad h(p^(k)) that","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"phi(p) = g(p) - langle X log_p^(k)prangle\n= abigl( p_1^2-p_2bigr)^2\n + 2bigl(p_1-bbigr)^2 - 2(p^(k)_1-b)p_1 + 2(p^(k)_1-b)p^(k)_1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"its Euclidean gradient reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatornamegradphi(p) =\n nabla varphi(p)\n = beginpmatrix\n 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^(k)_1-b)\n -2a(p_1^2-p_2)\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where we can again employ the gradient conversion from before to obtain the Riemannian gradient.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"mutable struct SubGrad{P,T,V}\n pk::P\n Xk::T\n a::V\n b::V\nend\nfunction (ϕ::SubGrad)(M, p)\n X = zero_vector(M, p)\n ϕ(M, X, p)\n return X\nend\nfunction (ϕ::SubGrad)(M, X, p)\n X .= [\n 4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),\n -2 * ϕ.a * (p[1]^2 - p[2]),\n ]\n riemannian_gradient!(M, X, p, X) # convert\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And in orer to update the subsolvers gradient correctly, we have to overwrite","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)\nset_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we again introduce for ease of use","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docR_g(M, p) = g(M, p; a=a, b=b)\ndocR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)\ndocR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)\ndocR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)\nfunction docR_grad_f!(M, X, p)\n Y = zero_vector(M, p)\n docR_grad_g!(M, X, p)\n docR_grad_h!(M, Y, p)\n X .-= Y\n return X\nend\ndocR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_doc_state = difference_of_convex_algorithm(\n M_rb, docR_f, docR_g, docR_grad_h!, p0;\n gradient=docR_grad_f!,\n grad_g = docR_grad_g!,\n debug=[debug_vec..., 10^6],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_grad=docR_sub_grad,\n sub_hess = nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 1235 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping criterion\n | \n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Comparison-in-Iterations","page":"Rosenbrock Metric","title":"Comparison in Iterations","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x)$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-16, 5*1e5),\n xaxis=:log,\n xlims=(1,10^8),\n)\nscatter!(fig, [1,], [f(M,p0),], label=raw\"$f(p_0)$\", markercolor=grey)\negi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries\negc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries\nplot!(fig, egi, egc, color=teal, label=\"Euclidean GD\")\n#\nrgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries\nrgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries\nplot!(fig, rgi, rgc, color=indigo, label=\"Riemannian GD\")\n#\nedi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries\nedc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries\nplot!(fig, edi, edc, color=sand, label=\"Euclidean DoC\")\n#\nrdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries\nrdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries\nplot!(fig, rdi, rdc, color=green, label=\"Riemannian DoC\")","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Literature","page":"Rosenbrock Metric","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\n","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/Changelog.md\"","category":"page"},{"location":"changelog/#Changelog","page":"Changelog","title":"Changelog","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"All notable changes to this Julia package will be documented in this file.","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.","category":"page"},{"location":"changelog/#[0.1.6]-–-unreleased","page":"Changelog","title":"[0.1.6] – unreleased","text":"","category":"section"},{"location":"changelog/#Added","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Hyperparameter optimization example.","category":"page"},{"location":"changelog/#[0.1.3]-–-11/12/2023","page":"Changelog","title":"[0.1.3] – 11/12/2023","text":"","category":"section"},{"location":"changelog/#Added-2","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Total variation Minimization cost, proxes, and an example\nBézier curve cost, gradients, and an example.","category":"page"},{"location":"changelog/#[0.1.3]-–-16/09/2023","page":"Changelog","title":"[0.1.3] – 16/09/2023","text":"","category":"section"},{"location":"changelog/#Added-3","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rayleigh Quotient functions added\nan example illustrating Euclidean gradient/HEssian conversion\nAdd Literature with DocumenterCitations","category":"page"},{"location":"changelog/#[0.1.2]-–-13/06/2023","page":"Changelog","title":"[0.1.2] – 13/06/2023","text":"","category":"section"},{"location":"changelog/#Added-4","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Update examples to use Quarto\nAdd DC examples","category":"page"},{"location":"changelog/#[0.1.1]-–-01/03/2023","page":"Changelog","title":"[0.1.1] – 01/03/2023","text":"","category":"section"},{"location":"changelog/#Added-5","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rosenbrock function and examples","category":"page"},{"location":"changelog/#[0.1.0]-–-18/02/2023","page":"Changelog","title":"[0.1.0] – 18/02/2023","text":"","category":"section"},{"location":"changelog/#Added-6","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested\nSetup Documentation to provide one example Quarto file for every example objective to illustrate how to use them.","category":"page"},{"location":"examples/Bezier-curves/#Minimizing-the-Acceleration-of-Bézier-Curves-on-the-Sphere","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using Manifolds, Manopt, ManoptExamples","category":"page"},{"location":"examples/Bezier-curves/#Introduction","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Introduction","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"function bezier(M::AbstractManifold, t, pts::NTuple)\n p = bezier(M, t, pts[1:(end - 1)])\n q = bezier(M, t, pts[2:end])\n return shortest_geodesic(M, p, q, t)\nend\nfunction bezier(M::AbstractManifold, t, pts::NTuple{2})\n return shortest_geodesic(M, pts[1], pts[2], t)\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using ManoptExamples:\n artificial_S2_composite_Bezier_curve,\n BezierSegment,\n de_Casteljau,\n get_Bezier_degrees,\n get_Bezier_inner_points,\n get_Bezier_junctions,\n get_Bezier_junction_tangent_vectors,\n get_Bezier_points,\n get_Bezier_segments,\n grad_L2_acceleration_Bezier,\n L2_acceleration_Bezier","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"This notebook reproduces the example form Section 5.2 in [BG18].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The following image illustrates how the de-Casteljau algorithm works for one segment.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: A Bezier segment and illustration of the de-Casteljau algorithm)","category":"page"},{"location":"examples/Bezier-curves/#Approximating-data-by-a-curve-with-minimal-accelartion","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Approximating data by a curve with minimal accelartion","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We first load our example data","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"M = Sphere(2)\nB = artificial_S2_composite_Bezier_curve()\ndata_points = get_Bezier_junctions(M, B)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The original curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We continue to recude the points, since we “know” sme points due to the C^1 property: the second to last control point of the first segment b_02, the joint junction point connecting both segments b_03=b_10 and the second control point b_11 of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We can use this reduced form as the variable to optimize and the one from the data as our initial point.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"pB = get_Bezier_points(M, B, :differentiable)\nN = PowerManifold(M, NestedPowerRepresentation(), length(pB))","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the λ=10","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient\nλ = 10.0\nfunction f(M, pB)\n return L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend\nfunction grad_f(M, pB)\n return grad_L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"grad_f (generic function with 1 method)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Then we can optimize","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"x0 = pB\npB_opt = gradient_descent(\n N,\n f,\n grad_f,\n x0;\n stepsize=ArmijoLinesearch(N;\n initial_stepsize=1.0,\n retraction_method=ExponentialRetraction(),\n contraction_factor=0.5,\n sufficient_decrease=0.001,\n ),\n stopping_criterion=StopWhenChangeLess(1e-5) |\n StopWhenGradientNormLess(1e-7) |\n StopAfterIteration(300),\n debug=[\n :Iteration,\n \" | \",\n :Cost,\n \" | \",\n DebugGradientNorm(),\n \" | \",\n DebugStepsize(),\n \" | \",\n :Change,\n \"\\n\",\n 25,\n :Stop,\n ],\n);","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Initial | f(x): 10.647244 | | | \n# 25 | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281\n# 50 | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780\n# 75 | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590\n# 100 | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745\nThe algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we can again look at the result","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The result looks as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The resulting curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\n","category":"page"},{"location":"data/#Data-sets","page":"Data","title":"Data sets","text":"","category":"section"},{"location":"data/#Signals-on-manifolds","page":"Data","title":"Signals on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_signals.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.Lemniscate-Tuple{Number}","page":"Data","title":"ManoptExamples.Lemniscate","text":"Lemniscate(t::Float; kwargs...)\nLemniscate(n::integer; interval=[0.0, 2π], kwargs...)\n\ngenerate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.\n\nTo be precise on the manifold M we use the tangent space at p and generate the curve\n\nγ(t) fracasin^2(t) + 1 beginpmatrix cos(t) cos(t)sin(t) endpmatrix\n\nin the plane spanned by X and Y in the tangent space. Note that this curve is 2π-periodic and a is the half-width of the curve.\n\nTo reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.\n\nTHe second variant generates n points equispaced in ìnterval` and calls the first variant.\n\nKeywords\n\nmanifold - (Sphere(2)) the manifold to build the lemniscate on\np - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate\na – (π/2.0) half-width of the Lemniscate\nX – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.\nY – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_signal","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal([pts=500])\n\ngenerate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to ``[BLSW14].\n\nOptional\n\npts: (500) number of points to sample the function\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S1_signal-Tuple{Real}","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal(x)\n\nevaluate the example signal f(x) x 01, of phase-valued data introduces in Sec. 5.1 of [BLSW14] for values outside that interval, this Signal is missing.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_slope_signal","page":"Data","title":"ManoptExamples.artificial_S1_slope_signal","text":"artificial_S1_slope_signal([pts=500, slope=4.])\n\nCreates a Signal of (phase-valued) data represented on the Circle with increasing slope.\n\nOptional\n\npts: (500) number of points to sample the function.\nslope: (4.0) initial slope that gets increased afterwards\n\nThis data set was introduced for the numerical examples in [BLSW14]\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_composite_Bezier_curve-Tuple{}","page":"Data","title":"ManoptExamples.artificial_S2_composite_Bezier_curve","text":"artificial_S2_composite_Bezier_curve()\n\nGenerate a composite Bézier curve on the [BG18].\n\nIt consists of 4 egments connecting the points\n\nmathbf d_0 = beginpmatrix 001endpmatrixquad\nmathbf d_1 = beginpmatrix 0-10endpmatrixquad\nmathbf d_2 = beginpmatrix -100endpmatrixtext and \nmathbf d_3 = beginpmatrix 00-1endpmatrix\n\nwhere instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be C^1.\n\nWe define\n\nX_0 = fracπ8sqrt2beginpmatrix1-10endpmatrixquad\nX_1 = fracπ4sqrt2beginpmatrix101endpmatrixquad\nX_2 = fracπ4sqrt2beginpmatrix01-1endpmatrixtext and \nX_3 = fracπ8sqrt2beginpmatrix-110endpmatrix\n\nwhere we defined each X_i in T_d_imathbb S^2. We defined three BezierSegments\n\nof cubic Bézier curves as follows\n\nbeginalign*\nb_00 = d_0 quad b_10 = exp_d_0X_0 quad b_20 = exp_d_1X_1 quad b_30 = d_1\nb_01 = d_1 quad b_11 = exp_d_1(-X_1) quad b_21 = exp_d_2X_2 quad b_31 = d_2\nb_02 = d_2 quad b_11 = exp_d_2(-X_2) quad b_22 = exp_d_3X_3 quad b_32 = d_3\nendalign*\n\n\n\n\n\n","category":"method"},{"location":"data/#images-on-manifolds","page":"Data","title":"images on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_images.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.artificialIn_SAR_image-Tuple{Integer}","page":"Data","title":"ManoptExamples.artificialIn_SAR_image","text":"artificialIn_SAR_image([pts=500])\n\ngenerate an artificial InSAR image, i.e. phase valued data, of size pts x pts points.\n\nThis data set was introduced for the numerical examples in [BLSW14].\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S2_rotation_image","page":"Data","title":"ManoptExamples.artificial_S2_rotation_image","text":"artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])\n\nCreate an image with a rotation on each axis as a parametrization.\n\nOptional Parameters\n\npts: (64) number of pixels along one dimension\nrotations: ((.5,.5)) number of total rotations performed on the axes.\n\nThis dataset was used in the numerical example of Section 5.1 of [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_image","page":"Data","title":"ManoptExamples.artificial_S2_whirl_image","text":"artificial_S2_whirl_image([pts::Int=64])\n\nGenerate an artificial image of data on the 2 sphere,\n\nArguments\n\npts: (64) size of the image in pts×pts pixel.\n\nThis example dataset was used in the numerical example in Section 5.5 of [LNPS17]\n\nIt is based on artificial_S2_rotation_image extended by small whirl patches.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_patch","page":"Data","title":"ManoptExamples.artificial_S2_whirl_patch","text":"artificial_S2_whirl_patch([pts=5])\n\ncreate a whirl within the pts×pts patch of Sphere(@ref)(2)-valued image data.\n\nThese patches are used within artificial_S2_whirl_image.\n\nOptional Parameters\n\npts: (5) size of the patch. If the number is odd, the center is the north pole.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image","page":"Data","title":"ManoptExamples.artificial_SPD_image","text":"artificial_SPD_image([pts=64, stepsize=1.5])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.\n\nThis dataset was used in the numerical example of Section 5.2 of [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image2","page":"Data","title":"ManoptExamples.artificial_SPD_image2","text":"artificial_SPD_image2([pts=64, fraction=.66])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.\n\nThis data set was introduced in the numerical examples of Section of [BPS16]\n\n\n\n\n\n","category":"function"},{"location":"data/#Literature","page":"Data","title":"Literature","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\n","category":"page"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny BergmannLaura Weigl 2023-07-02","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139397\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.430690947905521","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412961981726742","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Total-Variation/#Total-Variation-Minimization","page":"Total Variation","title":"Total Variation Minimization","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Total-Variation/#Introduction","page":"Total Variation","title":"Introduction","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.","category":"page"},{"location":"examples/Total-Variation/#The-manifold-valued-ROF-model","page":"Total Variation","title":"The manifold-valued ROF model","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold s = (s_i)_i=1^N in mathbb M^n of length n in mathbb N, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term D(ps) to “stay close to” s and a regularizer R(p). For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"operatorname*argmin_pinmathcal M^n\nf(p)\nqquad\nf(p) = D(ps) + α R(p) = sum_i=1^n d_mathcal M^2(s_ip_i) + αsum_i=1^n-1 d_mathcal M(p_ip_i+1)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"where α 0 is a weight parameter.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost f(p) to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any p_i=p_i+1. So we have to use another technique.","category":"page"},{"location":"examples/Total-Variation/#The-Cyclic-Proximal-Point-algorithm","page":"Total Variation","title":"The Cyclic Proximal Point algorithm","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the Cyclic Proximal Point Algorithm [Bac14].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.","category":"page"},{"location":"examples/Total-Variation/#The-Optimsation","page":"Total Variation","title":"The Optimsation","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Manifolds, Manopt, ManoptExamples, ManifoldDiff\nusing ManifoldDiff: prox_distance\nusing ManoptExamples: prox_Total_Variation\nn = 500 #Signal length\nσ = 0.2 # amount of noise\nα = 0.5# in the TV model","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We define a few colors","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Colors, NamedColors, ColorSchemes, Plots, Random\ndata_color = RGBA{Float64}(colorant\"black\")\nlight_color = RGBA{Float64}(colorant\"brightgrey\")\nrecon_color = RGBA{Float64}(colorant\"vibrantorange\")\nnoisy_color = RGBA{Float64}(colorant\"vibrantteal\")","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Random.seed!(23)\nM = Circle()\nN = PowerManifold(M, n)\ndata = ManoptExamples.artificial_S1_signal(n)\ns = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]\nt = range(0.0, 1.0; length=n)\nscene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=noisy_color,\n markerstrokecolor=noisy_color,\n lab=\"noisy\",\n)\nyticks!(\n [-π, -π / 2, 0, π / 2, π],\n [raw\"$-\\pi$\", raw\"$-\\frac{\\pi}{2}$\", raw\"$0$\", raw\"$\\frac{\\pi}{2}$\", raw\"$\\pi$\"],\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Defining cost and the proximal maps, which are actually 3 proxes to be precise.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)\nproxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_Total_Variation(N, α * λ, p))","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We run the algorithm","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"o = cyclic_proximal_point(\n N,\n f,\n proxes_f,\n s;\n λ=i -> π / (2 * i),\n debug=[\n :Iteration,\n \" | \",\n DebugProximalParameter(),\n \" | \",\n :Cost,\n \" | \",\n :Change,\n \"\\n\",\n 1000,\n :Stop,\n ],\n record=[:Iteration, :Cost, :Change, :Iterate],\n return_state=true,\n);","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Initial | | f(x): 59.187445 | \n# 1000 | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283\n# 2000 | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678\n# 3000 | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907\n# 4000 | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957\n# 5000 | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175\nThe algorithm reached its maximal number of iterations (5000).","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can see that the cost reduces nicely. Let’s extract the result an the recorded values","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"recon = get_solver_result(o)\nrecord = get_record(o)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We get","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"scene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=light_color,\n markerstrokecolor=light_color,\n lab=\"noisy\",\n)\nscatter!(\n scene,\n t,\n recon;\n markersize=2,\n markercolor=recon_color,\n markerstrokecolor=recon_color,\n lab=\"reconstruction\",\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”","category":"page"},{"location":"examples/Total-Variation/#Outlook","page":"Total Variation","title":"Outlook","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the operatornameTV_2 yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Another extension for both first and second order TV is to apply this for manifold-valued images S = (S_ij)_ij=1^mn in mathcal M^mn, where the distances in the regularizer are then used in both the first dimension i and the second dimension j in the data.","category":"page"},{"location":"examples/Total-Variation/#Technical-details","page":"Total Variation","title":"Technical details","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This version of the example was generated with the following package versions.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Pkg.status()","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`\n [6e4b80f9] BenchmarkTools v1.5.0\n [35d6a980] ColorSchemes v3.24.0\n [5ae59095] Colors v0.12.10\n [7073ff75] IJulia v1.24.2\n [8ac3fa9e] LRUCache v1.6.1\n [d3d80556] LineSearches v7.2.0\n [af67fdf4] ManifoldDiff v0.3.10\n [1cead3c2] Manifolds v0.9.14\n [3362f125] ManifoldsBase v0.15.8\n [0fc0a36d] Manopt v0.4.58\n [5b8d5e80] ManoptExamples v0.1.6 `..`\n [51fcb6bd] NamedColors v0.2.2\n [91a5bcdd] Plots v1.40.2\n [6099a3de] PythonCall v0.9.19","category":"page"},{"location":"examples/Total-Variation/#Literature","page":"Total Variation","title":"Literature","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 2023-01-03","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field=ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 26 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector transport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |grad f| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"1.4404666436813376e-18","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 2023-07-02","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get started: optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get started: optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do in-place-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393613136017\n 0.006531541407458413\n 0.7267799052788726","category":"page"},{"location":"examples/RayleighQuotient/#The-Rayleigh-Quotient","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Ronny Bergmann 2024-03-09","category":"page"},{"location":"examples/RayleighQuotient/#Introduction","page":"The Rayleigh Quotient","title":"Introduction","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For a symmetric matrix A in mathbb R^ntimes n we consider the 📖 Rayleigh Quotient","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"operatorname*argmin_x in mathbb R^n backslash 0\nfracx^mathrmTAxlVert x rVert^2","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"On the sphere we can omit the denominator and obtain","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f(p) = p^mathrmTApqquad p 𝕊^n-1","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"which by itself we can again continue in the embedding as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"tilde f(x) = x^mathrmTAxqquad x in mathbb R^n","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This cost has the nice feature that at the minimizer p^*inmathbb S^n-1 the function falue f(p^*) is the smalles eigenvalue of A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For the embedded function tilde f the gradient and Hessian can be computed with classical methods as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\ntilde f(x) = 2Ax qquad x ℝ^n\n\n^2tilde f(x)V = 2AV qquad x V ℝ^n\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold mathcal M = mathbb S^n-1 are given by","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\noperatornamegrad f(p) = 2Ap - 2(p^mathrmTAp)*pqquad p 𝕊^n-1\n\noperatornameHess f(p)X = 2AX - 2(p^mathrmTAX)p - 2(p^mathrmTAp)Xqquad p 𝕊^n-1 X in T_p𝕊^n-1\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first generate an example martrx A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random\nRandom.seed!(42)\nn = 500\nA = Symmetric(randn(n, n) / n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And the manifolds","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"M = Sphere(n-1)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Sphere(499, ℝ)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"E = get_embedding(M)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean(500; field=ℝ)","category":"page"},{"location":"examples/RayleighQuotient/#Setup-the-corresponding-functions","page":"The Rayleigh Quotient","title":"Setup the corresponding functions","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute f is called with M as their first argument and tilde f if called with E.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We instantiate","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f = ManoptExamples.RayleighQuotientCost(A)\ngrad_f = ManoptExamples.RayleighQuotientGrad!!(A)\nHess_f = ManoptExamples.RayleighQuotientHess!!(A)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"p0 = [1.0, zeros(n-1)...]\nX = zero_vector(M, p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"we can both call","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Y = grad_f(M, p0) # Allocates memory\ngrad_f(M, X, p0) # Computes in place of X and returns the result in X.\nnorm(M, p0, X-Y)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"0.0","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"λ = min(eigvals(A)...)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"-0.08967721009388108","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-on-gradient-information","page":"The Rayleigh Quotient","title":"A Solver based on gradient information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient nabla tilde f. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n return_state=true,\n)\nq1 = get_solver_result(s)\ns","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 50 f(x): -0.088415|grad f(p)|:0.004530500043902619\n# 100 f(x): -0.089097|grad f(p)|:0.004589417101266096\n# 150 f(x): -0.089530|grad f(p)|:0.0026028331895358247\n# 200 f(x): -0.089650|grad f(p)|:0.0012359084298719039\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-6d\"), (:Cost, \"f(x): %f\"), (:GradientNorm, \"|grad f(p)|:%s\"), \"\\n\", 50]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q2 = gradient_descent(M, f, grad_f, p0;\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n)\n#Test that both are the same\nisapprox(M, q1,q2)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 50 f(x): -0.088415|grad f(p)|:0.004530500043902567\n# 100 f(x): -0.089097|grad f(p)|:0.004589417101266063\n# 150 f(x): -0.089530|grad f(p)|:0.002602833189535808\n# 200 f(x): -0.089650|grad f(p)|:0.0012359084298719097\n\ntrue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We can also benchmark both","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 22 samples with 1 evaluation.\n Range (min … max): 230.735 ms … 247.927 ms ┊ GC (min … max): 2.85% … 2.57%\n Time (median): 231.768 ms ┊ GC (median): 2.78%\n Time (mean ± σ): 234.409 ms ± 5.319 ms ┊ GC (mean ± σ): 2.81% ± 0.27%\n\n ▄█▄▁ ▁ ▁ \n ████▆▁▆▁█▁▁▁▁▁▁▆▁▁▁▁▆▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▆▁▁▁▁▁▁▁▁▁▁▁▁▆ ▁\n 231 ms Histogram: frequency by time 248 ms <\n\n Memory estimate: 1.13 GiB, allocs estimate: 3613.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 159 samples with 1 evaluation.\n Range (min … max): 30.890 ms … 40.010 ms ┊ GC (min … max): 0.00% … 0.00%\n Time (median): 31.134 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 31.598 ms ± 1.285 ms ┊ GC (mean ± σ): 0.57% ± 0.96%\n\n ▃█▅ \n ███▆▃▃▁▃▇▄▇▅▂▂▁▁▁▁▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▁▁▁▁▁▁▁▁▁▁▂▂▁▁▁▁▁▁▂▁▃ ▂\n 30.9 ms Histogram: frequency by time 36.7 ms <\n\n Memory estimate: 11.38 MiB, allocs estimate: 3006.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From these results we see, that the conversion from the Euclidean to the Riemannian gradient does require a small amount of effort and hence reduces the performance slighly. Still, if the Euclidean Gradient is easier to compute or already available, this is in terms of coding the faster way. Finally this is a tradeoff between derivation and implementation efforts for the Riemannian gradient and a slight performance reduction when using the Euclidean one.","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-(also)-on-(approximate)-Hessian-information","page":"The Rayleigh Quotient","title":"A Solver based (also) on (approximate) Hessian information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To also involve the Hessian, we consider the trust regions solver with three cases:","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean, approximating the Hessian\nEuclidean, providing the Hessian\nRiemannian, providing the Hessian but also using in-place evaluations.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.088106|grad f(p)|:0.01903913659588686\n# 20 f(x): -0.089023|grad f(p)|:0.007792334296299116\n# 30 f(x): -0.089501|grad f(p)|:0.008034300330026467\n# 40 f(x): -0.089842|grad f(p)|:0.008125526728200166\n# 50 f(x): -0.089890|grad f(p)|:0.0031244752821335416\n# 60 f(x): -0.089925|grad f(p)|:0.0029682862637714163\n# 70 f(x): -0.089962|grad f(p)|:0.002811722437216778\n# 80 f(x): -0.089997|grad f(p)|:0.0026658493010157363\n# 90 f(x): -0.090032|grad f(p)|:0.0025418974797659266\n# 100 f(x): -0.090067|grad f(p)|:0.0024485809550738955\n# 110 f(x): -0.090108|grad f(p)|:0.0023894008071780747\n# 120 f(x): -0.090155|grad f(p)|:0.002362317662908117\n# 130 f(x): -0.090208|grad f(p)|:0.0023611301647631484\n# 140 f(x): -0.090262|grad f(p)|:0.00237797866404072\n# 150 f(x): -0.090314|grad f(p)|:0.002405563029627607\n# 160 f(x): -0.090362|grad f(p)|:0.002438250821406204\n# 170 f(x): -0.090404|grad f(p)|:0.002472221074327323\n# 180 f(x): -0.090441|grad f(p)|:0.0025051377726827166\n# 190 f(x): -0.090472|grad f(p)|:0.002535721310831389\n# 200 f(x): -0.090498|grad f(p)|:0.0025633813700434637\n# 210 f(x): -0.090513|grad f(p)|:0.0025832821804127513\n# 220 f(x): -0.090513|grad f(p)|:0.0025832821804127513\n# 230 f(x): -0.090513|grad f(p)|:0.0025832821792817493\n# 240 f(x): -0.090513|grad f(p)|:0.0025832821770197098\n# 250 f(x): -0.090513|grad f(p)|:0.0025832821747576924\n# 260 f(x): -0.090513|grad f(p)|:0.002583282172495683\n# 270 f(x): -0.090513|grad f(p)|:0.0025832821702336567\n# 280 f(x): -0.090513|grad f(p)|:0.002583282167971658\n# 290 f(x): -0.090513|grad f(p)|:0.002583282165709656\n# 300 f(x): -0.090513|grad f(p)|:0.002583282163447637\n# 310 f(x): -0.090513|grad f(p)|:0.0025832821611855928\n# 320 f(x): -0.090513|grad f(p)|:0.0025832821589235814\n# 330 f(x): -0.090513|grad f(p)|:0.002583282156661572\n# 340 f(x): -0.090513|grad f(p)|:0.0025832821543995727\n# 350 f(x): -0.090513|grad f(p)|:0.002583282152137569\n# 360 f(x): -0.090513|grad f(p)|:0.0025832821498755487\n# 370 f(x): -0.090513|grad f(p)|:0.0025832821476135036\n# 380 f(x): -0.090513|grad f(p)|:0.0025832821453515035\n# 390 f(x): -0.090513|grad f(p)|:0.0025832821430894675\n# 400 f(x): -0.090513|grad f(p)|:0.0025832821408274405\n# 410 f(x): -0.090513|grad f(p)|:0.002583282138565445\n# 420 f(x): -0.090513|grad f(p)|:0.002583282136303441\n# 430 f(x): -0.090513|grad f(p)|:0.00258328213404143\n# 440 f(x): -0.090513|grad f(p)|:0.002583282131779385\n# 450 f(x): -0.090513|grad f(p)|:0.0025832821295174104\n# 460 f(x): -0.090513|grad f(p)|:0.002583282127255372\n# 470 f(x): -0.090513|grad f(p)|:0.002583282124993372\n# 480 f(x): -0.090513|grad f(p)|:0.0025832821227313313\n# 490 f(x): -0.090513|grad f(p)|:0.0025832821204693065\n# 500 f(x): -0.090513|grad f(p)|:0.002583282118207321\n# 510 f(x): -0.090513|grad f(p)|:0.0025832821159453034\n# 520 f(x): -0.090513|grad f(p)|:0.0025832821136832665\n# 530 f(x): -0.090513|grad f(p)|:0.0025832821114212673\n# 540 f(x): -0.090513|grad f(p)|:0.002583282109159243\n# 550 f(x): -0.090513|grad f(p)|:0.002583282106897217\n# 560 f(x): -0.090513|grad f(p)|:0.002583282104635213\n# 570 f(x): -0.090513|grad f(p)|:0.0025832821023731955\n# 580 f(x): -0.090513|grad f(p)|:0.0025832821001112094\n# 590 f(x): -0.090513|grad f(p)|:0.002583282097849167\n# 600 f(x): -0.090513|grad f(p)|:0.0025832820955871503\n# 610 f(x): -0.090513|grad f(p)|:0.0025832820933251325\n# 620 f(x): -0.090513|grad f(p)|:0.002583282091063122\n# 630 f(x): -0.090513|grad f(p)|:0.0025832820888010873\n# 640 f(x): -0.090513|grad f(p)|:0.0025832820865390785\n# 650 f(x): -0.090513|grad f(p)|:0.0025832820842770442\n# 660 f(x): -0.090513|grad f(p)|:0.0025832820820150576\n# 670 f(x): -0.090513|grad f(p)|:0.0025832820797530767\n# 680 f(x): -0.090513|grad f(p)|:0.0025832820774910523\n# 690 f(x): -0.090513|grad f(p)|:0.0025832820752290362\n# 700 f(x): -0.090513|grad f(p)|:0.002583282072966992\n# 710 f(x): -0.090513|grad f(p)|:0.002583282070704973\n# 720 f(x): -0.090513|grad f(p)|:0.0025832820684429532\n# 730 f(x): -0.090513|grad f(p)|:0.002583282066180946\n# 740 f(x): -0.090513|grad f(p)|:0.0025832820639189306\n# 750 f(x): -0.090513|grad f(p)|:0.0025832820616569214\n# 760 f(x): -0.090513|grad f(p)|:0.00258328205939488\n# 770 f(x): -0.090513|grad f(p)|:0.002583282057132884\n# 780 f(x): -0.090513|grad f(p)|:0.0025832820548708406\n# 790 f(x): -0.090513|grad f(p)|:0.002583282052608873\n# 800 f(x): -0.090513|grad f(p)|:0.002583282050346837\n# 810 f(x): -0.090513|grad f(p)|:0.0025832820480848214\n# 820 f(x): -0.090513|grad f(p)|:0.0025832820458228205\n# 830 f(x): -0.090513|grad f(p)|:0.0025832820435608087\n# 840 f(x): -0.090513|grad f(p)|:0.0025832820412987944\n# 850 f(x): -0.090513|grad f(p)|:0.0025832820390367726\n# 860 f(x): -0.090513|grad f(p)|:0.002583282036774768\n# 870 f(x): -0.090513|grad f(p)|:0.002583282034512706\n# 880 f(x): -0.090513|grad f(p)|:0.002583282032250709\n# 890 f(x): -0.090513|grad f(p)|:0.0025832820299886896\n# 900 f(x): -0.090513|grad f(p)|:0.002583282027726701\n# 910 f(x): -0.090513|grad f(p)|:0.002583282025464682\n# 920 f(x): -0.090513|grad f(p)|:0.0025832820232026517\n# 930 f(x): -0.090513|grad f(p)|:0.002583282020940619\n# 940 f(x): -0.090513|grad f(p)|:0.0025832820186786334\n# 950 f(x): -0.090513|grad f(p)|:0.002583282016416595\n# 960 f(x): -0.090513|grad f(p)|:0.0025832820141545986\n# 970 f(x): -0.090513|grad f(p)|:0.0025832820118925717\n# 980 f(x): -0.090513|grad f(p)|:0.0025832820096305525\n# 990 f(x): -0.090513|grad f(p)|:0.002583282007368543\n# 1000 f(x): -0.090513|grad f(p)|:0.0025832820051065217","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.089673|grad f(p)|:0.0033633987039373655","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;\n evaluation=InplaceEvaluation(),\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.089673|grad f(p)|:0.00336339870393737","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $p0;\n objective_type=:Euclidean,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 10 samples with 1 evaluation.\n Range (min … max): 504.514 ms … 539.614 ms ┊ GC (min … max): 2.83% … 2.64%\n Time (median): 508.900 ms ┊ GC (median): 2.81%\n Time (mean ± σ): 512.978 ms ± 10.540 ms ┊ GC (mean ± σ): 2.79% ± 0.06%\n\n ▁█ ▁ █ ▁ ▁ ▁ ▁ \n ██▁▁▁█▁█▁▁▁▁▁▁▁▁▁█▁▁▁█▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 505 ms Histogram: frequency by time 540 ms <\n\n Memory estimate: 1.97 GiB, allocs estimate: 60518.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n objective_type=:Euclidean\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 311 samples with 1 evaluation.\n Range (min … max): 13.541 ms … 21.282 ms ┊ GC (min … max): 0.00% … 2.10%\n Time (median): 15.376 ms ┊ GC (median): 3.11%\n Time (mean ± σ): 16.099 ms ± 1.516 ms ┊ GC (mean ± σ): 3.90% ± 2.90%\n\n ▃█▂ \n ▄▄▃▁▂▁▁▂▄▄▂▃▇███▄▃▃▁▆▅▄▃▁▃▃▃▇▄▃▁▂▃▄▅▄▃▂▁▂▃▂▄▃▃▃▄▄▃▂▁▂▁▂▂▁▁▂ ▃\n 13.5 ms Histogram: frequency by time 20.3 ms <\n\n Memory estimate: 37.53 MiB, allocs estimate: 4527.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 522 samples with 1 evaluation.\n Range (min … max): 9.178 ms … 13.930 ms ┊ GC (min … max): 0.00% … 0.00%\n Time (median): 9.331 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 9.569 ms ± 495.194 μs ┊ GC (mean ± σ): 1.76% ± 2.89%\n\n ▁▄▆██▆▅▃ ▂▃▅▃▂▂▁▁ \n ██████████▇▄▄▄▁▁▁▁▄▁▄▄▄▁▄▆▆████████▅▄▁▅▁▁▄▁▁▄▁▁▄▄▁▁▁▄▄▁▁▄▁▅ █\n 9.18 ms Histogram: log(frequency) by time 11 ms <\n\n Memory estimate: 10.86 MiB, allocs estimate: 4506.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q1, q) for q ∈ [q2,q3] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 4.471485799821605e-15\n 0.048047538209352994","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q3, q) for q ∈ [q4,q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 0.08269488012454579\n 0.08269488012454579","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Which we can also see in the final cost, comparing it to the Eigenvalue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"5-element Vector{Float64}:\n 2.76900562450888e-5\n 2.769005624428389e-5\n -0.000836208332542443\n 3.191891195797325e-16\n 3.191891195797325e-16","category":"page"},{"location":"examples/RayleighQuotient/#Summary","page":"The Rayleigh Quotient","title":"Summary","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.","category":"page"},{"location":"examples/RayleighQuotient/#Literature","page":"The Rayleigh Quotient","title":"Literature","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"N. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\n","category":"page"},{"location":"helpers/error_measures/#Error-measures","page":"Error measures","title":"Error measures","text":"","category":"section"},{"location":"helpers/error_measures/","page":"Error measures","title":"Error measures","text":"Modules = [ManoptExamples]\nPages = [\"ErrorMeasures.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"helpers/error_measures/#ManoptExamples.mean_average_error-Tuple{ManifoldsBase.AbstractManifold, Any, Any}","page":"Error measures","title":"ManoptExamples.mean_average_error","text":"mean_average_error(M,x,y)\n\nCompute the (mean) squared error between the two points x and y on the PowerManifold manifold M.\n\n\n\n\n\n","category":"method"},{"location":"helpers/error_measures/#ManoptExamples.mean_squared_error-Union{Tuple{mT}, Tuple{mT, Any, Any}} where mT<:ManifoldsBase.AbstractManifold","page":"Error measures","title":"ManoptExamples.mean_squared_error","text":"mean_squared_error(M, p, q)\n\nCompute the (mean) squared error between the two points p and q on the (power) manifold M.\n\n\n\n\n\n","category":"method"},{"location":"#Welcome-to-ManoptExample.jl","page":"Home","title":"Welcome to ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"ManoptExamples.ManoptExamples","category":"page"},{"location":"#ManoptExamples.ManoptExamples","page":"Home","title":"ManoptExamples.ManoptExamples","text":"🏔️⛷️ ManoptExamples.jl – A collection of research and tutorial example problems for Manopt.jl\n\n📚 Documentation: juliamanifolds.github.io/ManoptExamples.jl\n📦 Repository: github.com/JuliaManifolds/ManoptExamples.jl\n💬 Discussions: github.com/JuliaManifolds/ManoptExamples.jl/discussions\n🎯 Issues: github.com/JuliaManifolds/ManoptExamples.jl/issues\n\n\n\n\n\n","category":"module"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/v0.1.6/siteinfo.js b/v0.1.6/siteinfo.js new file mode 100644 index 0000000..2b3ee15 --- /dev/null +++ b/v0.1.6/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.6"; diff --git a/v0.1.7/.documenter-siteinfo.json b/v0.1.7/.documenter-siteinfo.json new file mode 100644 index 0000000..d7a1d63 --- /dev/null +++ b/v0.1.7/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-06-07T21:59:48","documenter_version":"1.4.1"}} \ No newline at end of file diff --git a/v0.1.7/assets/documenter.js b/v0.1.7/assets/documenter.js new file mode 100644 index 0000000..c6562b5 --- /dev/null +++ b/v0.1.7/assets/documenter.js @@ -0,0 +1,1050 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let timer = 0; +var isExpanded = true; + +$(document).on("click", ".docstring header", function () { + let articleToggleTitle = "Expand docstring"; + + debounce(() => { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function (event) { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + let animationSpeed = event.noToggleAnimation ? 0 : 400; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(animationSpeed); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(animationSpeed); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let meta = $("div[data-docstringscollapsed]").data(); + + if (meta?.docstringscollapsed) { + $("#documenter-article-toggle-button").trigger({ + type: "click", + noToggleAnimation: true, + }); + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +/* +To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +PSEUDOCODE: + +Searching happens automatically as the user types or adjusts the selected filters. +To preserve responsiveness, as much as possible of the slow parts of the search are done +in a web worker. Searching and result generation are done in the worker, and filtering and +DOM updates are done in the main thread. The filters are in the main thread as they should +be very quick to apply. This lets filters be changed without re-searching with minisearch +(which is possible even if filtering is on the worker thread) and also lets filters be +changed _while_ the worker is searching and without message passing (neither of which are +possible if filtering is on the worker thread) + +SEARCH WORKER: + +Import minisearch + +Build index + +On message from main thread + run search + find the first 200 unique results from each category, and compute their divs for display + note that this is necessary and sufficient information for the main thread to find the + first 200 unique results from any given filter set + post results to main thread + +MAIN: + +Launch worker + +Declare nonconstant globals (worker_is_running, last_search_text, unfiltered_results) + +On text update + if worker is not running, launch_search() + +launch_search + set worker_is_running to true, set last_search_text to the search text + post the search query to worker + +on message from worker + if last_search_text is not the same as the text in the search field, + the latest search result is not reflective of the latest search query, so update again + launch_search() + otherwise + set worker_is_running to false + + regardless, display the new search results to the user + save the unfiltered_results as a global + update_search() + +on filter click + adjust the filter selection + update_search() + +update_search + apply search filters by looping through the unfiltered_results and finding the first 200 + unique results that match the filters + + Update the DOM +*/ + +/////// SEARCH WORKER /////// + +function worker_function(documenterSearchIndex, documenterBaseURL, filters) { + importScripts( + "https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js" + ); + + let data = documenterSearchIndex.map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; + }); + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", + ]); + + let index = new MiniSearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + + word = word.toLowerCase(); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not + // find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + prefix: true, + boost: { title: 100 }, + fuzzy: 2, + }, + }); + + index.addAll(data); + + /** + * Used to map characters to HTML entities. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const htmlEscapes = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + }; + + /** + * Used to match HTML entities and HTML characters. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const reUnescapedHtml = /[&<>"']/g; + const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** + * Escape function from lodash + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + function escape(string) { + return string && reHasUnescapedHtml.test(string) + ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) + : string || ""; + } + + /** + * Make the result component given a minisearch result data object and the value + * of the search input as queryString. To view the result object structure, refer: + * https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ + function make_search_result(result, querystring) { + let search_divider = `
                      `; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + + let textindex = new RegExp(`${querystring}`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + text = text.length ? escape(text) : ""; + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`${escape(querystring)}`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
                      +
                      ${escape(result.title)}
                      +
                      ${result.category}
                      +
                      +

                      + ${display_result} +

                      +
                      + ${display_link} +
                      +
                      + ${search_divider} + `; + + return result_div; + } + + self.onmessage = function (e) { + let query = e.data; + let results = index.search(query, { + filter: (result) => { + // Only return relevant results + return result.score >= 1; + }, + }); + + // Pre-filter to deduplicate and limit to 200 per category to the extent + // possible without knowing what the filters are. + let filtered_results = []; + let counts = {}; + for (let filter of filters) { + counts[filter] = 0; + } + let present = {}; + + for (let result of results) { + cat = result.category; + cnt = counts[cat]; + if (cnt < 200) { + id = cat + "---" + result.location; + if (present[id]) { + continue; + } + present[id] = true; + filtered_results.push({ + location: result.location, + category: cat, + div: make_search_result(result, query), + }); + } + } + + postMessage(filtered_results); + }; +} + +// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! +const filters = [ + ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), +]; +const worker_str = + "(" + + worker_function.toString() + + ")(" + + JSON.stringify(documenterSearchIndex["docs"]) + + "," + + JSON.stringify(documenterBaseURL) + + "," + + JSON.stringify(filters) + + ")"; +const worker_blob = new Blob([worker_str], { type: "text/javascript" }); +const worker = new Worker(URL.createObjectURL(worker_blob)); + +/////// SEARCH MAIN /////// + +// Whether the worker is currently handling a search. This is a boolean +// as the worker only ever handles 1 or 0 searches at a time. +var worker_is_running = false; + +// The last search text that was sent to the worker. This is used to determine +// if the worker should be launched again when it reports back results. +var last_search_text = ""; + +// The results of the last search. This, in combination with the state of the filters +// in the DOM, is used compute the results to display on calls to update_search. +var unfiltered_results = []; + +// Which filter is currently selected +var selected_filter = ""; + +$(document).on("input", ".documenter-search-input", function (event) { + if (!worker_is_running) { + launch_search(); + } +}); + +function launch_search() { + worker_is_running = true; + last_search_text = $(".documenter-search-input").val(); + worker.postMessage(last_search_text); +} + +worker.onmessage = function (e) { + if (last_search_text !== $(".documenter-search-input").val()) { + launch_search(); + } else { + worker_is_running = false; + } + + unfiltered_results = e.data; + update_search(); +}; + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + selected_filter = ""; + } else { + selected_filter = $(this).text().toLowerCase(); + } + + // This updates search results and toggles classes for UI: + update_search(); +}); + +/** + * Make/Update the search component + */ +function update_search() { + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + if (selected_filter == "") { + results = unfiltered_results; + } else { + results = unfiltered_results.filter((result) => { + return selected_filter == result.category.toLowerCase(); + }); + } + + let search_result_container = ``; + let modal_filters = make_modal_body_filters(); + let search_divider = `
                      `; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + for (var i = 0, n = results.length; i < n && count < 200; ++i) { + let result = results[i]; + if (result.location && !links.includes(result.location)) { + search_results += result.div; + count++; + links.push(result.location); + } + } + + if (count == 1) { + count_str = "1 result"; + } else if (count == 200) { + count_str = "200+ results"; + } else { + count_str = count + " results"; + } + let result_count = `
                      ${count_str}
                      `; + + search_result_container = ` +
                      + ${modal_filters} + ${search_divider} + ${result_count} +
                      + ${search_results} +
                      +
                      + `; + } else { + search_result_container = ` +
                      + ${modal_filters} + ${search_divider} +
                      0 result(s)
                      +
                      +
                      No result found!
                      + `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(` +
                      Type something to get started!
                      + `); + } +} + +/** + * Make the modal filter html + * + * @returns string + */ +function make_modal_body_filters() { + let str = filters + .map((val) => { + if (selected_filter == val.toLowerCase()) { + return `${val}`; + } else { + return `${val}`; + } + }) + .join(""); + + return ` +
                      + Filters: + ${str} +
                      `; +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let search_modal_header = ` + + `; + + let initial_search_body = ` +
                      Type something to get started!
                      + `; + + let search_modal_footer = ` +
                      + + Ctrl + + / to search + + esc to close +
                      + `; + + $(document.body).append( + ` + + ` + ); + + document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); + }); + + document + .querySelector(".close-search-modal") + .addEventListener("click", () => { + closeModal(); + }); + + $(document).on("click", ".search-result-link", function () { + closeModal(); + }); + + document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; + }); + + // Functions to open and close a modal + function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); + } + + function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
                      Type something to get started!
                      + `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); + } + + document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "" + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "" + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/v0.1.7/assets/themes/documenter-dark.css b/v0.1.7/assets/themes/documenter-dark.css new file mode 100644 index 0000000..1d71701 --- /dev/null +++ b/v0.1.7/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-info-light{color:#ebf7ff !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#b9e2fe !important}.has-background-info-light{background-color:#ebf7ff !important}.has-text-info-dark{color:#0e9dfb !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#40b1fc !important}.has-background-info-dark{background-color:#0e9dfb !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-success-light{color:#ebfff3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#b8ffd6 !important}.has-background-success-light{background-color:#ebfff3 !important}.has-text-success-dark{color:#00eb64 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#1fff7e !important}.has-background-success-dark{background-color:#00eb64 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-warning-light{color:#fffaeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#ffedb8 !important}.has-background-warning-light{background-color:#fffaeb !important}.has-text-warning-dark{color:#d19c00 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffbf05 !important}.has-background-warning-dark{background-color:#d19c00 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-danger-light{color:#fdeeec !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fac3bd !important}.has-background-danger-light{background-color:#fdeeec !important}.has-text-danger-dark{color:#ec311d !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f05c4c !important}.has-background-danger-dark{background-color:#ec311d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:#024c7d;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#def2fe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#d2edfe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:#008438;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#deffec;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#d1ffe5;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:#ad8100;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fff7de;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fff3d1;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#fce3e0;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#fcd8d5;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#ebf7ff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#0e9dfb}html.theme--documenter-dark .message.is-success{background-color:#ebfff3}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#00eb64}html.theme--documenter-dark .message.is-warning{background-color:#fffaeb}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#d19c00}html.theme--documenter-dark .message.is-danger{background-color:#fdeeec}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#ec311d}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#024c7d;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#024c7d}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#024c7d}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#008438;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#008438}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#008438}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#ad8100;color:#fff}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ad8100}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#ad8100}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#9e1b0d}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#9e1b0d}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#024c7d !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#008438 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#ad8100 !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#9e1b0d !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;overflow:auto}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content a:hover code{color:#1dd2af}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/v0.1.7/assets/themes/documenter-light.css b/v0.1.7/assets/themes/documenter-light.css new file mode 100644 index 0000000..07f9d08 --- /dev/null +++ b/v0.1.7/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-info-light{color:#ecf7fe !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#bde2fa !important}.has-background-info-light{background-color:#ecf7fe !important}.has-text-info-dark{color:#0e72b4 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#1190e3 !important}.has-background-info-dark{background-color:#0e72b4 !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-success-light{color:#eefcf3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c2f4d4 !important}.has-background-success-light{background-color:#eefcf3 !important}.has-text-success-dark{color:#198f43 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#21bb57 !important}.has-background-success-dark{background-color:#198f43 !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#947600 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#c79f00 !important}.has-background-warning-dark{background-color:#947600 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-danger-light{color:#ffeceb !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#ffbbb8 !important}.has-background-danger-light{background-color:#ffeceb !important}.has-text-danger-dark{color:#f50c00 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#ff3429 !important}.has-background-danger-dark{background-color:#f50c00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:#209cee;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e0f1fd;border-color:transparent;color:#0e72b4}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#d4ecfc;border-color:transparent;color:#0e72b4}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:#22c35b;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#eefcf3;color:#198f43}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e3faeb;border-color:transparent;color:#198f43}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#d8f8e3;border-color:transparent;color:#198f43}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:#ffdd57;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:#da0b00;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#ffe0de;border-color:transparent;color:#f50c00}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#ffd3d1;border-color:transparent;color:#f50c00}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-success.is-light{background-color:#eefcf3;color:#198f43}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#da0b00;color:#fff}.notification.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ecf7fe;color:#0e72b4}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#eefcf3;color:#198f43}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#947600}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#ffeceb;color:#f50c00}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#ecf7fe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#0e72b4}.message.is-success{background-color:#eefcf3}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#198f43}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#ffeceb}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#f50c00}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#209cee;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#209cee}.panel.is-info .panel-block.is-active .panel-icon{color:#209cee}.panel.is-success .panel-heading{background-color:#22c35b;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#22c35b}.panel.is-success .panel-block.is-active .panel-icon{color:#22c35b}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#da0b00;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#da0b00}.panel.is-danger .panel-block.is-active .panel-icon{color:#da0b00}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#209cee !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#22c35b !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#ffdd57 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#da0b00 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;overflow:auto}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content a:hover code{color:#363636}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/v0.1.7/assets/themeswap.js b/v0.1.7/assets/themeswap.js new file mode 100644 index 0000000..9f5eebe --- /dev/null +++ b/v0.1.7/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/v0.1.7/assets/warner.js b/v0.1.7/assets/warner.js new file mode 100644 index 0000000..3f6f5d0 --- /dev/null +++ b/v0.1.7/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
                      Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/v0.1.7/changelog/index.html b/v0.1.7/changelog/index.html new file mode 100644 index 0000000..e7451aa --- /dev/null +++ b/v0.1.7/changelog/index.html @@ -0,0 +1,2 @@ + +Changelog · ManoptExamples.jl

                      Changelog

                      All notable changes to this Julia package will be documented in this file.

                      The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

                      [0.1.7] – 07/06/2024

                      Changed

                      • make Manopt.jl a weak dependency and load functions that require parts of it only load as an extension. This makes it easier to use the examples in the tests of Manopt itself.

                      [0.1.6] – 22/03/2024

                      Added

                      • Hyperparameter optimization example.

                      [0.1.3] – 11/12/2023

                      Added

                      • Total variation Minimization cost, proxes, and an example
                      • Bézier curve cost, gradients, and an example.

                      [0.1.3] – 16/09/2023

                      Added

                      • Rayleigh Quotient functions added
                      • an example illustrating Euclidean gradient/HEssian conversion
                      • Add Literature with DocumenterCitations

                      [0.1.2] – 13/06/2023

                      Added

                      • Update examples to use Quarto
                      • Add DC examples

                      [0.1.1] – 01/03/2023

                      Added

                      • Rosenbrock function and examples

                      [0.1.0] – 18/02/2023

                      Added

                      • Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested
                      • Setup Documentation to provide one example Quarto file for every example objective to illustrate how to use them.
                      diff --git a/v0.1.7/contributing/index.html b/v0.1.7/contributing/index.html new file mode 100644 index 0000000..7611abd --- /dev/null +++ b/v0.1.7/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

                      Contributing to Manopt.jl

                      First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

                      The following is a set of guidelines to ManoptExamples.jl.

                      Table of Contents

                      I just have a question

                      The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

                      How can I file an issue?

                      If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

                      How can I contribute?

                      Add an objective

                      The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

                      If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

                      If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

                      • cost functions are always of the form cost_ and a fitting name
                      • gradient functions are always of the gradient_ and a fitting name, followed by an !

                      for in-place gradients and by !! if it is a struct that can provide both.

                      It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

                      Add an example

                      If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

                      Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

                      Code style

                      We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

                      We also follow a few internal conventions:

                      • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
                      • within a file the structs should come first and functions second. The only exception are constructors for the structs
                      • within both blocks an alphabetical order is preferable.
                      • The above implies that the mutating variant of a function follows the non-mutating variant.
                      • There should be no dangling = signs.
                      • Always add a newline between things of different types (struct/method/const).
                      • Always add a newline between methods for different functions (including in-place/non-mutating variants).
                      • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
                      • All import/using/include should be in the main module file.
                      • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
                      • the Quarto Markdown files are excluded from this formatting.
                      diff --git a/v0.1.7/data/index.html b/v0.1.7/data/index.html new file mode 100644 index 0000000..ab56dbb --- /dev/null +++ b/v0.1.7/data/index.html @@ -0,0 +1,13 @@ + +Data · ManoptExamples.jl

                      Data sets

                      Signals on manifolds

                      ManoptExamples.LemniscateMethod
                      Lemniscate(t::Float; kwargs...)
                      +Lemniscate(n::integer; interval=[0.0, 2π], kwargs...)

                      generate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.

                      To be precise on the manifold M we use the tangent space at p and generate the curve

                      \[γ(t) \frac{a}{}\sin^2(t) + 1 \begin{pmatrix} \cos(t) \\ \cos(t)\sin(t) \end{pmatrix}\]

                      in the plane spanned by X and Y in the tangent space. Note that this curve is $2π$-periodic and a is the half-width of the curve.

                      To reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.

                      THe second variant generates n points equispaced in ìnterval` and calls the first variant.

                      Keywords

                      • manifold - (Sphere(2)) the manifold to build the lemniscate on
                      • p - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate
                      • a – (π/2.0) half-width of the Lemniscate
                      • X – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.
                      • Y – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.
                      source
                      ManoptExamples.artificial_S1_signalFunction
                      artificial_S1_signal([pts=500])

                      generate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to ``[BLSW14].

                      Optional

                      • pts: (500) number of points to sample the function
                      source
                      ManoptExamples.artificial_S1_signalMethod
                      artificial_S1_signal(x)

                      evaluate the example signal $f(x), x ∈ [0,1]$, of phase-valued data introduces in Sec. 5.1 of [BLSW14] for values outside that interval, this Signal is missing.

                      source
                      ManoptExamples.artificial_S1_slope_signalFunction
                      artificial_S1_slope_signal([pts=500, slope=4.])

                      Creates a Signal of (phase-valued) data represented on the Circle with increasing slope.

                      Optional

                      • pts: (500) number of points to sample the function.
                      • slope: (4.0) initial slope that gets increased afterwards

                      This data set was introduced for the numerical examples in [BLSW14]

                      source
                      ManoptExamples.artificial_S2_composite_Bezier_curveMethod
                      artificial_S2_composite_Bezier_curve()

                      Generate a composite Bézier curve on the [BG18].

                      It consists of 4 egments connecting the points

                      \[\mathbf d_0 = \begin{pmatrix} 0\\0\\1\end{pmatrix},\quad +\mathbf d_1 = \begin{pmatrix} 0\\-1\\0\end{pmatrix},\quad +\mathbf d_2 = \begin{pmatrix} -1\\0\\0\end{pmatrix},\text{ and } +\mathbf d_3 = \begin{pmatrix} 0\\0\\-1\end{pmatrix}.\]

                      where instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be $C^1$.

                      We define

                      \[X_0 = \frac{π}{8\sqrt{2}}\begin{pmatrix}1\\-1\\0\end{pmatrix},\quad +X_1 = \frac{π}{4\sqrt{2}}\begin{pmatrix}1\\0\\1\end{pmatrix},\quad +X_2 = \frac{π}{4\sqrt{2}}\begin{pmatrix}0\\1\\-1\end{pmatrix},\text{ and } +X_3 = \frac{π}{8\sqrt{2}}\begin{pmatrix}-1\\1\\0\end{pmatrix},\]

                      where we defined each $X_i \in T_{d_i}\mathbb S^2$. We defined three BezierSegments

                      of cubic Bézier curves as follows

                      \[\begin{align*} +b_{0,0} &= d_0, \quad & b_{1,0} &= \exp_{d_0}X_0, \quad & b_{2,0} &= \exp_{d_1}X_1, \quad & b_{3,0} &= d_1\\ +b_{0,1} &= d_1, \quad & b_{1,1} &= \exp_{d_1}(-X_1), \quad & b_{2,1} &= \exp_{d_2}X_2, \quad & b_{3,1} &= d_2\\ +b_{0,2} &= d_2, \quad & b_{1,1} &= \exp_{d_2}(-X_2), \quad & b_{2,2} &= \exp_{d_3}X_3, \quad & b_{3,2} &= d_3. +\end{align*}\]

                      source

                      images on manifolds

                      ManoptExamples.artificial_S2_rotation_imageFunction
                      artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])

                      Create an image with a rotation on each axis as a parametrization.

                      Optional Parameters

                      • pts: (64) number of pixels along one dimension
                      • rotations: ((.5,.5)) number of total rotations performed on the axes.

                      This dataset was used in the numerical example of Section 5.1 of [BBSW16].

                      source
                      ManoptExamples.artificial_SPD_imageFunction
                      artificial_SPD_image([pts=64, stepsize=1.5])

                      create an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.

                      This dataset was used in the numerical example of Section 5.2 of [BBSW16].

                      source
                      ManoptExamples.artificial_SPD_image2Function
                      artificial_SPD_image2([pts=64, fraction=.66])

                      create an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.

                      This data set was introduced in the numerical examples of Section of [BPS16]

                      source

                      Literature

                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [BPS16]
                      R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
                      [LNPS17]
                      F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
                      diff --git a/v0.1.7/examples/Bezier-curves/index.html b/v0.1.7/examples/Bezier-curves/index.html new file mode 100644 index 0000000..dd3afe2 --- /dev/null +++ b/v0.1.7/examples/Bezier-curves/index.html @@ -0,0 +1,68 @@ + +Minimizing the Acceleration of Bézier Curves on the Sphere · ManoptExamples.jl

                      Minimizing the Acceleration of Bézier Curves on the Sphere

                      Ronny Bergmann 2023-06-06

                      using Manifolds, Manopt, ManoptExamples

                      Introduction

                      Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as

                      function bezier(M::AbstractManifold, t, pts::NTuple)
                      +    p = bezier(M, t, pts[1:(end - 1)])
                      +    q = bezier(M, t, pts[2:end])
                      +    return shortest_geodesic(M, p, q, t)
                      +end
                      +function bezier(M::AbstractManifold, t, pts::NTuple{2})
                      +    return shortest_geodesic(M, pts[1], pts[2], t)
                      +end

                      which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.

                      In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].

                      using ManoptExamples:
                      +    artificial_S2_composite_Bezier_curve,
                      +    BezierSegment,
                      +    de_Casteljau,
                      +    get_Bezier_degrees,
                      +    get_Bezier_inner_points,
                      +    get_Bezier_junctions,
                      +    get_Bezier_junction_tangent_vectors,
                      +    get_Bezier_points,
                      +    get_Bezier_segments,
                      +    grad_L2_acceleration_Bezier,
                      +    L2_acceleration_Bezier

                      This notebook reproduces the example form Section 5.2 in [BG18].

                      The following image illustrates how the de-Casteljau algorithm works for one segment.

                      A Bezier segment and illustration of the de-Casteljau algorithm

                      Approximating data by a curve with minimal accelartion

                      We first load our example data

                      M = Sphere(2)
                      +B = artificial_S2_composite_Bezier_curve()
                      +data_points = get_Bezier_junctions(M, B)

                      Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.

                      The original curve

                      We continue to recude the points, since we “know” sme points due to the $C^1$ property: the second to last control point of the first segment $b_{0,2}$, the joint junction point connecting both segments $b_{0,3}=b_{1,0}$ and the second control point $b_{1,1}$ of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.

                      We can use this reduced form as the variable to optimize and the one from the data as our initial point.

                      pB = get_Bezier_points(M, B, :differentiable)
                      +N = PowerManifold(M, NestedPowerRepresentation(), length(pB))
                      PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)

                      And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the $λ=10$

                      curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient
                      +λ = 10.0
                      +function f(M, pB)
                      +    return L2_acceleration_Bezier(
                      +        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
                      +    )
                      +end
                      +function grad_f(M, pB)
                      +    return grad_L2_acceleration_Bezier(
                      +        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
                      +    )
                      +end
                      grad_f (generic function with 1 method)

                      Then we can optimize

                      x0 = pB
                      +pB_opt = gradient_descent(
                      +    N,
                      +    f,
                      +    grad_f,
                      +    x0;
                      +    stepsize=ArmijoLinesearch(N;
                      +        initial_stepsize=1.0,
                      +        retraction_method=ExponentialRetraction(),
                      +        contraction_factor=0.5,
                      +        sufficient_decrease=0.001,
                      +    ),
                      +    stopping_criterion=StopWhenChangeLess(1e-5) |
                      +                       StopWhenGradientNormLess(1e-7) |
                      +                       StopAfterIteration(300),
                      +    debug=[
                      +        :Iteration,
                      +        " | ",
                      +        :Cost,
                      +        " | ",
                      +        DebugGradientNorm(),
                      +        " | ",
                      +        DebugStepsize(),
                      +        " | ",
                      +        :Change,
                      +        "\n",
                      +        25,
                      +        :Stop,
                      +    ],
                      +);
                      Initial  | f(x): 10.647244 |  |  | 
                      +# 25     | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281
                      +# 50     | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780
                      +# 75     | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590
                      +# 100    | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745
                      +The algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.

                      And we can again look at the result

                      The result looks as

                      The resulting curve

                      where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.

                      [ABBR23]
                      S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      diff --git a/v0.1.7/examples/Difference-of-Convex-Benchmark/index.html b/v0.1.7/examples/Difference-of-Convex-Benchmark/index.html new file mode 100644 index 0000000..794b77d --- /dev/null +++ b/v0.1.7/examples/Difference-of-Convex-Benchmark/index.html @@ -0,0 +1,165 @@ + +A Benchmark · ManoptExamples.jl

                      Benchmark of the Difference of Convex Algorithms

                      Ronny Bergmann 2023-06-06

                      Introduction

                      In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.

                      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ \ g(p) - h(p)\]

                      where $g,h\colon \mathcal M \to \mathbb R$ are geodesically convex function on the Riemannian manifold $\mathcal M$.

                      using LinearAlgebra, Random, Statistics, BenchmarkTools
                      +using Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots
                      +Random.seed!(42)

                      and we load a few nice colors

                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +teal = paul_tol["mutedteal"]

                      The DC Problem

                      We start with defining the two convex functions $g,h$ and their gradients as well as the DC problem $f$ and its gradient for the problem

                      \[ \operatorname*{arg\,min}_{p\in\mathcal M}\ \ \bigl( \log\bigr(\det(p)\bigr)\bigr)^4 - \bigl(\log \det(p) \bigr)^2.\]

                      where the critical points obtain a functional value of $-\frac{1}{4}$.

                      where $\mathcal M$ is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.

                      We first define the corresponding functions

                      g(M, p) = log(det(p))^4
                      +h(M, p) = log(det(p))^2
                      +f(M, p) = g(M, p) - h(M, p)

                      and their gradients

                      grad_g(M, p) = 4 * (log(det(p)))^3 * p
                      +grad_h(M, p) = 2 * log(det(p)) * p
                      +grad_f(M, p) = grad_g(M, p) - grad_h(M, p)

                      which we can use to verify that the gradients of $g$ and $h$ are correct. We use for that

                      n = 6
                      +M = SymmetricPositiveDefinite(n)
                      +p0 = log(n) * Matrix{Float64}(I, n, n);
                      +X0 = 1 / n * Matrix{Float64}(I, n, n);

                      to tall both checks

                      check_gradient(M, g, grad_g, p0, X0; plot=true)

                      and

                      check_gradient(M, h, grad_h, p0, X0; plot=true)

                      which both pass the test. We continue to define their inplace variants

                      function grad_g!(M, X, p)
                      +    copyto!(M, X, p)
                      +    X .*= 4 * (log(det(p)))^3
                      +    return X
                      +end
                      +function grad_h!(M, X, p)
                      +    copyto!(M, X, p)
                      +    X .*= 2 * (log(det(p)))
                      +    return X
                      +end
                      +function grad_f!(M, X, p)
                      +    grad_g!(M, X, p)
                      +    Y = copy(M, p, X)
                      +    grad_h!(M, Y, p)
                      +    X .-= Y
                      +    return X
                      +end

                      And compare times for both algorithms, with a bit of debug output.

                      @time p_min_dca = difference_of_convex_algorithm(
                      +    M,
                      +    f,
                      +    g,
                      +    grad_h!,
                      +    p0;
                      +    grad_g=grad_g!,
                      +    gradient=grad_f!,
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[
                      +        :Iteration,
                      +        (:Cost, "f(p): %1.9f"),
                      +        (:GradientNorm, " |grad_f(p)|: %1.9f"),
                      +        (:Change, " |δp|: %1.9f"),
                      +        :Stop,
                      +        5,
                      +        "\n",
                      +    ],
                      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +);
                      Initial f(p): 137.679053470
                      +# 5     f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127
                      +# 10    f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103
                      +# 15    f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574
                      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011
                      +The algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.
                      +  3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)

                      The cost is

                      f(M, p_min_dca)
                      -0.25000000000000006

                      Similarly the DCPPA performs

                      @time p_min_dcppa = difference_of_convex_proximal_point(
                      +    M,
                      +    grad_h!,
                      +    p0;
                      +    g=g,
                      +    grad_g=grad_g!,
                      +    λ=i -> 1 / (2 * n),
                      +    cost=f,
                      +    gradient=grad_f!,
                      +    debug=[
                      +        :Iteration,
                      +        (:Cost, "f(p): %1.9f"),
                      +        " ",
                      +        (:GradientNorm, "|grad_f(p)|: %1.10f"),
                      +        (:Change, "|δp|: %1.10f"),
                      +        :Stop,
                      +        5,
                      +        "\n",
                      +    ],
                      +    evaluation=InplaceEvaluation(),
                      +    stepsize=ConstantStepsize(1.0),
                      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +);
                      Initial f(p): 137.679053470 
                      +# 5     f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692
                      +# 10    f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316
                      +# 15    f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676
                      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968
                      +# 25    f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530
                      +# 30    f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048
                      +# 35    f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001
                      +The algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.
                      +  1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)

                      It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost

                      f(M, p_min_dcppa)
                      -0.25

                      Benchmark I: Time comparison

                      We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test

                      dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()
                      +dcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()
                      +N_max=14
                      +N = 2:N_max

                      and run a benchmark for both algorithms

                      for n in N
                      +    Mn = SymmetricPositiveDefinite(n)
                      +    pn = log(n) * Matrix{Float64}(I, n, n)
                      +    bdca = @benchmark difference_of_convex_algorithm(
                      +        $Mn,
                      +        $f,
                      +        $g,
                      +        $grad_h!,
                      +        $pn;
                      +        grad_g=$grad_g!,
                      +        gradient=$grad_f!,
                      +        evaluation=InplaceEvaluation(),
                      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +    )
                      +    dca_benchmarks[n] = bdca
                      +    bdcppa = @benchmark difference_of_convex_proximal_point(
                      +        $Mn,
                      +        $grad_h!,
                      +        $pn;
                      +        g=$g,
                      +        grad_g=$grad_g!,
                      +        λ=i -> 1 / (2 * n),
                      +        cost=f,
                      +        gradient=grad_f!,
                      +        evaluation=InplaceEvaluation(),
                      +        stepsize=ConstantStepsize(1.0),
                      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +    )
                      +    dcppa_benchmarks[n] = bdcppa
                      +end

                      Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds

                      dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]
                      +dca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]
                      +dcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]
                      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Time (sec.)")
                      +plot!(dims, dca_times; label="DCA", color=indigo, linewidth=2)
                      +plot!(dims, dcppa_times; label="DCPPA", color=teal, linewidth=2)

                      Benchmark II: Iterations and cost.

                      As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.

                      N2 = [5,10,20,40,80]
                      +dims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]
                      +dca_iterations = Dict{Int,Int}()
                      +dca_costs = Dict{Int,Vector{Float64}}()
                      +dcppa_iterations = Dict{Int,Int}()
                      +dcppa_costs = Dict{Int,Vector{Float64}}()
                      @time for n in N2
                      +    println(n)
                      +    Mn = SymmetricPositiveDefinite(n)
                      +    pn = log(n) * Matrix{Float64}(I,n,n);
                      +    @time dca_st = difference_of_convex_algorithm(
                      +        Mn, f, g, grad_h!, pn;
                      +        grad_g=grad_g!,
                      +        gradient=grad_f!,
                      +        evaluation = InplaceEvaluation(),
                      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +        record = [:Iteration, :Cost],
                      +        return_state = true,
                      +    );
                      +    dca_costs[n] = get_record(dca_st, :Iteration, :Cost)
                      +    dca_iterations[n] = length(dca_costs[n])
                      +    @time dcppa_st = difference_of_convex_proximal_point(
                      +        Mn, grad_h!, pn;
                      +        g=g,
                      +        grad_g=grad_g!,
                      +        λ = i -> 1/(2*n),
                      +        cost = f,
                      +        gradient= grad_f!,
                      +        evaluation = InplaceEvaluation(),
                      +        stepsize = ConstantStepsize(1.0),
                      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +        record = [:Iteration, :Cost],
                      +        return_state = true,
                      +    );
                      +    dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)
                      +    dcppa_iterations[n] = length(dcppa_costs[n])
                      +end

                      The iterations are like

                      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Iterations")
                      +plot!(dims2, [values(dca_iterations)...]; label="DCA", color=indigo, linewidth=2)
                      +plot!(dims2, [values(dcppa_iterations)...]; label="DCPPA", color=teal, linewidth=2)

                      And for the developtment of the cost

                      where we can see that the DCA needs less iterations than the DCPPA.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [SO15]
                      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                      diff --git a/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg b/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg new file mode 100644 index 0000000..ca2e758 --- /dev/null +++ b/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg b/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg new file mode 100644 index 0000000..7baeb82 --- /dev/null +++ b/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg b/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..2131b9f --- /dev/null +++ b/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg b/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg new file mode 100644 index 0000000..d51a3c6 --- /dev/null +++ b/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg b/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..3c244f5 --- /dev/null +++ b/v0.1.7/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/Difference-of-Convex-Frank-Wolfe/index.html b/v0.1.7/examples/Difference-of-Convex-Frank-Wolfe/index.html new file mode 100644 index 0000000..f195ad0 --- /dev/null +++ b/v0.1.7/examples/Difference-of-Convex-Frank-Wolfe/index.html @@ -0,0 +1,216 @@ + +Frank Wolfe comparison · ManoptExamples.jl

                      A comparison of the Difference of Convex and Frank Wolfe Algorithm

                      Ronny Bergmann 2023-11-06

                      Introduction

                      In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.

                      using LinearAlgebra, Random, Statistics, BenchmarkTools
                      +using ManifoldsBase, Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots

                      and we load a few nice colors

                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +teal = paul_tol["mutedteal"]

                      We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices $\mathcal P(n)$ with the affine invariant metric. Let $q_1,\ldots,q_m \in \mathcal P(n)$ be a set of points and $\mu_1,\ldots,\mu_m$ be a set of weights, such that they sum to one. We consider then

                      \[\operatorname*{arg\,max}_{p\in\mathcal C}\ \ h(p)\]

                      with

                      \[h(p) = +\sum_{j=1}^m \mu_j d^2(p,q_i), +\quad \text{ where } +d^2(p,q_i) = \operatorname{tr}\bigl( + \log^2(p^{-\frac{1}{2}}q_jp^{-\frac{1}{2}}) +\big) +\qquad\text{and}\qquad +\mathcal C = \{ p\in {\mathcal M}\ |\ \bar L\preceq p \preceq \bar U \},\]

                      for a lower bound $L$ and an upper bound $U$ for the matrices in the positive definite sense $A \preceq B \Leftrightarrow (B-A)$ is positive semi-definite

                      When every one of the weights ${\mu}_1, \ldots {\mu}_m$ are equal, this function $h$ is known as the of the set $\{q_1, \dots, q_m\}$.

                      And for our example we set

                      Random.seed!(42)
                      +n = 20
                      +m = 100
                      +M = SymmetricPositiveDefinite(n)
                      +q = [rand(M) for _ in 1:m];
                      +w = rand(m)
                      +w ./=sum(w)

                      We use as lower and upper bound the arithmetic and geometric mean $L$ and $U$, respectively.

                      L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )
                      +U = sum( wi * qi for (wi, qi) in zip(w,q) )

                      As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use

                      p0 = (L+U)/2

                      And we can check that it is feasible

                      Common Functions

                      Given $p \in \mathcal M$, $X \in T_p\mathcal M$ on the symmetric positive definite matrices M, this method computes the closed form solution to

                      \[\operatorname*{arg\,min}_{q\in {\mathcal C}}\ \langle X, \log_p q\rangle + = \operatorname*{arg\,min}_{q\in {\mathcal C}}\ \operatorname{tr}(S\log(YqY))\]

                      where $\mathcal C = \{ q | L \preceq q \preceq U \}$, $S = p^{-1/2}Xp^{-1/2}$, and $Y=p^{-1/2}$.

                      The solution is given by $Z=X^{-1}Q\bigl( P^{\mathrm{T}}[-\operatorname{sgn}(D)]_{+}P+\hat{L}\bigr)Q^{\mathrm{T}}X^{-1}$,@ where $S=QDQ^{\mathrm{T}}$ is a diagonalization of $S$, $\hat{U}-\hat{L}=P^{\mathrm{T}}P$ with $\hat{L}=Q^{\mathrm{T}}XLXQ$ and $\hat{U}=Q^{\mathrm{T}}XUXQ$, where $[-\mbox{sgn}(D)]_{+}$ is the diagonal matrix

                      \[\operatorname{diag}\bigl( + [-\operatorname{sgn}(d_{11})]_{+}, \ldots, [-\operatorname{sgn}(d_{nn})]_{+} +\bigr)\]

                      and $D=(d_{ij})$.

                      @doc raw"""
                      +    closed_form_solution!(M, q, L, U, p X)
                      +
                      +Compute the closeed form solution of the constraint sub problem in place of ``q``.
                      +"""
                      +function closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)
                      +    # extract p^1/2 and p^{-1/2}
                      +    (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)
                      +    # Compute D & Q
                      +    e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk  = QDQ'
                      +    D = Diagonal(1.0 .* (e2.values .< 0))
                      +    Q = e2.vectors
                      +    #println(p)
                      +    Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q
                      +    Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q
                      +    P = cholesky(Hermitian(Uprime - Lprime))
                      +    z = P.U' * D * P.U + Lprime
                      +    copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)
                      +    return q
                      +end

                      The Difference of Convex Formulation

                      We use $g(p) = \iota_{\mathcal C}(p)$ as the indicator funtion of the set $\mathcal C$. We use

                      function is_pos_def(p; atol=5e-13)
                      +    e = eigen(Symmetric(p))
                      +    return all((e.values .+ atol) .> 0)
                      +end
                      +function g(p, L, U)
                      +    return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf
                      +end
                      +h(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )

                      So we can first check that p0 is feasible

                      g(p0,L,U) == 0.0
                      true

                      Now setting

                      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ g(p) - h(p)\]

                      We look for a maximum of $h$, where $g$ is minimal, i.e. $g(p)$ is zero or in other words $p \in \mathcal C$.

                      The gradient of $h$ can also be implemented in closed form as

                      grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))
                      +function grad_h!(M, X, p, w, q)
                      +    Y = copy(M, p, X)
                      +    zero_vector!(M, X, p)
                      +    for (wi, qi) in zip(w,q)
                      +        log!(M, Y, p, qi)
                      +        Y .*= - 2.0*wi
                      +        X .+= Y
                      +    end
                      +    return X
                      +end

                      And we can further define the cost, which will just be $+\infty$ outside of $\mathcal C$. We define

                      f_dc(M, p) = g(p, L, U) - h(M, p, w, q)
                      +grad_h!(M, X, p) = grad_h!(M, X, p, w, q)
                      +function grad_f_dc!(M,X, p)
                      +    grad_h!(M, X, p, w, q)
                      +    X .*= -1.0
                      +    return X
                      +end

                      Here we can omit the gradient of $g$ in the definition of $\operatorname{grad} f$, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of $\mathcal C$.

                      As the last step, we can provide the closed form solver for the DC sub problem given at iteration $k$ by

                      \[\operatorname*{arg\,min}_{p\in \mathcal C}\ + \big\langle -\operatorname{grad} h(p^{(k)}), \exp^{-1}_{p^{(k)}}p\big\rangle.\]

                      Which we con compute

                      function dc_sub_solution!(M, q, p, X)
                      +    closed_form_solution!(M, q, L, U, p, -X)
                      +    return q
                      +end

                      For safety, we might want to avoid ending up at the boundary of $\mathcal C$. That is we reduce the distance we walk towards the solution $q$ a bit.

                      function dc_sub_solution_safe!(M, q, p, X)
                      +    p_last = copy(M,p) # since p=q might be in place
                      +    closed_form_solution!(M, q, L, U, p, -X)
                      +    q_orig = copy(M,q) # since we do the following in place of q
                      +    a = minimum(real.(eigen(q-L).values))
                      +    b = minimum(real.(eigen(U-q).values))
                      +    s = 1.0
                      +    d = distance(M, p_last, q_orig);
                      +    # if we are close to zero, we reduce faster.
                      +    α = d < 1/(n^2) ? 0.66 : 0.9995;
                      +    i=0
                      +    while (a < 0) || (b < 0)
                      +        s *= α
                      +        shortest_geodesic!(M, q, p_last, q_orig, s)
                      +        a = minimum(real.(eigen(q-L).values))
                      +        b = minimum(real.(eigen(U-q).values))
                      +        #println("$i a: $a, b = $b with s=$s")
                      +        i=i+1
                      +        if (i>100) # safety fallback
                      +            #@warn " $i steps where not enough $s ($α)\n$a $b\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs"
                      +            qe = eigen(q)
                      +            if a < 0
                      +                qe.values .+= min(1e-8, n*abs(min(a,b)))
                      +            else
                      +                qe.values .-= min(1e-8, n*abs(min(a,b)))
                      +            end
                      +            q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'
                      +            a = minimum(real.(eigen(q-L).values))
                      +            b = minimum(real.(eigen(U-q).values))
                      +            return q
                      +        end
                      +    end
                      +    return q
                      +end

                      The DoC solver run

                      Let’s compare both methods when they have the same stopping criteria

                      @time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;
                      +    gradient=grad_f_dc!,
                      +    sub_problem=dc_sub_solution_safe!,
                      +    evaluation=InplaceEvaluation(),
                      +    stopping_criterion = StopAfterIteration(300) |
                      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                      +    debug = [
                      +        (:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "),
                      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                      +        30, :Stop, "\n"],
                      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                      +    return_state=true,
                      +)
                      Initial F(p): -0.77661458292831
                      +At iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.
                      + 16.161776 seconds (17.17 M allocations: 1.670 GiB, 1.83% gc time, 93.45% compilation time)
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 23 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | InplaceEvaluation()
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 300:  not reached
                      +    |Δp| < 1.0e-14: not reached
                      +    |Δgrad f| < 1.0e-9: reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 30]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                      Let’s extract the final point and look at its cost

                      p1_dc = get_solver_result(state1_dc);
                      +f_dc(M, p1_dc)
                      -0.784425242474807

                      As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.

                      [ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]
                      2-element Vector{Tuple{Float64, Float64}}:
                      + (1.1886583723800445e-12, 0.06669240322431051)
                      + (1.3411042178831775e-5, 0.0671353506908023)

                      For the statistics we extract the recordings from the state

                      Define the Frank-Wolfe functions

                      For Frank wolfe, the cost is just defined as $-h(p)$ but the minimisation is constraint to $\mathcal C$, which is enfored by the oracle.

                      f_fw(M, p) = -h(M, p, w, q)
                      +function grad_f_fw!(M,X, p)
                      +    grad_h!(M, X, p, w, q)
                      +    X .*= -1.0
                      +    return X
                      +end
                      +oracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)

                      The FW Solver Run

                      Similarly we can run the Frank-Wolfe algorithm with

                      @time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;
                      +    sub_problem=oracle_fw!,
                      +    evaluation=InplaceEvaluation(),
                      +    stopping_criterion = StopAfterIteration(10^4) |
                      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                      +    debug = [
                      +        (:Iteration, "# %-8d "), :Cost, (:Change, " |Δp|: %0.14f "),
                      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                      +        2*10^3, :Stop, "\n"],
                      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                      +    return_state=true,
                      +)
                      Initial f(x): -0.776615
                      +# 2000     f(x): -0.784420 |Δp|: 0.04611942377596  |grad f(p)|: 0.17693408  |Δgrad f(p)|: 0.17555618
                      +# 4000     f(x): -0.784421 |Δp|: 0.00372201632005  |grad f(p)|: 0.17694619  |Δgrad f(p)|: 0.00749427
                      +# 6000     f(x): -0.784422 |Δp|: 0.00205683506784  |grad f(p)|: 0.17695204  |Δgrad f(p)|: 0.00414088
                      +# 8000     f(x): -0.784422 |Δp|: 0.00140675676260  |grad f(p)|: 0.17695565  |Δgrad f(p)|: 0.00283200
                      +# 10000    f(x): -0.784422 |Δp|: 0.00106177438611  |grad f(p)|: 0.17695815  |Δgrad f(p)|: 0.00213746
                      +The algorithm reached its maximal number of iterations (10000).
                      +152.781466 seconds (55.53 M allocations: 94.006 GiB, 2.12% gc time, 0.57% compilation time)
                      +
                      +# Solver state for `Manopt.jl`s Frank Wolfe Method
                      +After 10000 iterations
                      +
                      +## Parameters
                      +* inverse retraction method: LogarithmicInverseRetraction()
                      +* retraction method: ExponentialRetraction()
                      +* sub solver state:
                      +    | InplaceEvaluation()
                      +
                      +## Stepsize
                      +DecreasingStepsize(; length=2.0,  factor=1.0,  subtrahend=0.0,  shift=2)
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 10000:    reached
                      +    |Δp| < 1.0e-14: not reached
                      +    |Δgrad f| < 1.0e-9: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "f(x): %f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 2000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                      And we take a look at this result as well

                      p1_fw = get_solver_result(state1_fw);
                      +f_dc(M, p1_fw)
                      -0.7844220281765162

                      And its feasibility

                      [extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]
                      2-element Vector{Tuple{Float64, Float64}}:
                      + (4.904818928410655e-10, 0.06659173821656107)
                      + (3.245654983213335e-5, 0.06713970236096602)

                      Statistics

                      We extract the recorded values

                      # DoC
                      +iter1_dc = get_record(state1_dc, :Iteration, :Iteration)
                      +pk_dc = get_record(state1_dc,:Iteration,:Iterate)
                      +costs1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))
                      +dc_min = minimum(costs1_dc)
                      +# FW
                      +iter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]
                      +pk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]
                      +costs1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))

                      And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.

                      fig = plot(;
                      +    legend=:topright,
                      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x_k)-f^*$ (log. scale)",
                      +    yaxis=:log,
                      +    ylims=(1e-8, 10^-2),
                      +    xaxis=:log,
                      +    xlims=(1,10^4),
                      +)
                      +plot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label="Difference of Convex")
                      +plot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label="Frank-Wolfe")

                      This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.

                      On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [WS22]
                      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                      diff --git a/v0.1.7/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg b/v0.1.7/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg new file mode 100644 index 0000000..85998a9 --- /dev/null +++ b/v0.1.7/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/Difference-of-Convex-Rosenbrock/index.html b/v0.1.7/examples/Difference-of-Convex-Rosenbrock/index.html new file mode 100644 index 0000000..4479277 --- /dev/null +++ b/v0.1.7/examples/Difference-of-Convex-Rosenbrock/index.html @@ -0,0 +1,339 @@ + +Rosenbrock Metric · ManoptExamples.jl

                      Solving Rosenbrock with the Difference of Convex Algorithm

                      Ronny Bergmann 2023-06-06

                      Introduction

                      This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.

                      Both the Rosenbrock problem

                      \[ \operatorname*{argmin}_{x\in ℝ^2} a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2,\]

                      where $a,b>0$ and usually $b=1$ and $a \gg b$, we know the minimizer $x^* = (b,b^2)^\mathrm{T}$, and also the (Euclidean) gradient

                      \[\nabla f(x) = + \begin{pmatrix} + 4a(x_1^2-x_2)\\ -2a(x_1^2-x_2) + \end{pmatrix} + + + \begin{pmatrix} + 2(x_1-b)\\ 0 + \end{pmatrix}.\]

                      They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.

                      Furthermore, the RosenbrockMetric can be used on $ℝ^2$, that is

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix},\]

                      In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.

                      1. The Euclidean Gradient
                      2. The Riemannian gradient descent with respect to the RosenbrockMetric
                      3. The Euclidean Difference of Convex Algorithm
                      4. The Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric

                      Where we obtain a difference of convex problem by writing

                      \[f(x) = a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2 + = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 - \bigl(x_1-b\bigr)^2\]

                      that is

                      \[g(x) = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 \quad\text{ and }\quad h(x) = \bigl(x_1-b\bigr)^2\]

                      using LinearAlgebra, Random, Statistics
                      +using Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots
                      +import Manopt: set_manopt_parameter!
                      +Random.seed!(42)
                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +green = paul_tol["mutedgreen"]
                      +sand = paul_tol["mutedsand"]
                      +teal = paul_tol["mutedteal"]
                      +grey = paul_tol["mutedgrey"]

                      To emphasize the effect, we choose a quite large value of a.

                      a = 2*10^5
                      +b = 1

                      and use the starting point and a direction to check gradients

                      p0 = [0.1, 0.2]

                      The Euclidean Gradient Descent.

                      For the Euclidean gradient we can just use the same approach as in the Rosenbrock example

                      M = ℝ^2
                      +f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                      +∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)

                      define a common debug vector

                      debug_vec = [
                      +        (:Iteration, "# %-8d "),
                      +        (:Cost, "F(x): %1.4e"),
                      +        " ",
                      +        (:Change, "|δp|: %1.4e | "),
                      +        (:GradientNorm, "|grad f|: %1.6e"),
                      +        :Stop,
                      +        "\n",
                      +    ]

                      and call the gradient descent algorithm

                      Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[debug_vec...,10^7],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    record=[:Iteration, :Cost],
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03
                      +# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04
                      +# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06
                      +# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08
                      +# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 53073227 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Riemannian Gradient Descent.

                      For the Riemannian case, we define

                      M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())
                      MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())

                      and the gradient is now adopted to the new metric

                      function grad_f!(M, X, p)
                      +    ∇f!!(M, X, p)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_f(M, p)
                      +    X = zero_vector(M, p)
                      +    return grad_f!(M, X, p)
                      +end
                      R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[debug_vec...,10^6],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    record=[:Iteration, :Cost],
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 1000000  F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04
                      +# 2000000  F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 2443750 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Euclidean Difference of Convex

                      For the convex case, we have to first introduce the two parts of the cost.

                      f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;
                      +f2(M, p; a=100, b=1) = (p[1] - b[1])^2;
                      +g(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)
                      +h(M, p; a=100, b=1) = f2(M, p; a=a, b=b)

                      and their (Euclidan) gradients

                      function ∇h!(M, X, p; a=100, b=1)
                      +    X[1] = 2*(p[1]-b)
                      +    X[2] = 0
                      +    return X
                      +end
                      +function ∇h(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    ∇h!(M, X, p; a=a, b=b)
                      +    return X
                      +end
                      +function ∇g!(M, X, p; a=100, b=1)
                      +    X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)
                      +    X[2] = -2*a*(p[1]^2-p[2])
                      +    return X
                      +end
                      +function ∇g(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    ∇g!(M, X, p; a=a, b=b)
                      +    return X
                      +end

                      and we define for convenience

                      docE_g(M, p) = g(M, p; a=a, b=b)
                      +docE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)
                      +docE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)
                      +docE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)
                      +function docE_∇f!(M, X, p)
                      +  Y = zero_vector(M, p)
                      +  docE_∇g!(M, X, p)
                      +  docE_∇h!(M, Y, p)
                      +  X .-= Y
                      +  return X
                      +end

                      Then we call the difference of convex algorithm on Eucldiean space $ℝ^2$.

                      E_doc_state = difference_of_convex_algorithm(
                      +    M, docE_f, docE_g, docE_∇h!, p0;
                      +    gradient=docE_∇f!,
                      +    grad_g = docE_∇g!,
                      +    debug=[debug_vec..., 10^4],
                      +    evaluation=InplaceEvaluation(),
                      +    record=[:Iteration, :Cost],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    sub_hess=nothing, # Use gradient descent
                      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 10000    F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04
                      +# 20000    F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 26549 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | # Solver state for `Manopt.jl`s Gradient Descent
                      +    | After 2000 iterations
                      +    | 
                      +    | ## Parameters
                      +    | * retraction method: ExponentialRetraction()
                      +    | 
                      +    | ## Stepsize
                      +    | ArmijoLinesearch() with keyword parameters
                      +    |   * initial_stepsize    = 1.0
                      +    |   * retraction_method   = ExponentialRetraction()
                      +    |   * contraction_factor  = 0.95
                      +    |   * sufficient_decrease = 0.1
                      +    | 
                      +    | ## Stopping criterion
                      +    | 
                      +    | Stop When _one_ of the following are fulfilled:
                      +    |     Max Iteration 2000:   reached
                      +    |     |grad f| < 1.0e-16: not reached
                      +    | Overall: reached
                      +    | This indicates convergence: No
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Riemannian Difference of Convex

                      We first have to again defined the gradients with respect to the new metric

                      function grad_h!(M, X, p; a=100, b=1)
                      +    ∇h!(M, X, p; a=a, b=b)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_h(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    grad_h!(M, X, p; a=a, b=b)
                      +    return X
                      +end
                      +function grad_g!(M, X, p; a=100, b=1)
                      +    ∇g!(M, X, p; a=a,b=b)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_g(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    grad_g!(M, X, p; a=a, b=b)
                      +    return X
                      +end

                      While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For $X \in ∂h(p^{(k)})$ the sunproblem top determine $p^{(k+1)}$ reads

                      \[\operatorname*{argmin}_{p\in\mathcal M} g(p) - \langle X, \log_{p^{(k)}}p\rangle\]

                      for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with $X = \operatorname{grad} h(p^{(k)})$ that

                      \[\phi(p) = g(p) - \langle X, \log_{p^{(k)}}p\rangle += a\bigl( p_{1}^2-p_{2}\bigr)^2 + + 2\bigl(p_{1}-b\bigr)^2 - 2(p^{(k)}_1-b)p_1 + 2(p^{(k)}_1-b)p^{(k)}_1,\]

                      its Euclidean gradient reads

                      \[\operatorname{grad}\phi(p) = + \nabla \varphi(p) + = \begin{pmatrix} + 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^{(k)}_1-b)\\ + -2a(p_1^2-p_2) + \end{pmatrix}\]

                      where we can again employ the gradient conversion from before to obtain the Riemannian gradient.

                      mutable struct SubGrad{P,T,V}
                      +    pk::P
                      +    Xk::T
                      +    a::V
                      +    b::V
                      +end
                      +function (ϕ::SubGrad)(M, p)
                      +    X = zero_vector(M, p)
                      +    ϕ(M, X, p)
                      +    return X
                      +end
                      +function (ϕ::SubGrad)(M, X, p)
                      +    X .= [
                      +        4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),
                      +        -2 * ϕ.a * (p[1]^2 - p[2]),
                      +    ]
                      +    riemannian_gradient!(M, X, p, X) # convert
                      +    return X
                      +end

                      And in orer to update the subsolvers gradient correctly, we have to overwrite

                      set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)
                      +set_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)

                      And we again introduce for ease of use

                      docR_g(M, p) = g(M, p; a=a, b=b)
                      +docR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)
                      +docR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)
                      +docR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)
                      +function docR_grad_f!(M, X, p)
                      +    Y = zero_vector(M, p)
                      +    docR_grad_g!(M, X, p)
                      +    docR_grad_h!(M, Y, p)
                      +    X .-= Y
                      +    return X
                      +end
                      +docR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)

                      Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.

                      R_doc_state = difference_of_convex_algorithm(
                      +    M_rb, docR_f, docR_g, docR_grad_h!, p0;
                      +    gradient=docR_grad_f!,
                      +    grad_g = docR_grad_g!,
                      +    debug=[debug_vec..., 10^6],
                      +    evaluation=InplaceEvaluation(),
                      +    record=[:Iteration, :Cost],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    sub_grad=docR_sub_grad,
                      +    sub_hess = nothing, # Use gradient descent
                      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 1235 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | # Solver state for `Manopt.jl`s Gradient Descent
                      +    | After 2000 iterations
                      +    | 
                      +    | ## Parameters
                      +    | * retraction method: ExponentialRetraction()
                      +    | 
                      +    | ## Stepsize
                      +    | ArmijoLinesearch() with keyword parameters
                      +    |   * initial_stepsize    = 1.0
                      +    |   * retraction_method   = ExponentialRetraction()
                      +    |   * contraction_factor  = 0.95
                      +    |   * sufficient_decrease = 0.1
                      +    | 
                      +    | ## Stopping criterion
                      +    | 
                      +    | Stop When _one_ of the following are fulfilled:
                      +    |     Max Iteration 2000:   reached
                      +    |     |grad f| < 1.0e-16: not reached
                      +    | Overall: reached
                      +    | This indicates convergence: No
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      Comparison in Iterations

                      fig = plot(;
                      +    legend=:topright,
                      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x)$ (log. scale)",
                      +    yaxis=:log,
                      +    ylims=(1e-16, 5*1e5),
                      +    xaxis=:log,
                      +    xlims=(1,10^8),
                      +)
                      +scatter!(fig, [1,], [f(M,p0),], label=raw"$f(p_0)$", markercolor=grey)
                      +egi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries
                      +egc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries
                      +plot!(fig, egi, egc, color=teal, label="Euclidean GD")
                      +#
                      +rgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries
                      +rgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries
                      +plot!(fig, rgi, rgc, color=indigo, label="Riemannian GD")
                      +#
                      +edi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries
                      +edc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries
                      +plot!(fig, edi, edc, color=sand, label="Euclidean DoC")
                      +#
                      +rdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries
                      +rdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries
                      +plot!(fig, rdi, rdc, color=green, label="Riemannian DoC")

                      And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      diff --git a/v0.1.7/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg b/v0.1.7/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..9417ba6 --- /dev/null +++ b/v0.1.7/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/HyperparameterOptimization/index.html b/v0.1.7/examples/HyperparameterOptimization/index.html new file mode 100644 index 0000000..ae4fe48 --- /dev/null +++ b/v0.1.7/examples/HyperparameterOptimization/index.html @@ -0,0 +1,332 @@ + +Hyperparameter optimziation · ManoptExamples.jl

                      Hyperparameter optimization

                      Mateusz Baran 2024-08-03

                      Introduction

                      This example shows how to automatically select the best values of hyperparameters of optimization procedures such as retraction, vector transport, size of memory in L-BFGS or line search coefficients. Hyperparameter optimization relies on the Optuna [ASY+19] Python library because it is much more advanced than similar Julia projects, offering Bayesian optimization with conditional hyperparameters and early stopping.

                      General definitions

                      Here are some general definitions that you will most likely be able to directly use for your problem without any changes. Just remember to install optuna, for example using CondaPkg Julia library.

                      using Manifolds, Manopt
                      +using PythonCall
                      +using BenchmarkTools
                      +using LineSearches
                      +
                      +# This script requires optuna to be available through PythonCall
                      +# You can install it for example using
                      +# using CondaPkg
                      +# ]conda add optuna
                      +
                      +optuna = pyimport("optuna")
                      +
                      +norm_inf(M::AbstractManifold, p, X) = norm(X, Inf)
                      +
                      +# TTsuggest_ structs collect data from a calibrating optimization run
                      +# that is handled by compute_pruning_losses function
                      +
                      +struct TTsuggest_int
                      +    suggestions::Dict{String,Int}
                      +end
                      +function (s::TTsuggest_int)(name::String, a, b)
                      +    return s.suggestions[name]
                      +end
                      +struct TTsuggest_float
                      +    suggestions::Dict{String,Float64}
                      +end
                      +function (s::TTsuggest_float)(name::String, a, b; log::Bool=false)
                      +    return s.suggestions[name]
                      +end
                      +struct TTsuggest_categorical
                      +    suggestions::Dict{String,Any}
                      +end
                      +function (s::TTsuggest_categorical)(name::String, vals)
                      +    return s.suggestions[name]
                      +end
                      +struct TTreport
                      +    reported_vals::Vector{Float64}
                      +end
                      +function (r::TTreport)(val, i)
                      +    return push!(r.reported_vals, val)
                      +end
                      +struct TTshould_prune end
                      +(::TTshould_prune)() = Py(false)
                      +struct TracingTrial
                      +    suggest_int::TTsuggest_int
                      +    suggest_float::TTsuggest_float
                      +    suggest_categorical::TTsuggest_categorical
                      +    report::TTreport
                      +    should_prune::TTshould_prune
                      +end
                      +
                      +function compute_pruning_losses(
                      +    od,
                      +    int_suggestions::Dict{String,Int},
                      +    float_suggestions::Dict{String,Float64},
                      +    categorical_suggestions::Dict{String,Int},
                      +)
                      +    tt = TracingTrial(
                      +        TTsuggest_int(int_suggestions),
                      +        TTsuggest_float(float_suggestions),
                      +        TTsuggest_categorical(categorical_suggestions),
                      +        TTreport(Float64[]),
                      +        TTshould_prune(),
                      +    )
                      +    od(tt)
                      +    return tt.report.reported_vals
                      +end

                      The next part is your hyperparameter optimization objective. The ObjectiveData struct contains all relevant information about the sequence of specific problems. The outermost key part is the N_range field. Early stopping requires a series of progressively more complex problems. They will be attempted from the most simple one to the most complex one, and are specified by the values of N in that vector.

                      mutable struct ObjectiveData{TObj,TGrad}
                      +    obj::TObj
                      +    grad::TGrad
                      +    N_range::Vector{Int}
                      +    gtol::Float64
                      +    vts::Vector{AbstractVectorTransportMethod}
                      +    retrs::Vector{AbstractRetractionMethod}
                      +    manifold_constructors::Vector{Tuple{String,Any}}
                      +    pruning_losses::Vector{Float64}
                      +    manopt_stepsize::Vector{Tuple{String,Any}}
                      +    obj_loss_coeff::Float64
                      +end

                      In the example below we optimize hyperparameters on a sequence of Rosenbrock-type problems restricted to spheres:

                      \[\arg\min_{p \in S^{N-1}} \sum_{i=1}^{N/2} (1-p_{2i})^2 + 100 (p_{2i+1} - p_{2i}^2)^2,\]

                      where $N \in [2, 16, 128, 1024, 8192, 65536]$.

                      obj and grad are the objective and gradient, here defined as below. Note that gradient works in-place and variants without manifolds are also provided for easier comparison with other libraries like Optim.jl. It is easiest when problems for different values N can be distinguished by being defined on successively larger manifolds but the script could be modified so that it’s not necessary.

                      pruning_losses and compute_pruning_losses are related to early pruning used in Optuna and you shouldn’t have to modify them.

                      function f_rosenbrock(x)
                      +    result = 0.0
                      +    for i in 1:2:length(x)
                      +        result += (1.0 - x[i])^2 + 100.0 * (x[i + 1] - x[i]^2)^2
                      +    end
                      +    return result
                      +end
                      +function f_rosenbrock(::AbstractManifold, x)
                      +    return f_rosenbrock(x)
                      +end
                      +
                      +function g_rosenbrock!(storage, x)
                      +    for i in 1:2:length(x)
                      +        storage[i] = -2.0 * (1.0 - x[i]) - 400.0 * (x[i + 1] - x[i]^2) * x[i]
                      +        storage[i + 1] = 200.0 * (x[i + 1] - x[i]^2)
                      +    end
                      +    return storage
                      +end
                      +function g_rosenbrock!(M::AbstractManifold, storage, x)
                      +    g_rosenbrock!(storage, x)
                      +    riemannian_gradient!(M, storage, x, storage)
                      +    return storage
                      +end

                      Next, gtol is the tolerance used for the stopping criterion in optimization. vts and retrs are, respectively, vector transports and retraction methods selected through hyperparameter optimization. Some items need to be different for different values of N, for example the manifold over which the problem is defined. This is handled by manifold_constructors which is then defined as Tuple{String,Any}[("Sphere", N -> Manifolds.Sphere(N - 1))], where the string "Sphere" is used to identify the manifold family and the next element is a function that transforms the value of N to the manifold for the problem of size N.

                      Similarly, different stepsize selection methods may be considered. This is handled by the field manopt_stepsize. It will be easiest to see how it works by looking at how it is initialized:

                      Tuple{String,Any}[
                      +    ("LS-HZ", M -> Manopt.LineSearchesStepsize(ls_hz)),
                      +    ("Wolfe-Powell", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),
                      +]

                      We have a string that identifies the line search method name and a constructor of the line search which takes relevant arguments like the manifold or a numerical parameter.

                      The next part is the trial evaluation procedure. This is one of the more important places which need to be customized to your problem. This is the point where we tell Optuna about the relevant optimization hyperparameters and use them to define specific problems. The hyperparameter optimization is a multiobjective problem: we want as good problem objectives as possible and as low times as possible. As Optuna doesn’t currently support multicriteria pruning, which is important for obtaining a solution in a reasonable amount of time, we use a linear combination of sub-objectives to turn the problem into a single-criterion optimization. The hyperparameter optimization objective is a linear combination of achieved objectives the relative weight is controlled by objective.obj_loss_coeff.

                      function (objective::ObjectiveData)(trial)
                      +    # Here we use optuna to select memory length for L-BFGS -- an integer in the range between 2 and 30, referenced by name "mem_len"
                      +    mem_len = trial.suggest_int("mem_len", 2, 30)
                      +
                      +    # Here we select a vector transport and retraction methods, one of those specified in the `ObjectiveData`.
                      +    vt = objective.vts[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical(
                      +            "vector_transport_method", Vector(eachindex(objective.vts))
                      +        ),
                      +    )]
                      +    retr = objective.retrs[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical("retraction_method", Vector(eachindex(objective.retrs))),
                      +    )]
                      +
                      +    # Here we select the manifold constructor, in case we want to try different manifolds for our problem. For example one could try defining a problem with orthogonality constraints on Stiefel, Grassmann or flag manifold.
                      +    manifold_name, manifold_constructor = objective.manifold_constructors[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical(
                      +            "manifold", Vector(eachindex(objective.manifold_constructors))
                      +        ),
                      +    )]
                      +
                      +    # Here the stepsize selection method type is selected.
                      +    manopt_stepsize_name, manopt_stepsize_constructor = objective.manopt_stepsize[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical(
                      +            "manopt_stepsize", Vector(eachindex(objective.manopt_stepsize))
                      +        ),
                      +    )]
                      +
                      +    # This parametrizes stepsize selection methods with relevant numerical parameters.
                      +    local c1_val, c2_val, hz_sigma
                      +    if manopt_stepsize_name == "Wolfe-Powell"
                      +        c1_val = pyconvert(
                      +            Float64, trial.suggest_float("Wolfe-Powell c1", 1e-5, 1e-2; log=true)
                      +        )
                      +        c2_val =
                      +            1.0 - pyconvert(
                      +                Float64, trial.suggest_float("Wolfe-Powell 1-c2", 1e-4, 1e-2; log=true)
                      +            )
                      +    elseif manopt_stepsize_name == "Improved HZ"
                      +        hz_sigma = pyconvert(Float64, trial.suggest_float("Improved HZ sigma", 0.1, 0.9))
                      +    end
                      +
                      +    # The current loss estimate, taking into account estimated loss values for larger, not-yet-evaluated values of `N`.
                      +    loss = sum(objective.pruning_losses)
                      +
                      +    # Here iterate over problems we want to optimize for
                      +    # from smallest to largest; pruning should stop the iteration early
                      +    # if the hyperparameter set is not promising
                      +    cur_i = 0
                      +    for N in objective.N_range
                      +        # Here we define the initial point for the optimization procedure
                      +        p0 = zeros(N)
                      +        p0[1] = 1
                      +        M = manifold_constructor(N)
                      +        # Here we construct the specific line search to be used
                      +        local ls
                      +        if manopt_stepsize_name == "Wolfe-Powell"
                      +            ls = manopt_stepsize_constructor(M, c1_val, c2_val)
                      +        elseif manopt_stepsize_name == "Improved HZ"
                      +            ls = manopt_stepsize_constructor(M, hz_sigma)
                      +        else
                      +            ls = manopt_stepsize_constructor(M)
                      +        end
                      +        manopt_time, manopt_iters, manopt_obj = benchmark_time_state(
                      +            ManoptQN(),
                      +            M,
                      +            N,
                      +            objective.obj,
                      +            objective.grad,
                      +            p0,
                      +            ls,
                      +            pyconvert(Int, mem_len),
                      +            objective.gtol;
                      +            vector_transport_method=vt,
                      +            retraction_method=retr,
                      +        )
                      +        # TODO: turn this into multi-criteria optimization when Optuna starts supporting
                      +        # pruning in such problems
                      +        loss -= objective.pruning_losses[cur_i + 1]
                      +        loss += manopt_time + objective.obj_loss_coeff * manopt_obj
                      +        trial.report(loss, cur_i)
                      +        if pyconvert(Bool, trial.should_prune().__bool__())
                      +            throw(PyException(optuna.TrialPruned()))
                      +        end
                      +        cur_i += 1
                      +    end
                      +    return loss
                      +end

                      In the following benchmarking code you will most likely have to adapt solver parameters. This is designed around quasi_Newton but can be adapted to any solver as needed. The example below performs a small number of trials for quick rendering but in practice you should aim for at least a few thousand trials (the n_trials parameter).

                      # An abstract type in case we want to try different optimization packages.
                      +abstract type AbstractOptimConfig end
                      +struct ManoptQN <: AbstractOptimConfig end
                      +
                      +# Benchmark that evaluates hyperparameters. Returns time to reach the solution, number of iterations and final value of the objective.
                      +function benchmark_time_state(
                      +    ::ManoptQN,
                      +    M::AbstractManifold,
                      +    N,
                      +    f,
                      +    g!,
                      +    p0,
                      +    stepsize::Manopt.Stepsize,
                      +    mem_len::Int,
                      +    gtol::Real;
                      +    kwargs...,
                      +)
                      +    manopt_sc = StopWhenGradientNormLess(gtol; norm=norm_inf) | StopAfterIteration(1000)
                      +    mem_len = min(mem_len, manifold_dimension(M))
                      +    manopt_state = quasi_Newton(
                      +        M,
                      +        f,
                      +        g!,
                      +        p0;
                      +        stepsize=stepsize,
                      +        evaluation=InplaceEvaluation(),
                      +        return_state=true,
                      +        memory_size=mem_len,
                      +        stopping_criterion=manopt_sc,
                      +        debug=[],
                      +        kwargs...,
                      +    )
                      +    bench_manopt = @benchmark quasi_Newton(
                      +        $M,
                      +        $f,
                      +        $g!,
                      +        $p0;
                      +        stepsize=$(stepsize),
                      +        evaluation=$(InplaceEvaluation()),
                      +        memory_size=$mem_len,
                      +        stopping_criterion=$(manopt_sc),
                      +        debug=[],
                      +        $kwargs...,
                      +    )
                      +    iters = get_count(manopt_state, :Iterations)
                      +    final_val = f(M, manopt_state.p)
                      +    return median(bench_manopt.times) / 1000, iters, final_val
                      +end
                      +
                      +"""
                      +    lbfgs_study(; pruning_coeff::Float64=0.95)
                      +
                      +Set up the example hyperparameter optimization study.
                      +"""
                      +function lbfgs_study(; pruning_coeff::Float64=0.95)
                      +    Ns = [2^n for n in 1:3:12]
                      +    ls_hz = LineSearches.HagerZhang()
                      +    od = ObjectiveData(
                      +        f_rosenbrock,
                      +        g_rosenbrock!,
                      +        Ns,
                      +        1e-5,
                      +        AbstractVectorTransportMethod[ParallelTransport(), ProjectionTransport()],
                      +        [ExponentialRetraction(), ProjectionRetraction()],
                      +        Tuple{String,Any}[("Sphere", N -> Manifolds.Sphere(N - 1))],
                      +        zeros(Float64, eachindex(Ns)),
                      +        Tuple{String,Any}[
                      +            ("LS-HZ", M -> Manopt.LineSearchesStepsize(ls_hz)),
                      +            #("Improved HZ", (M, sigma) -> HagerZhangLinesearch(M; sigma=sigma)),
                      +            ("Wolfe-Powell", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),
                      +        ],
                      +        10.0,
                      +    )
                      +
                      +    # Here you need to define baseline values of all hyperparameters
                      +    baseline_pruning_losses = compute_pruning_losses(
                      +        od,
                      +        Dict("mem_len" => 4),
                      +        Dict(
                      +            "Wolfe-Powell c1" => 1e-4,
                      +            "Wolfe-Powell 1-c2" => 1e-3,
                      +            "Improved HZ sigma" => 0.9,
                      +        ),
                      +        Dict(
                      +            "vector_transport_method" => 1,
                      +            "retraction_method" => 1,
                      +            "manifold" => 1,
                      +            "manopt_stepsize" => 1,
                      +        ),
                      +    )
                      +    od.pruning_losses = pruning_coeff * baseline_pruning_losses
                      +
                      +    study = optuna.create_study(; study_name="L-BFGS")
                      +    # Here you can specify number of trials and timeout (in seconds).
                      +    study.optimize(od; n_trials=1000, timeout=500)
                      +    println("Best params is $(study.best_params) with value $(study.best_value)")
                      +    selected_manifold = od.manifold_constructors[pyconvert(Int, study.best_params["manifold"])][1]
                      +    selected_retraction_method = od.retrs[pyconvert(Int, study.best_params["retraction_method"])]
                      +    selected_vector_transport = od.vts[pyconvert(Int, study.best_params["vector_transport_method"])]
                      +    println("Selected manifold: $(selected_manifold)")
                      +    println("Selected retraction method: $(selected_retraction_method)")
                      +    println("Selected vector transport method: $(selected_vector_transport)")
                      +    return study
                      +end
                      +
                      +lbfgs_study()
                      Best params is {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093} with value 5510.963227438757
                      +Selected manifold: Sphere
                      +Selected retraction method: ExponentialRetraction()
                      +Selected vector transport method: ProjectionTransport()
                      +
                      +[I 2024-03-16 18:04:17,965] A new study created in memory with name: L-BFGS
                      +[I 2024-03-16 18:04:45,996] Trial 0 finished with value: 5639.789870295856 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00027288064367948073, 'Wolfe-Powell 1-c2': 0.00026503788892114045}. Best is trial 0 with value: 5639.789870295856.
                      +[I 2024-03-16 18:05:11,860] Trial 1 finished with value: 5635.936370295855 and parameters: {'mem_len': 11, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.002743250060163298, 'Wolfe-Powell 1-c2': 0.00037986521186922096}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:05:39,386] Trial 2 finished with value: 5673.101441724422 and parameters: {'mem_len': 26, 'vector_transport_method': 2, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00043339485784312605, 'Wolfe-Powell 1-c2': 0.0027302649933974173}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:06:10,279] Trial 3 finished with value: 7410.818084581564 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:06:37,995] Trial 4 finished with value: 5756.566226449636 and parameters: {'mem_len': 25, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:06:42,755] Trial 5 pruned. 
                      +[I 2024-03-16 18:06:58,577] Trial 6 pruned. 
                      +[I 2024-03-16 18:07:15,366] Trial 7 pruned. 
                      +[I 2024-03-16 18:07:40,605] Trial 8 finished with value: 5581.7437274386975 and parameters: {'mem_len': 7, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0010567355712112379, 'Wolfe-Powell 1-c2': 0.003948002490203636}. Best is trial 8 with value: 5581.7437274386975.
                      +[I 2024-03-16 18:07:46,021] Trial 9 pruned. 
                      +[I 2024-03-16 18:08:11,512] Trial 10 finished with value: 5510.963227438757 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:08:35,914] Trial 11 finished with value: 5521.388656010121 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006738829952322474, 'Wolfe-Powell 1-c2': 0.0010639659137420014}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:09:00,317] Trial 12 finished with value: 5521.36958458155 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00010975606104676191, 'Wolfe-Powell 1-c2': 0.0007663843095951679}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:09:24,680] Trial 13 finished with value: 5520.7020845815505 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 6.743450835567536e-05, 'Wolfe-Powell 1-c2': 0.0008779759729737719}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:09:50,268] Trial 14 pruned. 
                      +[I 2024-03-16 18:10:15,494] Trial 15 finished with value: 5595.119584581556 and parameters: {'mem_len': 6, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 8.147444451747575e-05, 'Wolfe-Powell 1-c2': 0.00012268601197923553}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:10:25,264] Trial 16 pruned. 
                      +[I 2024-03-16 18:10:50,209] Trial 17 finished with value: 5572.474513153012 and parameters: {'mem_len': 5, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0015998473664092935, 'Wolfe-Powell 1-c2': 0.0005109172020536229}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:10:54,772] Trial 18 pruned. 
                      +[I 2024-03-16 18:11:04,534] Trial 19 pruned. 
                      +[I 2024-03-16 18:11:28,873] Trial 20 finished with value: 5512.3824417244705 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.1581668103921961e-05, 'Wolfe-Powell 1-c2': 0.0002691056199427656}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:11:53,327] Trial 21 finished with value: 5529.088227438692 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.3645031886009879e-05, 'Wolfe-Powell 1-c2': 0.0001863385753491203}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:12:17,911] Trial 22 finished with value: 5522.041370295835 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.0030173525937465e-05, 'Wolfe-Powell 1-c2': 0.000543991948003312}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:12:27,645] Trial 23 pruned. 
                      +[I 2024-03-16 18:12:52,163] Trial 24 finished with value: 5528.840941724406 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.000245400433292576, 'Wolfe-Powell 1-c2': 0.000133639324295565}. Best is trial 10 with value: 5510.963227438757.
                      +
                      +Python: <optuna.study.study.Study object at 0x70dd985d9b50>

                      Summary

                      We’ve shown how to automatically select the best hyperparameter values for your optimization problem.

                      Literature

                      [ASY+19]
                      T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.
                      diff --git a/v0.1.7/examples/RayleighQuotient/index.html b/v0.1.7/examples/RayleighQuotient/index.html new file mode 100644 index 0000000..1527e61 --- /dev/null +++ b/v0.1.7/examples/RayleighQuotient/index.html @@ -0,0 +1,235 @@ + +The Rayleigh Quotient · ManoptExamples.jl

                      The Rayleigh Quotient

                      Ronny Bergmann 2024-03-09

                      Introduction

                      This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.

                      For a symmetric matrix $A \in \mathbb R^{n\times n}$ we consider the 📖 Rayleigh Quotient

                      \[\operatorname*{arg\,min}_{x \in \mathbb R^n \backslash \{0\}} +\frac{x^{\mathrm{T}}Ax}{\lVert x \rVert^2}.\]

                      On the sphere we can omit the denominator and obtain

                      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                      which by itself we can again continue in the embedding as

                      \[\tilde f(x) = x^{\mathrm{T}}Ax,\qquad x \in \mathbb R^n.\]

                      This cost has the nice feature that at the minimizer $p^*\in\mathbb S^{n-1}$ the function falue $f(p^*)$ is the smalles eigenvalue of $A$.

                      For the embedded function $\tilde f$ the gradient and Hessian can be computed with classical methods as

                      \[\begin{align*} +∇\tilde f(x) &= 2Ax, \qquad x ∈ ℝ^n, +\\ +∇^2\tilde f(x)[V] &= 2AV, \qquad x, V ∈ ℝ^n. +\end{align*}\]

                      Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold $\mathcal M = \mathbb S^{n-1}$ are given by

                      \[\begin{align*} +\operatorname{grad} f(p) &= 2Ap - 2(p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1}, +\\ +\operatorname{Hess} f(p)[X] &= 2AX - 2(p^{\mathrm{T}}AX)p - 2(p^{\mathrm{T}}Ap)X,\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1} +\end{align*}\]

                      Let’s first generate an example martrx $A$.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random
                      +Random.seed!(42)
                      +n = 500
                      +A = Symmetric(randn(n, n) / n)

                      And the manifolds

                      M = Sphere(n-1)
                      Sphere(499, ℝ)
                      E = get_embedding(M)
                      Euclidean(500; field=ℝ)

                      Setup the corresponding functions

                      Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute $f$ is called with M as their first argument and $\tilde f$ if called with E.

                      We instantiate

                      f = ManoptExamples.RayleighQuotientCost(A)
                      +grad_f = ManoptExamples.RayleighQuotientGrad!!(A)
                      +Hess_f = ManoptExamples.RayleighQuotientHess!!(A)

                      the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory

                      p0 = [1.0, zeros(n-1)...]
                      +X = zero_vector(M, p0)

                      we can both call

                      Y = grad_f(M, p0)  # Allocates memory
                      +grad_f(M, X, p0)    # Computes in place of X and returns the result in X.
                      +norm(M, p0, X-Y)
                      0.0

                      Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.

                      First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute

                      λ = min(eigvals(A)...)
                      -0.08967721009388108

                      A Solver based on gradient information

                      Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient $\nabla \tilde f$. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].

                      But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent

                      s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                      +    return_state=true,
                      +)
                      +q1 = get_solver_result(s)
                      +s
                      Initial f(x): -0.000727
                      +# 50    f(x): -0.088415|grad f(p)|:0.004530500043902619
                      +# 100   f(x): -0.089097|grad f(p)|:0.004589417101266096
                      +# 150   f(x): -0.089530|grad f(p)|:0.0026028331895358247
                      +# 200   f(x): -0.089650|grad f(p)|:0.0012359084298719039
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 200 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 200:  reached
                      +    |grad f| < 1.0e-8: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-6d"), (:Cost, "f(x): %f"), (:GradientNorm, "|grad f(p)|:%s"), "\n", 50]

                      From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.

                      And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.

                      q2 = gradient_descent(M, f, grad_f, p0;
                      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                      +)
                      +#Test that both are the same
                      +isapprox(M, q1,q2)
                      Initial f(x): -0.000727
                      +# 50    f(x): -0.088415|grad f(p)|:0.004530500043902567
                      +# 100   f(x): -0.089097|grad f(p)|:0.004589417101266063
                      +# 150   f(x): -0.089530|grad f(p)|:0.002602833189535808
                      +# 200   f(x): -0.089650|grad f(p)|:0.0012359084298719097
                      +
                      +true

                      We can also benchmark both

                      @benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)
                      BenchmarkTools.Trial: 23 samples with 1 evaluation.
                      + Range (min … max):  217.668 ms … 268.332 ms  ┊ GC (min … max): 3.21% … 3.98%
                      + Time  (median):     219.032 ms               ┊ GC (median):    3.24%
                      + Time  (mean ± σ):   222.029 ms ±  10.351 ms  ┊ GC (mean ± σ):  3.33% ± 0.26%
                      +
                      +   █                                                             
                      +  ▆█▆▃▁▃▁▃▁▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃ ▁
                      +  218 ms           Histogram: frequency by time          268 ms <
                      +
                      + Memory estimate: 1.13 GiB, allocs estimate: 3613.
                      @benchmark gradient_descent($M, $f, $grad_f, $p0)
                      BenchmarkTools.Trial: 149 samples with 1 evaluation.
                      + Range (min … max):  31.006 ms … 163.769 ms  ┊ GC (min … max): 0.00% … 79.63%
                      + Time  (median):     31.330 ms               ┊ GC (median):    0.00%
                      + Time  (mean ± σ):   33.701 ms ±  11.067 ms  ┊ GC (mean ± σ):  3.40% ±  7.06%
                      +
                      +  █▃ ▂ ▁              ▃                                         
                      +  ██▄█▇██▆▄▁▄▄▁▇▁▁▆▁▄▆█▇▁▁▄▁▄▄▁▁▁▁▁▁▁▁▁▄▁▁▁▄▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▁▁▄ ▄
                      +  31 ms         Histogram: log(frequency) by time        47 ms <
                      +
                      + Memory estimate: 11.38 MiB, allocs estimate: 3006.

                      From these results we see, that the conversion from the Euclidean to the Riemannian gradient does require a small amount of effort and hence reduces the performance slighly. Still, if the Euclidean Gradient is easier to compute or already available, this is in terms of coding the faster way. Finally this is a tradeoff between derivation and implementation efforts for the Riemannian gradient and a slight performance reduction when using the Euclidean one.

                      A Solver based (also) on (approximate) Hessian information

                      To also involve the Hessian, we consider the trust regions solver with three cases:

                      1. Euclidean, approximating the Hessian
                      2. Euclidean, providing the Hessian
                      3. Riemannian, providing the Hessian but also using in-place evaluations.
                      q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.088106|grad f(p)|:0.01903913659588686
                      +# 20    f(x): -0.089023|grad f(p)|:0.007792334296299116
                      +# 30    f(x): -0.089501|grad f(p)|:0.008034300330026467
                      +# 40    f(x): -0.089842|grad f(p)|:0.008125526728200166
                      +# 50    f(x): -0.089890|grad f(p)|:0.0031244752821335416
                      +# 60    f(x): -0.089925|grad f(p)|:0.0029682862637714163
                      +# 70    f(x): -0.089962|grad f(p)|:0.002811722437216778
                      +# 80    f(x): -0.089997|grad f(p)|:0.0026658493010157363
                      +# 90    f(x): -0.090032|grad f(p)|:0.0025418974797659266
                      +# 100   f(x): -0.090067|grad f(p)|:0.0024485809550738955
                      +# 110   f(x): -0.090108|grad f(p)|:0.0023894008071780747
                      +# 120   f(x): -0.090155|grad f(p)|:0.002362317662908117
                      +# 130   f(x): -0.090208|grad f(p)|:0.0023611301647631484
                      +# 140   f(x): -0.090262|grad f(p)|:0.00237797866404072
                      +# 150   f(x): -0.090314|grad f(p)|:0.002405563029627607
                      +# 160   f(x): -0.090362|grad f(p)|:0.002438250821406204
                      +# 170   f(x): -0.090404|grad f(p)|:0.002472221074327323
                      +# 180   f(x): -0.090441|grad f(p)|:0.0025051377726827166
                      +# 190   f(x): -0.090472|grad f(p)|:0.002535721310831389
                      +# 200   f(x): -0.090498|grad f(p)|:0.0025633813700434637
                      +# 210   f(x): -0.090513|grad f(p)|:0.0025832821804127513
                      +# 220   f(x): -0.090513|grad f(p)|:0.0025832821804127513
                      +# 230   f(x): -0.090513|grad f(p)|:0.0025832821792817493
                      +# 240   f(x): -0.090513|grad f(p)|:0.0025832821770197098
                      +# 250   f(x): -0.090513|grad f(p)|:0.0025832821747576924
                      +# 260   f(x): -0.090513|grad f(p)|:0.002583282172495683
                      +# 270   f(x): -0.090513|grad f(p)|:0.0025832821702336567
                      +# 280   f(x): -0.090513|grad f(p)|:0.002583282167971658
                      +# 290   f(x): -0.090513|grad f(p)|:0.002583282165709656
                      +# 300   f(x): -0.090513|grad f(p)|:0.002583282163447637
                      +# 310   f(x): -0.090513|grad f(p)|:0.0025832821611855928
                      +# 320   f(x): -0.090513|grad f(p)|:0.0025832821589235814
                      +# 330   f(x): -0.090513|grad f(p)|:0.002583282156661572
                      +# 340   f(x): -0.090513|grad f(p)|:0.0025832821543995727
                      +# 350   f(x): -0.090513|grad f(p)|:0.002583282152137569
                      +# 360   f(x): -0.090513|grad f(p)|:0.0025832821498755487
                      +# 370   f(x): -0.090513|grad f(p)|:0.0025832821476135036
                      +# 380   f(x): -0.090513|grad f(p)|:0.0025832821453515035
                      +# 390   f(x): -0.090513|grad f(p)|:0.0025832821430894675
                      +# 400   f(x): -0.090513|grad f(p)|:0.0025832821408274405
                      +# 410   f(x): -0.090513|grad f(p)|:0.002583282138565445
                      +# 420   f(x): -0.090513|grad f(p)|:0.002583282136303441
                      +# 430   f(x): -0.090513|grad f(p)|:0.00258328213404143
                      +# 440   f(x): -0.090513|grad f(p)|:0.002583282131779385
                      +# 450   f(x): -0.090513|grad f(p)|:0.0025832821295174104
                      +# 460   f(x): -0.090513|grad f(p)|:0.002583282127255372
                      +# 470   f(x): -0.090513|grad f(p)|:0.002583282124993372
                      +# 480   f(x): -0.090513|grad f(p)|:0.0025832821227313313
                      +# 490   f(x): -0.090513|grad f(p)|:0.0025832821204693065
                      +# 500   f(x): -0.090513|grad f(p)|:0.002583282118207321
                      +# 510   f(x): -0.090513|grad f(p)|:0.0025832821159453034
                      +# 520   f(x): -0.090513|grad f(p)|:0.0025832821136832665
                      +# 530   f(x): -0.090513|grad f(p)|:0.0025832821114212673
                      +# 540   f(x): -0.090513|grad f(p)|:0.002583282109159243
                      +# 550   f(x): -0.090513|grad f(p)|:0.002583282106897217
                      +# 560   f(x): -0.090513|grad f(p)|:0.002583282104635213
                      +# 570   f(x): -0.090513|grad f(p)|:0.0025832821023731955
                      +# 580   f(x): -0.090513|grad f(p)|:0.0025832821001112094
                      +# 590   f(x): -0.090513|grad f(p)|:0.002583282097849167
                      +# 600   f(x): -0.090513|grad f(p)|:0.0025832820955871503
                      +# 610   f(x): -0.090513|grad f(p)|:0.0025832820933251325
                      +# 620   f(x): -0.090513|grad f(p)|:0.002583282091063122
                      +# 630   f(x): -0.090513|grad f(p)|:0.0025832820888010873
                      +# 640   f(x): -0.090513|grad f(p)|:0.0025832820865390785
                      +# 650   f(x): -0.090513|grad f(p)|:0.0025832820842770442
                      +# 660   f(x): -0.090513|grad f(p)|:0.0025832820820150576
                      +# 670   f(x): -0.090513|grad f(p)|:0.0025832820797530767
                      +# 680   f(x): -0.090513|grad f(p)|:0.0025832820774910523
                      +# 690   f(x): -0.090513|grad f(p)|:0.0025832820752290362
                      +# 700   f(x): -0.090513|grad f(p)|:0.002583282072966992
                      +# 710   f(x): -0.090513|grad f(p)|:0.002583282070704973
                      +# 720   f(x): -0.090513|grad f(p)|:0.0025832820684429532
                      +# 730   f(x): -0.090513|grad f(p)|:0.002583282066180946
                      +# 740   f(x): -0.090513|grad f(p)|:0.0025832820639189306
                      +# 750   f(x): -0.090513|grad f(p)|:0.0025832820616569214
                      +# 760   f(x): -0.090513|grad f(p)|:0.00258328205939488
                      +# 770   f(x): -0.090513|grad f(p)|:0.002583282057132884
                      +# 780   f(x): -0.090513|grad f(p)|:0.0025832820548708406
                      +# 790   f(x): -0.090513|grad f(p)|:0.002583282052608873
                      +# 800   f(x): -0.090513|grad f(p)|:0.002583282050346837
                      +# 810   f(x): -0.090513|grad f(p)|:0.0025832820480848214
                      +# 820   f(x): -0.090513|grad f(p)|:0.0025832820458228205
                      +# 830   f(x): -0.090513|grad f(p)|:0.0025832820435608087
                      +# 840   f(x): -0.090513|grad f(p)|:0.0025832820412987944
                      +# 850   f(x): -0.090513|grad f(p)|:0.0025832820390367726
                      +# 860   f(x): -0.090513|grad f(p)|:0.002583282036774768
                      +# 870   f(x): -0.090513|grad f(p)|:0.002583282034512706
                      +# 880   f(x): -0.090513|grad f(p)|:0.002583282032250709
                      +# 890   f(x): -0.090513|grad f(p)|:0.0025832820299886896
                      +# 900   f(x): -0.090513|grad f(p)|:0.002583282027726701
                      +# 910   f(x): -0.090513|grad f(p)|:0.002583282025464682
                      +# 920   f(x): -0.090513|grad f(p)|:0.0025832820232026517
                      +# 930   f(x): -0.090513|grad f(p)|:0.002583282020940619
                      +# 940   f(x): -0.090513|grad f(p)|:0.0025832820186786334
                      +# 950   f(x): -0.090513|grad f(p)|:0.002583282016416595
                      +# 960   f(x): -0.090513|grad f(p)|:0.0025832820141545986
                      +# 970   f(x): -0.090513|grad f(p)|:0.0025832820118925717
                      +# 980   f(x): -0.090513|grad f(p)|:0.0025832820096305525
                      +# 990   f(x): -0.090513|grad f(p)|:0.002583282007368543
                      +# 1000  f(x): -0.090513|grad f(p)|:0.0025832820051065217

                      To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.

                      q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.089673|grad f(p)|:0.0033633987039373655
                      q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.089673|grad f(p)|:0.00336339870393737

                      Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.

                      @benchmark trust_regions($M, $f, $grad_f, $p0;
                      +  objective_type=:Euclidean,
                      +  evaluation=InplaceEvaluation(),
                      +)
                      BenchmarkTools.Trial: 10 samples with 1 evaluation.
                      + Range (min … max):  488.560 ms … 542.951 ms  ┊ GC (min … max): 3.26% … 3.55%
                      + Time  (median):     498.677 ms               ┊ GC (median):    3.22%
                      + Time  (mean ± σ):   503.851 ms ±  17.951 ms  ┊ GC (mean ± σ):  3.27% ± 0.11%
                      +
                      +  █ ▁ ▁▁           ▁▁▁                      ▁                 ▁  
                      +  █▁█▁██▁▁▁▁▁▁▁▁▁▁▁███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
                      +  489 ms           Histogram: frequency by time          543 ms <
                      +
                      + Memory estimate: 1.97 GiB, allocs estimate: 40408.
                      @benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;
                      +  evaluation=InplaceEvaluation(),
                      +  objective_type=:Euclidean
                      +)
                      BenchmarkTools.Trial: 294 samples with 1 evaluation.
                      + Range (min … max):  12.991 ms … 148.108 ms  ┊ GC (min … max): 0.00% … 87.36%
                      + Time  (median):     15.369 ms               ┊ GC (median):    3.17%
                      + Time  (mean ± σ):   17.014 ms ±   8.238 ms  ┊ GC (mean ± σ):  7.16% ±  7.03%
                      +
                      +       ▁  █  ▂                                                  
                      +  ▆▁▁▇▅█▃▆█▇▅█▄▁▆▃▂▂▁▁▂▅▂▃▅▂▁▃▃▄▂▃▅▃▁▁▁▁▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▃▁▂▃ ▃
                      +  13 ms           Histogram: frequency by time         28.6 ms <
                      +
                      + Memory estimate: 37.43 MiB, allocs estimate: 2920.
                      @benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;
                      +    evaluation=InplaceEvaluation(),
                      +)
                      BenchmarkTools.Trial: 506 samples with 1 evaluation.
                      + Range (min … max):  8.717 ms … 152.718 ms  ┊ GC (min … max): 0.00% … 90.61%
                      + Time  (median):     8.884 ms               ┊ GC (median):    0.00%
                      + Time  (mean ± σ):   9.881 ms ±   6.537 ms  ┊ GC (mean ± σ):  4.94% ±  5.90%
                      +
                      +  ▆█▂     ▂▃    ▁                                              
                      +  ███▄▁▁▆▆██▇▄▆██▆▇▄▅▇▄▄▁▁▆▄▇▄▆▁▅▅▆▁▅▅▄▁▁▄▅▅▁▆▇▇▇▄▄▄▄▁▁▁▁▁▁▄▄ ▇
                      +  8.72 ms      Histogram: log(frequency) by time      14.7 ms <
                      +
                      + Memory estimate: 10.77 MiB, allocs estimate: 2899.

                      We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.

                      Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.

                      [distance(M, q1, q) for q ∈ [q2,q3] ]
                      2-element Vector{Float64}:
                      + 4.471485799821605e-15
                      + 0.048047538209352994
                      [distance(M, q3, q) for q ∈ [q4,q5] ]
                      2-element Vector{Float64}:
                      + 0.08269488012454579
                      + 0.08269488012454579

                      Which we can also see in the final cost, comparing it to the Eigenvalue

                      [f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]
                      5-element Vector{Float64}:
                      +  2.76900562450888e-5
                      +  2.769005624428389e-5
                      + -0.000836208332542443
                      +  3.191891195797325e-16
                      +  3.191891195797325e-16

                      Summary

                      We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.

                      Literature

                      diff --git a/v0.1.7/examples/Riemannian-mean/index.html b/v0.1.7/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..daa90be --- /dev/null +++ b/v0.1.7/examples/Riemannian-mean/index.html @@ -0,0 +1,33 @@ + +Riemannian Mean · ManoptExamples.jl

                      The Riemannian Center of Mass (mean)

                      Ronny Bergmann 2023-07-02

                      Preliminary Notes

                      Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

                      For this first example, the objective is a very common one, for example also used in the Get started: optimize! tutorial of Manopt.jl.

                      The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

                      There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

                      For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,

                      Loading packages and defining data

                      Loading the necessary packages and defining a data set on a manifold

                      using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
                      +Random.seed!(42)
                      +M = Sphere(2)
                      +n = 100
                      +σ = π / 8
                      +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
                      +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

                      Variant 1: Using the functions

                      We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get started: optimize!.

                      f = ManoptExamples.RiemannianMeanCost(data)
                      +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

                      Then we can for example directly call a gradient descent as

                      x1 = gradient_descent(M, f, grad_f, first(data))
                      3-element Vector{Float64}:
                      + 0.6868392794567202
                      + 0.006531600696673591
                      + 0.7267799821044285

                      Variant 2: Using the objective

                      A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do in-place-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

                      rmo = ManoptExamples.Riemannian_mean_objective(
                      +    M, data,
                      +    evaluation=InplaceEvaluation(),
                      +)

                      Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

                      rmp = DefaultManoptProblem(M, rmo)

                      This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

                      s1 = GradientDescentState(M, copy(M, first(data)))
                      +solve!(rmp, s1)
                      +x2 = get_solver_result(s1)
                      3-element Vector{Float64}:
                      + 0.6868392794567202
                      + 0.006531600696673591
                      + 0.7267799821044285

                      but we can easily use a conjugate gradient instead

                      s2 = ConjugateGradientDescentState(
                      +    M,
                      +    copy(M, first(data)),
                      +    StopAfterIteration(100),
                      +    ArmijoLinesearch(M),
                      +    FletcherReevesCoefficient(),
                      +)
                      +solve!(rmp, s2)
                      +x3 = get_solver_result(s2)
                      3-element Vector{Float64}:
                      + 0.6868393613136017
                      + 0.006531541407458413
                      + 0.7267799052788726
                      diff --git a/v0.1.7/examples/Robust-PCA/index.html b/v0.1.7/examples/Robust-PCA/index.html new file mode 100644 index 0000000..e172158 --- /dev/null +++ b/v0.1.7/examples/Robust-PCA/index.html @@ -0,0 +1,64 @@ + +Robust PCA · ManoptExamples.jl

                      The Robust PCA computed on the Grassmann manifold

                      Ronny BergmannLaura Weigl 2023-07-02

                      For this example we first load the necessary packages.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using LinearAlgebra, Random, Statistics
                      +using Manifolds, Manopt, ManoptExamples
                      +using Plots
                      +Random.seed!(42)

                      Computing a Robust PCA

                      For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

                      We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

                      \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

                      The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

                      \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

                      where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

                      The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

                      First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

                      n = 40
                      +d = 2
                      +outliers = 15
                      +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
                      +# Outliers:
                      +permute = shuffle(1:size(data, 2))'
                      +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
                      +# We are looking for a line here so we set
                      +m = 1

                      We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

                      M = Grassmann(d,m);

                      For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

                      Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

                      Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

                      The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

                      We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

                      ε = 1.0
                      +iterations = 6
                      +reduction = 0.5
                      +U, S, V = svd(data);
                      +p0 = U[:, 1:m]
                      2×1 Matrix{Float64}:
                      + -0.7494248652139397
                      +  0.6620893983436593

                      Let’s generate the cost and gradient we aim to use here

                      f = ManoptExamples.RobustPCACost(M, data, ε)
                      +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
                      ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

                      and check the initial cost

                      f(M, p0)
                      9.430690947905521

                      Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

                      q = copy(M, p0)
                      +εi = ε
                      +for i in 1:iterations
                      +    f.ε = εi
                      +    grad_f.ε = εi
                      +    global q = trust_regions(
                      +        M,
                      +        f,
                      +        grad_f,
                      +        ApproxHessianFiniteDifference(
                      +            M, q, f;
                      +            vector_transport_method=ProjectionTransport(),
                      +            retraction_method=PolarRetraction(),
                      +        ),
                      +        q;
                      +        (project!)=project!,
                      +    )
                      +    global εi *= reduction
                      +end

                      When finally setting ε we can investigate the final cost

                      f.ε = 0.0
                      +f(M, q)
                      9.412961981726742

                      Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

                      fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
                      +plot!(
                      +    fig,
                      +    q[1] * [-1, 1] * 100,
                      +    q[2] * [-1, 1] * 100;
                      +    linecolor=:red,
                      +    linewidth=2,
                      +    label="Robust PCA",
                      +);
                      +plot!(
                      +    fig,
                      +    p0[1] * [-1, 1] * 100,
                      +    p0[2] * [-1, 1] * 100;
                      +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
                      +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
                      +    linewidth=2,
                      +    linecolor=:black,
                      +    label="Standard SVD",
                      +)

                      Figure 1: The result of the robust PCA vs. SVD

                      diff --git a/v0.1.7/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.7/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..e695072 --- /dev/null +++ b/v0.1.7/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/Rosenbrock/index.html b/v0.1.7/examples/Rosenbrock/index.html new file mode 100644 index 0000000..68cb60c --- /dev/null +++ b/v0.1.7/examples/Rosenbrock/index.html @@ -0,0 +1,59 @@ + +Rosenbrock · ManoptExamples.jl

                      The Rosenbrock Function

                      Ronny Bergmann 2023-01-03

                      After loading the necessary packages

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using Manifolds, Manopt, ManoptExamples
                      +using Plots

                      We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).

                      a = 100.0
                      +b = 1.0
                      +p0 = [1/10, 2/10]

                      which is defined on $\mathbb R^2$, so we need

                      M = ℝ^2
                      Euclidean(2; field=ℝ)

                      and can then generate both the cost and the gradient

                      f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                      +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
                      ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

                      For comparison, we look at the initial cost

                      f(M, p0)
                      4.42

                      And to illustrate, we run two small solvers with their default settings as a comparison.

                      Gradient Descent

                      We start with the gradient descent solver.

                      Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

                      gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
                      # Solver state for `Manopt.jl`s Gradient Descent
                      +After 200 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 200:  reached
                      +    |grad f| < 1.0e-8: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

                      gd_x = get_record(gd_state, :Iteration, :Iteration)
                      +gd_y =  get_record(gd_state, :Iteration, :Cost)
                      +f(M, get_solver_result(gd_state))
                      0.10562873187751265

                      Quasi Newton

                      We can improve this using the quasi Newton algorithm

                      qn_state = quasi_Newton(M, f, grad_f, p0;
                      +    record = [:Iteration, :Cost], return_state=true
                      +)
                      # Solver state for `Manopt.jl`s Quasi Newton Method
                      +After 26 iterations
                      +
                      +## Parameters
                      +* direction update:        limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.
                      +* retraction method:       ExponentialRetraction()
                      +* vector transport method: ParallelTransport()
                      +
                      +## Stepsize
                      +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
                      +  * retraction_method = ExponentialRetraction()
                      +  * vector_transport_method = ParallelTransport()
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 1000: not reached
                      +    |grad f| < 1.0e-6: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

                      qn_x = get_record(qn_state, :Iteration, :Iteration)
                      +qn_y =  get_record(qn_state, :Iteration, :Cost)
                      +f(M, get_solver_result(qn_state))
                      1.4404666436813376e-18

                      and see that the final value is close to the one of the minimizer

                      f(M, ManoptExamples.minimizer(f))
                      0.0

                      which we also see if we plot the recorded cost.

                      fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
                      +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

                      Figure 1: The result of the robust PCA vs. SVD

                      diff --git a/v0.1.7/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.7/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..67f8e6f --- /dev/null +++ b/v0.1.7/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/Total-Variation/index.html b/v0.1.7/examples/Total-Variation/index.html new file mode 100644 index 0000000..9f1d145 --- /dev/null +++ b/v0.1.7/examples/Total-Variation/index.html @@ -0,0 +1,107 @@ + +Total Variation · ManoptExamples.jl

                      Total Variation Minimization

                      Ronny Bergmann 2023-06-06

                      Introduction

                      Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].

                      This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.

                      The manifold-valued ROF model

                      Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold $s = (s_i)_{i=1}^N \in \mathbb M^n$ of length $n \in \mathbb N$, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term $D(p,s)$ to “stay close to” $s$ and a regularizer $R(p)$. For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain

                      \[\operatorname*{arg\,min}_{p\in\mathcal M^n} +f(p), +\qquad +f(p) = D(p,s) + α R(p) = \sum_{i=1}^n d_{\mathcal M}^2(s_i,p_i) + α\sum_{i=1}^{n-1} d_{\mathcal M}(p_i,p_{i+1}),\]

                      where $α > 0$ is a weight parameter.

                      The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost $f(p)$ to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any $p_i=p_{i+1}$. So we have to use another technique.

                      The Cyclic Proximal Point algorithm

                      If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the Cyclic Proximal Point Algorithm [Bac14].

                      Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.

                      The Optimsation

                      using Manifolds, Manopt, ManoptExamples, ManifoldDiff
                      +using ManifoldDiff: prox_distance
                      +using ManoptExamples: prox_Total_Variation
                      +n = 500 #Signal length
                      +σ = 0.2 # amount of noise
                      +α = 0.5# in the TV model

                      We define a few colors

                      using Colors, NamedColors, ColorSchemes, Plots, Random
                      +data_color = RGBA{Float64}(colorant"black")
                      +light_color = RGBA{Float64}(colorant"brightgrey")
                      +recon_color = RGBA{Float64}(colorant"vibrantorange")
                      +noisy_color = RGBA{Float64}(colorant"vibrantteal")

                      And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.

                      Random.seed!(23)
                      +M = Circle()
                      +N = PowerManifold(M, n)
                      +data = ManoptExamples.artificial_S1_signal(n)
                      +s = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]
                      +t = range(0.0, 1.0; length=n)
                      +scene = scatter(
                      +    t,
                      +    data;
                      +    markercolor=data_color,
                      +    markerstrokecolor=data_color,
                      +    markersize=2,
                      +    lab="original",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    s;
                      +    markersize=2,
                      +    markercolor=noisy_color,
                      +    markerstrokecolor=noisy_color,
                      +    lab="noisy",
                      +)
                      +yticks!(
                      +    [-π, -π / 2, 0, π / 2, π],
                      +    [raw"$-\pi$", raw"$-\frac{\pi}{2}$", raw"$0$", raw"$\frac{\pi}{2}$", raw"$\pi$"],
                      +)

                      As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.

                      Defining cost and the proximal maps, which are actually 3 proxes to be precise.

                      f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)
                      +proxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_Total_Variation(N, α * λ, p))

                      We run the algorithm

                      o = cyclic_proximal_point(
                      +    N,
                      +    f,
                      +    proxes_f,
                      +    s;
                      +    λ=i -> π / (2 * i),
                      +    debug=[
                      +        :Iteration,
                      +        " | ",
                      +        DebugProximalParameter(),
                      +        " | ",
                      +        :Cost,
                      +        " | ",
                      +        :Change,
                      +        "\n",
                      +        1000,
                      +        :Stop,
                      +    ],
                      +    record=[:Iteration, :Cost, :Change, :Iterate],
                      +    return_state=true,
                      +);
                      Initial  |  | f(x): 59.187445 | 
                      +# 1000   | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283
                      +# 2000   | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678
                      +# 3000   | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907
                      +# 4000   | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957
                      +# 5000   | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175
                      +The algorithm reached its maximal number of iterations (5000).

                      We can see that the cost reduces nicely. Let’s extract the result an the recorded values

                      recon = get_solver_result(o)
                      +record = get_record(o)

                      We get

                      scene = scatter(
                      +    t,
                      +    data;
                      +    markercolor=data_color,
                      +    markerstrokecolor=data_color,
                      +    markersize=2,
                      +    lab="original",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    s;
                      +    markersize=2,
                      +    markercolor=light_color,
                      +    markerstrokecolor=light_color,
                      +    lab="noisy",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    recon;
                      +    markersize=2,
                      +    markercolor=recon_color,
                      +    markerstrokecolor=recon_color,
                      +    lab="reconstruction",
                      +)

                      Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”

                      Outlook

                      We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the $\operatorname{TV}_2$ yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.

                      Another extension for both first and second order TV is to apply this for manifold-valued images $S = (S_{i,j})_{i,j=1}^{m,n} \in \mathcal M^{m,n}$, where the distances in the regularizer are then used in both the first dimension $i$ and the second dimension $j$ in the data.

                      Technical details

                      This version of the example was generated with the following package versions.

                      Pkg.status()
                      Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`
                      +  [6e4b80f9] BenchmarkTools v1.5.0
                      +  [35d6a980] ColorSchemes v3.25.0
                      +  [5ae59095] Colors v0.12.11
                      +  [7073ff75] IJulia v1.24.2
                      +  [8ac3fa9e] LRUCache v1.6.1
                      +  [d3d80556] LineSearches v7.2.0
                      +  [af67fdf4] ManifoldDiff v0.3.10
                      +  [1cead3c2] Manifolds v0.9.18
                      +  [3362f125] ManifoldsBase v0.15.10
                      +  [0fc0a36d] Manopt v0.4.63
                      +  [5b8d5e80] ManoptExamples v0.1.7 `..`
                      +  [51fcb6bd] NamedColors v0.2.2
                      +  [91a5bcdd] Plots v1.40.4
                      +  [6099a3de] PythonCall v0.9.20

                      Literature

                      [Bac14]
                      M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [ROF92]
                      L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.7/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg b/v0.1.7/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg new file mode 100644 index 0000000..f5c90b3 --- /dev/null +++ b/v0.1.7/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg @@ -0,0 +1,1551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg b/v0.1.7/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg new file mode 100644 index 0000000..414a9ca --- /dev/null +++ b/v0.1.7/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg @@ -0,0 +1,1048 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.7/examples/img/bezier/Casteljau-illustr.png b/v0.1.7/examples/img/bezier/Casteljau-illustr.png new file mode 100644 index 0000000000000000000000000000000000000000..ecddd4acc643c22a65dc416fa64eb3341011fbd5 GIT binary patch literal 131251 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≪`$_g5pU!0dqVCc7+?{w6;c^8V_2)Et z{_#$a2w)A%r$7B^JLsT;?ABXv4ayz&q9G$}{rfYl+ngEpN4@{?Mh(SZcb#!(d-Mb} zXd}Nd0Qv0i?uJdA*uC|AsOH?E{Y)*g`@EF{9s@RW5efppZJw+&CIu(4(ek4bz|o)_MJ!aoU|d&q!o7*I`2_GJj;!e`Z?_;O`#R@nM4# zo<)Iok1P62Z;*GwvC<#B_``U-9*%d92i#PO4!HA<9|xX2-}p{EzE{}&B(k9)Y7+Tz zH}~i7*u;h5n*;Cl0e&cV-b0T1hX;-~>dteNpV4oQ&*O$3((inBzkH9<3g4WMe1nI) zbLb4c^vf>0%pQLD;hIzDa`OtUr?R4a+Xnmo_rD+feeG*sGfth;Nn3$FS0K@NJbrAa z5gQ|k2#e+5;1C^1Gf}6`{chPj%h76f0CzZwjnUM-9@2Ga%?CS6lEo#TZ3-^mO(B9j z!GH_idVTGA<@`((2Yvz1<3xVigBx_R2=2`{-?VeiImdeT=w_?8DWi9+u`VZm#TN7# zZTsu;o)Ztq4{Ih|9-MaP0p-c-25`p71;H{Y6Y}#=b=c&Uq9c#9Kd6b~KGgRr;vP_M z=xnue)12V?!Zh?dLP5e2mbS`t(nj1)3z+~tahZ`)(g^2D1Dw&GV0}C!J`DVTmVFIU z<)`xrUM7Ml9(YUv!Y{lgtTzM*8};jWarb9z`0Wt?j(b#zdH&!A@J`$)uPCt6m7!p# zDf%t?9IXJHrs#KnCO%{Wr6;U3{{0_rw|_qRcMX|lihOYQgAmd-O9f2QS+|EO)%Roh?x$N=lzCELn&a3IqMxeia^2R1wbR}wx~ zvbtSU+3#rW$Sc+9OI*p-k@yBH^vRPahZ;^q{#yqdtkr7wJY}MGf>gDLmWc{p9qDM% zPhQmP9Q z;c+?$$FsJigj1pz4z7zXzD2_(i`V_d`%OfPSG>t^;SRr$vt(%n2Qru_zC>|)T#3HL zlT&x_2$(ncvycCF`tY$S`eFvv4uY`RAX{ zd}KIQ_TYmLHdf5jV2a_0HI}1s#Xl1#2h9xAg)cV_8EfC3{jv?|+Dq%|W0iNgPMhg! zJ8iwTz8x~~aOVfJ)+D>2RJbB8F};5;S!XE zs_Mq=gM<_R>b?6MfALVewu=9n;9Z0$uCRq|lTLSax@^Et4Dq;$y0uk(o=Q4M1GFL+zxmB??12X!2$u`Z zp8c+k9AH*-@eTHLm9|Q5EVZkT8fe`*YW4fh#JzLUNy8EF#!eg!imr;QQsGnRoxk?l zYmJhc1}k(3nKo@2O|9J$gheRZR4bmiM5O%cLeZ82K;_2#h6`&V;=O_)^AKRb1=#)9 z72f^SWrGj=ZOMze=xdMP$QLRuc-P#}(8`c}OH!!!AkAe3+hxl=MdKxH4FL}u#q0Rp z<{NmUeu%@vrV^j~bvuu)=kY__Wo>S^POy47635{)1J zl4ge4xkL*cLixunfqZpfBtX+~3&5f0MrBH)6uNI;Q-WWE2o(m=*+G2Zl;h?H7z-0% z5DaNeh*cP|)>?fuplH1%7T+UpE}C5s+JYC&m4?>D1HUk>RdF;h4*&o_07*naRCzTd zZJw9)g>ipw$NNv_9`7&y-NVJ(_=|V*_jnxb;XPIXn~fRNMJ?#{TCB9w7H{opU-|gQ zZ2$2G+fz?Ht!-~#Fr9K4$mJSW%CakV7CK#g@x?ZF?AUN=2AveIbmP;_J4zihLMO=7&4^9O1E=1Lb=^}*PS*mbA-J#YlRLl$g=Yf>7#>%bi}Jh zfTGhYK~5xN=qsLSEOH@BBG7k5Ta_l6+a={+mdH=4ZjI88-g=N?pUEb8Wem5mK~$>o zHrO8wc4gV%z|9bV_&t-bJ+1zXa6%u7oW(vqYT^ExfrJ_q&_adtA=J+S`0sht5_wTS z1$&FuSwy00NBSIZXJw}h+6+Ap`OYnTANB!V~ z5872%T@_9y%+!vBh4bgyZMXi$`V2q9zB^Or5oomL7l-t+Vf}O>9EZrn(GD)^X!HO! zye7@KCrD=%qjp+bGi$_%5ewnL zKd9VF<#3p4$*b0;+w^rA;Tl%y{x*lG+(n;TnlN|=z^f>r=zLuXy!JXa>Zc{2$wTts9*%`t&I2`1w~3djf_e}aEd7F z^%e?^803OcZ-8d?mTwEH4LrDjQGDGD`eZ|mwRI&5^_SbamZ)xdE@d z7ukGR>&8Ug=~IzWpI*N*!ii#sr{q&SZ=+$F>zO!^3zY5s_up@)pMJX0$SW)?4DxW* z7p}Hz|KFEv;p#H`+_M^L&q=pWjp%GgjOZCIU*W9&cyPYD0;iEe+M;seVdPdJ9nwL= z?K5?K@O1H_Lqm^ybzInuR_N7{ri~vz{xQv|KPSd8kIt!aQT)yR43k>BmmW@D#|^RTUHh88N3_6W$cSFmj<+YRN7RJP{PcUzzCId(=Lo#Lj7 z_HQe;+lH;$g`){O%mMi@cqO$0-FFQg~0zxVxr``-0(a&!AVx4eX%oOjOMXYaMwT6>k<500G`%Q$u) zF-(;$Z2X>{Iy-7iul;07kKHS$K3{R4&?31F9rgGG9aK{&h4H5MI(DZMFZ6w(!5{1t z_f%d*Q-Tw9gKg!GQ|BUN%NK=F$TQ9y`l&~aIESr_e9eyw8ThDr<{!QC3Z4E}Z`UkZ zt*IPAmn>a+;v{R)It@mJ(s?^*1ui&K1|ts8lun|#nq6I?*Tk23$EEa>wgw=x%(H+bg-Li1wC&H*69va&iLPg zi{leN^mriF0-p+@L@W*S=)>hLkDop)c+72@M}L0(ZXGVO|HvWycc+14_c?a${~cI7 zM~{8Uk|oA=w>fj>gjMnG*l)l6c4L^71^|nw;8#=+!KYI__0uNw+ULjg*~3!NwQ>kw zl~doXdy~wVH!=#LGmf;-jyxS3$U7i?&{-g%}xbeen-89m&%J8|ISqXE}k zb4^$PH+}l_aNrPAFs!5apgssR@{nP6&y(xz`_E~pU9GUIwGi&`w)6|(pv7eXhfaXc z$cC2{)q6d2eoNDuHEX(+@0X@YJt$YTRm&lYr2UDQiG5s1O)c z&H(&mLnR0!t@28gTL?`E4miCSa&rJ>a)ryCx;!b6DU4`TvCC6ZX;5n&zjV}L4(Kr* zF;(;EbdzP>o>;jn(Uamunm}D}q32P@&f+-?J@cq+cU!!8u|C;)cvu;K&pr3pJKph* zFg$zPZMWI__3MMdb_Wz>OvqrJ!08=RyY0Qh5<~6Z*TnkIR_hpI{ln>(*MjX&F!D#; zx}(9CmeY<>7WS!7nRh(lDb5{yx#9@mgDu~_eY<_>OJB09uDU8rvCuH1uKD=N2R`u6 z*4oryYc}t)ul#XyDE9bCEq3-X6Gcz@o;itVc(^l%c4P|tiA%%hFruwdh#%@hLQ6D% z-+116=app4OLFK!xKBeB&6-c&DO$doY(hyraAkCyf3wP4vdlah`Fo?UaU?OOUizPZ=FAgBJc%;HIM z>KCkSv`4pAZ;>1}4!cp#x&}6#Jos5kIbLsWkAdlP>-owl_8UB?lLsGs&|dkr>YyTd$qyen(vF!kN~Z$S5K6Bf)VVuz z=ygAWLx+Ya50thC-=errY2;_EhWVRI?VZDmk{!Ab3ZGQfDN9?$=wBue2`KyGI2RHs zH_E7dD>z*`Djh)qp7+XKm;$pT5R_YM4jr5b-a-sNUi_1h1JOFon5c{|kT1s}F4>I} zUDvHRVO9zj3zeGGyEopqM|>}Nj< z$AP}-O>eU2o_j8Ad7Ct8Qs|}A^IN!Zp`Cp4$zd4xfd?MYj+ibRHni3H8k%kH2rZJE z+-3KvKX9C!`bTu=%<4UIGU};UdXbzvpQtRRWkd;)*dyfJJ4Gdc3R!_gonV`J_T5Ig zbO>4*x(AzgzyE><;Z#6))1$>v}=9`Pwg+}3!kxllGCr%E| zGBJ^|KP66U)S)9c(9Y%h&RuDGbZ=h1eEFZ%2>ezOmssW#N_OZV<3j}+7WtxvoqDwd zpSg4<{P(9k#uyj{Be_ZqR630VVA2vy4bXz%P+=%}ITazb?0kNMSFJTP^1-{3X{a+U z6P$?m z*qKv*^PAsn-}=_K!nfGzy)%4Eube|j=<(_Emv-HC*BMU#J@0vs-G2KW_JVqWz4a~j z#%WDEnjzy!L&Mca4_mzQf}v8;9=0?ffQyJG#$zK{Q(MZQ_`=R(zqNN!I;BLgM#}E-Zp2 z|3au5%y zkF?>fbO11_g_n$eaiRM-cj}Lo?+X?z2#3(%G&q!G}Tf0xtnjk*=|+O zu%WR@PJg66uR6lU=xgeK(x*4?Q%`VMXM-I(I&tC{R=o)H@+QdX(2?C?UK$yMCgS4^ zz~m}tqXB!2oKj9yW_c!#o;+#pzyJR5>0EX&Fik?;u^xg37w5GzZG!Vt%L=*t6u%uKN%qpfV^3lQr zM{v#uR|J%@$XjaxUbt}88g8|Mk2|Vr)E{LcW5`fGvQ{fR8%%hJyh?WLBdAb%O zNll;J(rqg?wad8ELoZElsW+D$wtZp5Wti>LpZ;`MK(|ms?)29D^f{abL%XZhL;RPI zf6R{6CtJVt*-zP&rN6hsdv@FLLt5<%TkGuCYxTKW4ZVY2X&C0NEu5YAD4mwvxe80+ z@C(aTSZZ)bpV23tX=p(kadfz}^UA*d^{%Wl^8VJOJ8#ocirG``=GBbJd z&93-Z3{UTzbhAjiT}OHTBS+S-mSPYAO|H_`&7%ha53#hfL99=OCK5yyY$7 z$k=au;~QZpo-&E2H@tKER{Ou-kuBGC_=2;n?jJShKJ#$9Y*V+jwe;HY1ADM@%zselcqTmtr)g>N6yK5`s5yl0g>jV!`Xe)1DL?X=Uv zv)7$YF4w|Iofh|}b#}`Neeg`{9IiWgg3Z*9i9H?re&;-7)Sq;;5(j^A=rk(4{*V`) zTOiZi3)9zX-Nj8wIO*pLypRI#u{m@h-lv0RnzUkXr_M?K+U(i0zpUY>Ud^x9Pna+v z2vC8z<((YC;i4kFwU#ZjJ9E;Kj|#{YyrR6t1&m4xY%cu#J%Uqckvx1xGaoYReS;CbrQsm3<9Q%*T0ICO^G zfBfSg4}d?CmDSox_w1tEbTrs))_v9W_NwF0w13(>(rz5G+YUcO4!4d@N_QxajL|X& z02T4zG*FlM+P*@HL4LT((O5`_2Xt^T!pgS(m<~=JlIeK6GM7C^s6A5iVBL^B#M{ z6o>p_pBBM2$k~5iFn0=Xdgrz2&>={tCj~1h!T#yGb?d&MBlMbd=t93*CUtz>2nLiZ zz%+~yWn`)V%7(#Q2ps7UhI|8QX$hhT4DV23h2+n-oKn(36Bjh*JMvIUd4n;p%LjGm z&&AT=`J-~+&)lQWl)-P5okJ~{cl9(;I6V9BC|(}tcYha$u?G)_iwj7s$7&U5Cn7cjp*kkSDi!TmedRwR=`6slpnlSSvFSTxcdUfgN{?R6$ z`uEm*#yjoO|7o{(_C9T|UhoE+J!`gld5JAg*fw;U0Pe-&501bgzvEjBtbj9`f;mukzmFCl^z#}hp5~USb{AR%$cW>0d6P&pg<29-5F3qj~6c~#Z zE#ekyD5jyB6#-4~H?W^hLmod?Fa1IZPq$XSH(|V3AP|SbWOl3I#TyCRxp8X=fzjIg) z+hGt-ov`AT2H~t(vvM{-$(st-;m3Watf&s9mYWNg)b##4)7|lR{zUK5XHQqiJ@mS? z2<~PLpciP9AuR?O>rC+usHZ z`ovi_W5crW-E_H>fxt1dZ+OES!peEh7xx8h-~cQFd~#k5WX$m3xbTq~wrVkd9A|(( z;8lu!&4mwTKrdy$SDk$lj^yQZH+sP|qTm&0@uOo4v}lp_4eUMuH`jYF2c9(RM7SI7 zU1L`)+89=~|McuOJ9GX-+bub1$gt-;lPrK63nN*DkH4clcr9FeG$qrhdHw$uerMt* zwN0*1>GSVVI?`G0>6@BaGUR$CC(gu4uMqvYS|S%}9-&?>lYSYoIx3)?P7wH18dqxX z6vl?ilVTMc$WK5y5f%a!Sc?H?;(Vw@{Hl!;{GmRh_2>1=-Jen1=x?6Mlj(x4C`_l5 zIPxN+sd+t3y1V0%?p@q*sdT2o&xK1W-KoD*;qg1QO#dA%D+(tQ?}(4)VNAVWL#cC_ zM^}%F@0vcbYL_i|*|@NMEgdeo;?O6rzkSNekkN5PhP+qEmMMCQuYdjP!#?)A?z+pq z_O-9siX@EbhaGM$n(y7VeTUt6!umfewIM zTmd{Xjb4;e26S?PFLUAGjFY56bou3%hv9SJ`)YOHj>Z}W=E^yzpAL@0a9k2Y?Tz-( zl5KXyy&7tl^S*4}a645)?VVjZKqiZAhgM`E8sIUdj z&Rogkb>_g0-5ZH%1Bj}Z{%5rUk5xpk7}`M31cy#5Do#Oy5D&nGsnJ$6zlo2=dHO=` z2n3bLb_9l1wBWCh>=jRo5Q8s@@M75OXsJgoL2lU#X)-e1{zxq|!-bR_)MQ=meX4tTi zqpf}W3$|g+Do4dGyzs&>l#c_`YU%LpZeD^P_2;(L`QaHU8+)*I>(;Qfj>ZM)ir-)(I3@-pdt<1Fcw6Ry1SO1t2K3&IEld9c;+8v74i z0;|@W^~JO;ySwe2A3twTX?vq-eZ^xJ&#`G?&v|->4nEH3RDZ%dMn5QzGYME_&s4J- zUp;DwG-_AGW2&#CgoBdC@64eq_8vNja*UmXtxGMGYb9Jb^ganv14AKv$N(XNP-iZP z#1$~mT&{dnI_0D?zu58|7ET?-sby!0^1|y{#c_9$(7cVU_};9C^XZdF0RKD5nsZ;E{=6UMG&T*RjLb8Im?sC$^kAt=0atzQg{w zxy#n+7}#;s4@vAR_Jn!dT~6{ynl*{j13YXLy2(K_(>45k>T4I+B_FuL&c6K#8@b{c z+j#RewrS0Z0B_E`BScGsEm^iKEcjxjHi2F{y->Esu@DbO!f-D<@iLrG&PU?oa=hRG z-?>V)v0jhh=}sKD45f3T+nsmbY2W*vb_gT`pSNY}Anyo#Fb7A@v99FD$-`fI$n=)I z4lx0ti=%RWdfz&GYExp(!_VI|E$gaw%5c7B;vWqN7DuuWj}9LrDWajDkp1Gt0TB^nh~1%sn?4jD#(=am|2DNgH_DMuP$jYdj^X#<)R|{sCUj8^A|*hOA6&JDTRM8cli+txi13Ry6sEj+? z7WbYpo{MH+#;HS;=VkgLx`w7^J7xY6_R}e^unSi7+iTu(sXcf9Z*AD^-?qhnO>DVR zC(>T3o;jlnbSn7T8yA7acN{x=7oniFMC&Z>0DOkYMvNE{TEyU9s{tW{7bx(75L|Jf1=`@f z-<>{WEUL`pA^4s21oGn4E5#eiMb>G|(tDt1=C}leYT%FSq4TN+P%0V)s<}ly^yQoO z*!&wb9IFqJzfUKBee&$YR7aHe(CfA-N;}WUNG0SXh^3Am)plt6!O9l<_|73VzpmHj z?Ac`J_Ws2l|MLU(xqttG*>)}7N`{#;XNJ*Eda9g$77c8h(`PxuIrGRGXU=1@=<(8H zWa<+e2_K*@$`6MF{ZW2+JokKflg>8c{K?B5o>MORzz{V<>hc|7p_{fp4;04;1Zmxg z^TK=N^whEQ&;lK<`vaMi58%St`iBf})dzbz?Ug^2Ovr)1?2snA=^b-y?C_?6BZ5=& z@*6z8G2}cUj%Uimk>eNGwum#w?kc`p4G%6UH9P_71 zjal`?#~q^YSdVM5Tjexq(SPIMHZ6FU#eJ zp0V@N-_d&}9}b-DW;8@_;w%D;1`dQ_cNC2kU+BhrzHE2;>8FPUg6_y^5O{q>VML#) z%a-OQ+qS#YzHztq6SOCG3Vij9sWwqEvZoUVoUk|1eEy8R2ZqxIKd?LS8)r^KiBS=E z=1SME_f4vc%^G_DCU7Et(ZR-gFPlTx)-}GB-k@QihjfXXY2iPPlyJZ-K!`M4+pScT@#1wY$+$2nV?YP^F7@b*9m@VHki-G{X{*oiZS*{wPO zY{NE=f!$+MMz>g3pmqNqC_LaoF0fPFfkhnma`FdvLOWxa#@7G$%wAjay!J@ zr13vEZ|#x_d}hd<^d2}AhTQ?+%0fW=1~Bt+^OmD!m?6SNWBP7ud4i{PLMJ`kV*+LL_f)|!T9IrN|CzS-B7g@k4Llesw(LxK8O zLE~#*``Vs+@4fdZIqXL?XHMgDpiCI-PM0Bg7=%!9M{tS>I4+n;g-4ar8D0#`XdcJe zhlmiaWaUMZ)!Z}ubY-k1es>2>S}u=|gAVV3RASg2ype5WoyK4-4!L8v z&`GbCICxx57;H@%s{QDH{@WHi{pTwXD#M7s^OUKYFO?COJY@>-0DD4!C$2;Mc3DI= z%fTz5Z9^M%WbKXyJ7Gza9j`Xlz4hP6&ODi(NA&dixJ!wPbG+Q5Q0%y-kcphpg$_{KQ* zU;p~o8DTRj04#d6>81?MIO7cCqOmbcbJEELX8Uwb^5wnD!JigywKHy99&mc=jG^|8 z^K}4?c&mXN)nj^8;V--@oJtSR4l!91PFoPeZG~J$vCGv z`J#!5WCS-_!>j?IqQSG)1AIXFoZr>P7oNdKuV?U~uA?~eyWG5mFBqnL<*Zn~L5DkZ z3?qi1+_V*nYo&NmC|<>;M=ezE%a_Ya^*l6dhZnR@Gw?0ZAaQW6@-8Qya^TFx_GeD2!L1&OH zaKH}IYoy`0TyxS4SO4{|f8{fs0oUjsY%LePaPmVB`JtPO{G|k(HFEB_fgf;j;44TXuZK81OOpR=E;Z&Fruxf)P%hA z3Q2ue%y00aQfc+346_sit|EEh5yBYPXhptAd)-k!b?HWs-(2p%NykN8B|}mHgRGUa zTmhWLLbBrV={(`AwIhkF83Wtku*KLo4?KG(#^nV2%7y$8Sn!N3r<_cIee}m4 ze|+eHGxYB(*eQ|oi1-E!UxJ8|wP+p()djhRGw zsqmqV^0~l?-_VHjrlG-nIf2F#J@tq_5A@EJcb*zFf0JBP#G#jM4&9j}CiIFJocd!A zJ@n8`8j@fxeV<-Bj3U4|T8gyjFnTylhTv)SM3u#1NAKiyhmBID2Hue-4rc~@lm$hn zf(J{0&nSlTs#17Up4XrA&W(-Nz1NxFD}@{7fCKmyYcvYM)#-D(3&~rlw6%;|F+8A$ zHbmb?KW_Rk`@u7E=zIEX$;Lf4eY`%enkC=}u^YJp{Ni%?aal+13I2}vJi83!gsTKt zvYx&=JFl(BmUh(JfA6WYZ|$nL*=ri@qG_D(F58(fp9AFsm$KctQYLl}hY3Bb7-xPR zhkMmkR|RL!&^wJx=DeBXrU5_?pF>=5Rtzr}8<_iMxSU09^t$N;amTJRI)EJoNB9li zludBH6F;NH%fq~qai(nxKDD2D@c9>5RayFw5T@2MZ|{PueCdo_6nPRLy)g7e5_wi0FLTLyLEm*bgl-daz` z!1TN}^)j2Kr``Sb#L8VV>SJYq((5htLqIkP4W7sCQ951lG`V1doxU?;tr}{7|BP;X zYH^c|k`uptbA!zs(r*jK_vmx0(ytUUsK00(f&-lodg(r*h%KO3NjiGS+;LLgNuig` zYI*WvGkA~l(ziMGL7RB=2dBpQ@W>GK;i%yO=Z%nt-&`(Zz;#CnK+O4*NX2_xu`nx{589&wTx!`~AMh1k zP&WuY7iIC@(@<8l?n*5?uKeKV3LF>Aba0>@qedgO7K7JSE#g)zPB`sedBurZ*?#=E zX1jk~r#-T+-F9o65+})}n@2|$^06toaDtz1Yp8qRqI+Dtb3NfXlV0GgJLJSCw)WW< zruWzhOPlOCnXk*$OaF!9W)Igl+4VlvsYh{h_>|#?VeyPJi-st^*jj8Z0X(st++X#o zS4Fez^BkqYpRo%BXvX<@pe!z6#vO3xt(qra^+LN{c*knZTc`y6{=^y6ZP-3vQA;#5 zT=&5le7K{dG-wz#rcr{u_xf|(>2$(RbQ<~;y0yQbx%2O8(d%NtsmM^f^Dll*I^+y@ zG2-(K--!6EjR_c*WKig>!%&!qW2cqq3`JOY&Q~ZRjL(2!e$iAou%Z>5U(V{Mf>+L8 z?!^Sp2mL6zw{nSxFBn5F2l()-mIHW0i_=w3Tq&axrX``V~sO?HY- zi6h*xsms=H?F^sJr1u^T@PI2{n-a~N?U_2qxx0Sw8=1q&ab@GZ*7aGtdgAj&_S#Jv ze*d$4$4C|SSCr;iL!`;#^~iZkq+C6UZdZ1To{ccjv?_( z7is(=9~ZE=oTpwMWtAgfY8u6`-CFJT#XDEp*4=7Qs2y?hnNw_*KA+pJ_~`Bi>cnxx zZc!JjR;>!ooZ)pwF`|CM@rIxHA{su)y5m$hwyCjj;1kfMH40g3C4TBF=Fq*De#|k) zJSO3|NldI$#qMpcrJ>CkhY-H_}IaA7?Gz3y4FW(`bFcsj=snrPH; z$2Vb175b8^^1q`-z-HxX;#16g-Oz`lAMX|7oDL;-p2r)(^-#}V#b(4quIPjT@RRTz4Hb!`C^UUb8!Vq$O$skYBD!^1=Cz9$}j( z-<`Y5BWZ%Al6tX7?p*cK-#<*l=c=r$chuXh>-6@blmShyk>IpWWWRs&J*Z@$JjL-G{fw49JvVDd<1Ff zohN-ypX!ezUN@;x_Vpy6D(cKBv!V`Nz4TsAk7F)f%%hi%pycIIT$o@mfyD_dM4&Pl zhG*ddl>|&eE`ddHypa$x6#0kN8H(bHS0tFKWOFCxJdGmZ{DzMxG&GV9{`#CzG)*+` zV0?xa_yLVh*I=Zh6r8E+TzXRq{A%XK9dZoplrgRL=J7h!OLqOfH8S9Pv`tSvcj%_x z(PP((YTyeFICd^{4Sakw3>=v!r!PpG`Kj>x9U@=tfTN25B4A4;x{;c z7W>8sgs; zx|~J!@gK)Dd3OdQCs#ZSu1Rbv6 z&R=MPH_$~K!Vay@S5IFpyyGqxdQy22cNq>3e$pF&$Ifqm_u{=g9KbF!k3Lie|L7_D zV3Tb7A7ALQm7Ckce5(dXUms%bs;h}_1j zgA&KwOd#qqs!=FZosVQ?+< zYinTfj->U=gdZt?;01i7A;55ZGEW_K zqwo>UyLU*Bd|P%(?(+YvxI>4e1q&9SPW1Xd$Kf$zP+oKCh5DS$IHz(e0tk8nbh^LH@OQ!1{= zL%HhE<%2Su=cVEsXZ~{09Vd>Zz=HqC`OJx07&k(_Ua9JnYxh{E_9QcujUlIAYB_)( z`k9c^KHJ^VW2cVow9k+3wI@Z-ZJl*?J&WW-L|7!3G)K@){pKUz@ClnqS+&j&%q=U{ zSp;{T7Qx;4{4RYGwa>0Td7Qm@{zT22CwkO4Yp--Z>*KQ-B|= zZ0Al7T|DiPV{g!W`tNmE&(HOn^V;*8M$S}5De+a2UJ=~O={ZLob<`8uiuTzgBl8}j zaKnS(5x8?vDL7^X9;Z&l!FX208V8W7aD*;#d-_RVHXOg(&@nyn(2+h zGn_ZPf)@v)BX|D81M1Xe!{g(;!+S2us5N=1HGJaaJM-o}8jBt?qS^joqK2O34DMgw zVLRHfztp*$gX(`U1nQ}o(KB64C7eI8-7aqJwL?YY=eO6}Z`U_!+qGyCF{E|dhJI(0 zJJMng2sr;*575%0edYiC=mz`rA2$o>I(yH{N7;p^OtU@hojOQohZat6w_V!u%(^R1 ztK&QHQF{-)&2dm^+~w1|ZGgEOVRx&odoyJJM`Jup*r4oY>U13#4+~5hIO`n!$#G2Z|I4S zmJ`R3L%TOv@CiN=;e0{&x!^-IkdO47g+gGsU3}`6f2k9U>(qIC+&@GX%~$E?syTG_ z=dlv-@WT(^sUeIHBSd1_zFf?}4VVpcvk9hG3YAA?;n&8Pm0XEKkj@cWHjwqsA?1hJ%fDFkHAq?O2OJ6oNdKC#z6Gpf)2 zCM)`*_ImqIZD-rPYkOikAt~EYq>)E&z@z)M7F;f|$8~kuwWOW++jn=^XKq_zk8aUv zp<2;?{ppkJ^kZjO%a9SFVTS$keCg=nJ+!(mrlyJJbz4C1oMC%~UM;9&o7z&1`hJ0k zYHd@a>}aUELuVTs3*_`&+-J2?@N*z129~X*;}wVib5W`E+L>o(UW8sY&YjD9+_cU- zU$ml=xCX(&p#!g093ic3@CV=M(0a7;Gd+7N9a^03Olc3)c<6Q`7blI>2ZjkAdxIfW zrs6EGP*?|gedF}>J!fmxp5<3^uDkjNOLz3xYR#i-2W?g-P$(}eot^;(-+zAL)NVVs zwclPU3xD#?OD-!j@rUXed22cqV%Pf;Uf{5I&9=k#et3&4LO}XND-qS%8>n1{Zg@{`n0qw><>Dm36`UAW$C(q)??M9f1FIZPtq?q_ zkrrOzaJd)Cw`$-UN10A@wPZIA8uErARiLLnmt$bVezkskZe3zOdZHVfH>8?N2s!d= zHcBJOAJu%iI_x%G3;w>`H`&(Ijn>!Yv?Wb*&D|QgbJ@<-TdgFKE{E73bdXL7Bd5z( ztkl%#W^2+=`|VHdvadd^`jUOR?B$2pKQ5RWrcp3)+2ogZ*fYuiex{HLgY=QP^KPAY zQm>KE8#HzMTfM93*VHoM?C~|>&=)RT*q7|3w~JAiC5MRdK>K+in48LQC#KlD!=tis zVmN0GsiD`-&^*J|YZ2J-KF2I8BU$XK)OIIpEYg)I~Z}pH=<( z)E;|O4!%tUeNOw+xArvHuoi7y)6g}#jm@BwlBu^^Za!c;Js^MJfepjnE?>Ufw6-ez z9y4aF%{g?2>Z#v8a^E&BXf!)>>JaLx*kK%>h($===90 z;w-)*uo8>p>g>2NJ@)V8y6sW99lp%=gO%F1uIH8}76c|dppV2=N)BDlC=VUuP8=O4 zK3lqE$&&Dq6c(Lv0L+vrZ8mBAD7){kTkY?EwL-|(*(BB7)&FajjnOA@J2fN`{Tym0 z24g4bndd_%`1pmL2N&h*!58TMS#|hU*2+S-D7`h~(8Z*F?c)op&~z-{dl+Vsv)u0p zy{Irm35omJE1f$|8=+@)BSZ4ubLYe$oV$PZjg}wyRkBwHZj|T4>v8kJ8wZr*Jc+xE zT7`$xCB)f4a~^Vc__aX4>s2k_QVAToyL)U{Ym*%}L&w0XclW&J(bv4tk@&P`P4&4- z7Dnm5Kbcpk7%ga5D_nL9&Aj1N=Yp=bw>2)-B3_(7|~h^E~mAGQ#o)!j_HN7@BFZd z>Y=yD3~F)Jb8B~nzPYOAfC$jhqwaX;o?Z5#sU7xGePr%s`o!v`I&|itEe$q8pKN0h z9kv4-N5H1QpHgK3Id^-66ZM`kHWWL_Q2IK3<%~`dWiz^o1LxD&JcC15SGNuUs<$N@ z_t+^nF4HKxkk$X+{QY#B*QN!`a^{>VkSow|fF5wjCpg}urFSk{-!C53V*_>jXX2G+ zzs@G{)ebe~&|$`9mt7XD+;PVp_c0B>Jf)~6F>%21Q87`5SBilcc7%+JK;?2FBn-!} zx1HWQ&%OnYQ3hI{2r;3M7GlVd;Scb9_$c2NX9iGtMY}STs|BAI5>-kh*^9ko_z7H> zrPvE75TNT6dd2gB9?)ByIX%?L`kd+!BQ>WgvhQEH+xBSBHp90ELMNTNR_C$9rl5nm#bx>kLV!#qRU=R? zLg4~Og%bx}?%a9LK1F)W^xP3zoFEP!fu?0j?;U|9ufu>Ir!O0Au(-fV$1 zTm;IBUf3xdIP>9rfD2g6KTn@N-KI{R8V>fti93uaoG=xjq4h0V)9~J3EVBponOhwC zb!Sbn*S&mPLC&1|_R)uIw4}a+7N!AY!+T|GIT3D+WadN3bd_Bsm5N-J-<9(SS&&G5 z#R+npi+k#+r`{t+_)}E~C&(qbxyi&X0I7M)`I}1i7A%6|!37z|jxz8L$4_q^$4*N$ zxtJmh;m~vUMRl$;7?`Moj?xEwU^;vn4AltGPJlLWI#>d)?s=g?I3gi$Fu49xe0W*fu&aq{a5lo;};9 zO`8_%AvVNqnZpVIl7ILVYO|dAP8}BW`P*06|7?=k@949CJ8_)--7%A7d$79^WTTmr z&)|lwq^_Z((BO2FpOx*&Db3Gl1a?<)A>3Z$UnuZ0r_XOvq0C661HWLwg1|H}@%{Rc z%WKrKn=OaeBVh4W;K?&XO9(T0X~A;Q3Iryw z=yfAJz$XrPTsVF5kp@`ARV$z%;Df?|}QyN0qNKc#C*6r zQ_^#h*JaG_QTE}?8BN&L*=wKs^>X{+Vtoo#;d3XAvv-`_W2r76fAgE)yiG## zXPv*!+(o~xa8i#GQR%z4N?p*S;M z`4770qfAb3uNIB9jcv6#nnz!(V?-ZWy~p07gIDs|232NsO9D?_BC}32&l>0qht7;> z?6(i=(3$g|Z?^ezQCFy!e$$XXn>9>RdK!YSr^l{dFffw6)6hY|iDUC{~+AGMC@JYn5I1?9MRlam7)i?6TKQ3v&W&w@aGSl-&FN z1V`%GaoP86=3h<|&Rn$hOE;U69j=chb4e_!_pS5HnD2d4(_Jiv-f`-upMLs-GJao9 zwz#^fCeSzAJ2{%B^NO&>RQ7)IG2;ILHT~TJ;#^CwLvm0bPU7QC{n3IFMx2ux2}z zd33ShZtX|kx=Z_&HIGh@aj*vHgk~;e%^NcGz;W8MhW6Pv)Kh;%jppMzt74}RE2u0jLlW6yEu>X~yQ9KXMyX@ftD9#*vv zEY2)ZAXz<}89;eQN zJ|AXBSfasylOE?yAkLMK#*2Ty7sJnmpplkF0PwjempoB;z$EzH--XDS{-7|x$H{@K zmlYHEngav9(CYjz6+!BRdaRWIedUmoTA`16Lr+oz&SZ!-I=^bFhTWgqVat=}x=$K~ zgO^_JtG21xYw|a`=$#Gfm61N;xPsh?rcR9>pD>}{u2GxveVgj+Z#t@cuAKVC6Smo| zJ=#U1)$tq;OTe))LWsS=VFSl?p5IZqi9YAU9AJfgh=d~hKzohRAUZgsHObN;l3+CP!ZTl3BwJolIId?>GQ znnjBiVfp&R;CD$lpB*=DT#E!&r#JFR+QM66aiWi4yHj@|M@Ufs9T6B5AeWH)d+sO* zf{9R~l*9p-Rxm~hr{WHt1t^q7I?|xH+&wSx1k!ND9ViFd!HMT`lo2=1#loW=kTqz< zupMZ$9%%GXGkLE)Muun`8VsA3> zG#@Tul9<{6#(*=|T81;GwAv@+%ty$Xhg0C96Z>fZlOH=ofZk#PFyNOuVSRGqP3k<+ znmHd>;$=;p*Pe~OLE+FjaOTcC?`%2aj5C(&%=ar~Q2$*OsK#}F)g3y_MTih`go*MI zqnqq;ZC!g@=enP*1z0#64qhojEz%WLwm4`^tvebqT+ofo;()nx5l^Vs0=YwmG}}jJ zblVlH)w>g%fA1J$$F_9ap~HH^{&l`yrsxp73>vi9HDK{vOaLa$aoZ}3|q z3i~+bbj2c&w9% zqEw|QR2J|x^~#MQ{Bxcaf*^U24;D?bD30wsafW>B%yB0@^@q~~uLCW3ePyBzsSm?{ zx-YzCnSJ-E?KW?Gv;Fd-IX3=~=5XeFzC0}_@4UV!!|_SIlZLuP_o+|h3n%4zj_$Kw z$8A91i9XWOQr~9}Z>h64EN`-x2>wf&`s|x8>9*k#2fo~v&Zkl~wuN#Eb?TTJjCr%Z zoOa7Y>+RD2UKhrSj~UZ!KRo|Xn>@P3+O^U>UuW*N$N2$|@(u6|{xF>>UUko%JGV)V zpW8HV{ຽ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%0DsP~>N- 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 IM6N<$g5?279{>OV literal 0 HcmV?d00001 diff --git a/v0.1.7/examples/img/bezier/bezier-acceleration-orig.png b/v0.1.7/examples/img/bezier/bezier-acceleration-orig.png new file mode 100644 index 0000000000000000000000000000000000000000..43dd0a9538f7a91b1c9525e778129e281ac92141 GIT binary patch literal 263498 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

                      Wz=y!s&Ilef=5@ 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%0DvTS*zqB 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 z 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%0A99j5Ri7_ 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�P67bnj_~_@Fnjh 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 literal 0 HcmV?d00001 diff --git a/v0.1.7/examples/index.html b/v0.1.7/examples/index.html new file mode 100644 index 0000000..0ca2406 --- /dev/null +++ b/v0.1.7/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

                      List of Examples

                      NameprovidesDocumentationComment
                      A Benchmark for Difference of Convexcontains a few simple functions
                      Bézier Curves and Minimizing their Accelerationtools Bézier curves and their acceleration📚
                      Solving Rosenbrock with Difference of ConvexDoC split of Rosenbrock📚uses a Rosenbrock based metric
                      Difference of Convex vs. Frank-Wolfeclosed-form sub solver
                      Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
                      Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
                      Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚
                      The Rayleigh Quotient$f$, $\operatorname{grad}f$ (A/I), $\operatorname{Hess}f$ (A/I), objective📚
                      Total Variation Minimization$f$, $\operatorname{prox}f$ (A/I), objective📚

                      Symbols:

                      • A Allocating variant
                      • I In-place variant
                      • 📚 link to documented functions in the documentation
                      diff --git a/v0.1.7/helpers/error_measures/index.html b/v0.1.7/helpers/error_measures/index.html new file mode 100644 index 0000000..f3a46a6 --- /dev/null +++ b/v0.1.7/helpers/error_measures/index.html @@ -0,0 +1,2 @@ + +Error measures · ManoptExamples.jl
                      diff --git a/v0.1.7/index.html b/v0.1.7/index.html new file mode 100644 index 0000000..9bc4343 --- /dev/null +++ b/v0.1.7/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

                      Welcome to ManoptExample.jl

                      This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

                      Each example usually consists of

                      • a cost function and additional objects, like the gradient or proximal maps, see objectives
                      • an example explaining how to use these, see examples

                      Helping functions that are used in one or more examples can be found in the section of functions in the menu.

                      diff --git a/v0.1.7/objectives/index.html b/v0.1.7/objectives/index.html new file mode 100644 index 0000000..f414cee --- /dev/null +++ b/v0.1.7/objectives/index.html @@ -0,0 +1,187 @@ + +Objectives · ManoptExamples.jl

                      List of Objectives defined for the Examples

                      Rayleigh Quotient on the Sphere

                      See the Rayleigh example (TODO) to see these in use.

                      ManoptExamples.RayleighQuotientCostType
                      RayleighQuotientCost

                      A functor representing the Rayleigh Quotient cost function.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either

                      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                      or extended into the embedding as

                      \[f(x) = x^{\mathrm{T}}Ax, \qquad x ∈ ℝ^n,\]

                      which is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of $𝕊^{n-1}$.

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientCost(A)

                      Create the Rayleigh cost function.

                      See also

                      RayleighQuotientGrad!!, RayleighQuotientHess!!

                      source
                      ManoptExamples.RayleighQuotientGrad!!Type
                      RayleighQuotientGrad!!

                      A functor representing the Rayleigh Quotient gradient function.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either

                      \[\operatorname{grad} f(p) = 2 Ap - 2 (p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1},\]

                      or taking the Euclidean gradient of the Rayleigh quotient on the sphere as

                      \[∇f(x) = 2Ax, \qquad x ∈ ℝ^n.\]

                      For details, see Example 3.62 of [Bou23].

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientGrad!!(A)

                      Create the Rayleigh quotient gradient function.

                      See also

                      RayleighQuotientCost, RayleighQuotientHess!!

                      source
                      ManoptExamples.RayleighQuotientHess!!Type
                      RayleighQuotientHess!!

                      A functor representing the Rayleigh Quotient Hessian.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either

                      \[\operatorname{Hess} f(p)[X] = 2 \bigl(AX - (p^{mathrm{T}}AX)p - (p^{\mathrm{T}}Ap)X\bigr),\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1}\]

                      or taking the Euclidean Hessian of the Rayleigh quotient on the sphere as

                      \[∇^2f(x)[V] = 2AV, \qquad x, V ∈ ℝ^n.\]

                      For details, see Example 5.27 of [Bou23].

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientHess!!(A)

                      Create the Rayleigh quotient Hessian function.

                      See also

                      RayleighQuotientCost, RayleighQuotientGrad!!

                      source

                      Bézier Curves

                      See the Bezier Curves example to see these in use.

                      ManoptExamples.BezierSegmentType
                      BezierSegment

                      A type to capture a Bezier segment. With $n$ points, a Bézier segment of degree $n-1$ is stored. On the Euclidean manifold, this yields a polynomial of degree $n-1$.

                      This type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.

                      Not that this can also be used to represent tangent vectors on the control points of a segment.

                      See also: de_Casteljau.

                      Constructor

                      BezierSegment(pts::AbstractVector)

                      Given an abstract vector of pts generate the corresponding Bézier segment.

                      source
                      ManoptExamples.L2_acceleration_BezierMethod
                      L2_acceleration_Bezier(M,B,pts,λ,d)

                      compute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.

                      \[\frac{λ}{2}\sum_{i=0}^{N} d_{\mathcal M}(d_i, c_B(i))^2+ +\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

                      where for this formula the pts along the curve are equispaced and denoted by $t_i$ and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by $p_i$, and to each $p_i$ corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      See also

                      grad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier

                      source
                      ManoptExamples.acceleration_BezierMethod
                      acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{P},
                      +    degrees::AbstractVector{<:Integer},
                      +    T::AbstractVector{<:AbstractFloat},
                      +) where {P}

                      compute the value of the discrete Acceleration of the composite Bezier curve

                      \[\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

                      where for this formula the pts along the curve are equispaced and denoted by $t_i$, $i=1,…,N$, and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      This acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      See also

                      grad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    T::AbstractVector,
                      +    X::AbstractVector,
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector,
                      +    X::AbstractVector,
                      +)

                      Evaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment},
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X
                      +)

                      evaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    b::BezierSegment,
                      +    t::AbstractVector,
                      +    X::AbstractVector,
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::BezierSegment,
                      +    b::BezierSegment,
                      +    t::AbstractVector,
                      +    X::AbstractVector,
                      +)

                      evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

                      See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::BezierSegment,
                      +    b::BezierSegment,
                      +    t,
                      +    η,
                      +)

                      evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t$∈[0,1]$ on the curve and a tangent vector $η∈T_{β(t)}\mathcal M$. This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.de_CasteljauMethod
                      de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function

                      return the Bézier curve $β(⋅;b_0,…,b_n): [0,1] → \mathcal M$ defined by the control points $b_0,…,b_n∈\mathcal M$, $n∈\mathbb N$, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let $γ_{a,b}(t)$ denote the shortest geodesic connecting $a,b∈\mathcal M$. Then the curve is defined by the recursion

                      \[\begin{aligned} + β(t;b_0,b_1) &= \gamma_{b_0,b_1}(t)\\ + β(t;b_0,…,b_n) &= \gamma_{β(t;b_0,…,b_{n-1}), β(t;b_1,…,b_n)}(t), +\end{aligned}\]

                      and P is the type of a point on the Manifold M.

                      de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function

                      Given a vector of Bézier segments, i.e. a vector of control points $B=\bigl( (b_{0,0},…,b_{n_0,0}),…,(b_{0,m},… b_{n_m,m}) \bigr)$, where the different segments might be of different degree(s) $n_0,…,n_m$. The resulting composite Bézier curve $c_B:[0,m] → \mathcal M$ consists of $m$ segments which are Bézier curves.

                      \[c_B(t) := + \begin{cases} + β(t; b_{0,0},…,b_{n_0,0}) & \text{ if } t ∈[0,1]\\ + β(t-i; b_{0,i},…,b_{n_i,i}) & \text{ if } + t∈(i,i+1], \quad i∈\{1,…,m-1\}. + \end{cases}\]

                      de_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)
                      +de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)
                      +de_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector
                      +de_Casteljau(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +) -> AbstractVector

                      Evaluate the Bézier curve at time t or at times t in T.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +    Ξ::AbstractVector{<:BezierSegment}
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Θ::AbstractVector{<:BezierSegment}
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +    Ξ::AbstractVector{<:BezierSegment}
                      +)

                      evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in $[0,N]$, and each depending the corresponding segment(s). Here, $N$ is the length of B. For the mutating variant the result is computed in Θ.

                      See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X::AbstractVector{<:BezierSegment}
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment}
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X::AbstractVector{<:BezierSegment}
                      +)

                      evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,N]$, which depends only on the corresponding segment. Here, $N$ is the length of B. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    b::BezierSegment,
                      +    T::AbstractVector,
                      +    X::BezierSegment,
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y,
                      +    b::BezierSegment,
                      +    T::AbstractVector,
                      +    X::BezierSegment,
                      +)

                      evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in $t∈[0,1]$. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y,
                      +    b::BezierSegment,
                      +    t,
                      +    X::BezierSegment
                      +)

                      evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,1]$. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.get_Bezier_degreeMethod
                      get_Bezier_degree(M::AbstractManifold, b::BezierSegment)

                      return the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.

                      source
                      ManoptExamples.get_Bezier_degreesMethod
                      get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})

                      return the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.

                      source
                      ManoptExamples.get_Bezier_inner_pointsMethod
                      get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )
                      +get_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)

                      returns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned

                      source
                      ManoptExamples.get_Bezier_junction_tangent_vectorsMethod
                      get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
                      +get_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)

                      returns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.

                      source
                      ManoptExamples.get_Bezier_junctionsFunction
                      get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
                      +get_Bezier_junctions(M::AbstractManifold, b::BezierSegment)

                      returns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.

                      source
                      ManoptExamples.get_Bezier_pointsFunction
                      get_Bezier_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    reduce::Symbol=:default
                      +)
                      +get_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)

                      returns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.

                      This method reduces the points depending on the optional reduce symbol

                      • :default: no reduction is performed
                      • :continuous: for a continuous function, the junction points are doubled at $b_{0,i}=b_{n_{i-1},i-1}$, so only $b_{0,i}$ is in the vector.
                      • :differentiable: for a differentiable function additionally $\log_{b_{0,i}}b_{1,i} = -\log_{b_{n_{i-1},i-1}}b_{n_{i-1}-1,i-1}$ holds. hence $b_{n_{i-1}-1,i-1}$ is omitted.

                      If only one segment is given, all points of b, b.pts, is returned.

                      source
                      ManoptExamples.get_Bezier_segmentsMethod
                      get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])

                      returns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.

                      There are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let $c=(c_1,…,c_k)$ and $d=(d_1,…,d_m)$, where $m$ denotes the number of components the composite Bézier curve consists of. Then

                      • :default: $k = m + \sum_{i=1}^m d_i$ since each component requires one point more than its degree. The points are then ordered in tuples, i.e.

                        \[B = \bigl[ [c_1,…,c_{d_1+1}], (c_{d_1+2},…,c_{d_1+d_2+2}],…, [c_{k-m+1+d_m},…,c_{k}] \bigr]\]

                      • :continuous: $k = 1+ \sum_{i=1}{m} d_i$, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.

                        \[B = \bigl[ [c_1,…,c_{d_1+1}], [c_{d_1+1},…,c_{d_1+d_2+1}],…, [c_{k-1+d_m},…,b_{k}) \bigr]\]

                      • :differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence $k = 2 - m + \sum_{i=1}{m} d_i$ and at a junction point $b_n$ with its given prior point $c_{n-1}$, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as $b = \exp_{c_n}(-\log_{c_n} c_{n-1})$ such that the assumed differentiability holds
                      source
                      ManoptExamples.grad_L2_acceleration_BezierMethod
                      grad_L2_acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{P},
                      +    degrees::AbstractVector{<:Integer},
                      +    T::AbstractVector,
                      +    λ,
                      +    d::AbstractVector{P}
                      +) where {P}

                      compute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight $λ$ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in $[0,N]$), where $N$ is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting $λ=0$ yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.

                      Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      See also

                      grad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.

                      source
                      ManoptExamples.grad_acceleration_BezierMethod
                      grad_acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector,
                      +    degrees::AbstractVector{<:Integer}
                      +    T::AbstractVector
                      +)

                      compute the gradient of the discretized acceleration of a (composite) Bézier curve $c_B(t)$ on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in $[0,N]$, where $N$ is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set $λ=0$ therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.

                      See also

                      acceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.

                      source

                      Riemannian Mean

                      See the Riemannian mean example to see these in use.

                      ManoptExamples.RiemannianMeanCostType
                      RiemannianMeanCost{P}

                      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                      \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

                      where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

                      Constructor

                      RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

                      Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

                      See also

                      RiemannianMeanGradient!!, Riemannian_mean_objective

                      source
                      ManoptExamples.RiemannianMeanGradient!!Type
                      RiemannianMeanGradient!!{P} where P

                      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                      \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

                      where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

                      This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

                      Constructors

                      RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

                      Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

                      RiemannianMeanGradient!!(
                      +    M::AbstractManifold,
                      +    data::AbstractVector{P};
                      +    initial_vector::T=zero_vector(M, first(data)),
                      +) where {P,T}

                      Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

                      See also

                      RiemannianMeanCost, Riemannian_mean_objective

                      source
                      ManoptExamples.Riemannian_mean_objectiveFunction
                      Riemannian_mean_objective(data, initial_vector=nothing, evaluation=Manopt.AllocatingEvaluation())
                      +Riemannian_mean_objective(M, data;
                      +initial_vector=zero_vector(M, first(data)),
                      +evaluation=AllocatingEvaluton()
                      +)

                      Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

                      See also

                      RiemannianMeanCost, RiemannianMeanGradient!!

                      Note

                      The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

                      Note

                      The objective is available when Manopt.jl is loaded.

                      source

                      Robust PCA

                      See the Robust PCA example to see these in use.

                      ManoptExamples.RobustPCACostType
                      RobustPCACost{D,F}

                      A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

                      \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

                      This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

                      \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

                      Note that this is a mutable struct so you can adapt the $ε$ later on.

                      Constructor

                      RobustPCACost(data::AbstractMatrix, ε=1.0)
                      +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

                      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

                      source
                      ManoptExamples.RobustPCAGrad!!Type
                      RobustPCAGrad!!{D,F}

                      A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

                      Note that this is a mutable struct so you can adapt the $ε$ later on.

                      Constructor

                      RobustPCAGrad!!(data, ε=1.0)
                      +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

                      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

                      source
                      ManoptExamples.robust_PCA_objectiveFunction
                      robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
                      +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

                      Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

                      See also

                      RobustPCACost, RobustPCAGrad!!

                      Note

                      Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the in-place variant to be used, though that keyword is used to setup the objective.

                      Note

                      The objective is available when Manopt.jl is loaded.

                      source

                      Rosenbrock Function

                      See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.

                      ManoptExamples.RosenbrockCostType
                      RosenbrockCost

                      Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                      \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

                      which means that for the 2D case, the manifold $\mathcal M$ is ignored.

                      See also 📖 Rosenbrock (with slightly different parameter naming).

                      Constructor

                      f = Rosenbrock(a,b)

                      generates the struct/function of the Rosenbrock cost.

                      source
                      ManoptExamples.RosenbrockGradient!!Type
                      RosenbrockGradient

                      Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                      \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

                      i.e. also here the manifold is ignored.

                      Constructor

                      RosenbrockGradient(a,b)

                      Functors

                      grad_f!!(M,p)
                      +grad_f!!(M, X, p)

                      evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

                      source
                      ManoptExamples.RosenbrockMetricType
                      RosenbrockMetric <: AbstractMetric

                      A metric related to the Rosenbrock problem, where the metric at a point $p∈\mathbb R^2$ is given by

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_{1}^2 & -2p_{1} \\ + -2p_{1} & 1 +\end{pmatrix},\]

                      where the $\mathrm{Rb}$ stands for Rosenbrock

                      source
                      Base.expMethod
                      q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)
                      +exp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)

                      Compute the exponential map with respect to the RosenbrockMetric.

                      \[ q = \begin{pmatrix} p_1 + X_1 \\ p_2+X_2+X_1^2\end{pmatrix}\]

                      source
                      Base.logMethod
                      X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)
                      +log!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)

                      Compute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any $j ∈ \{1,…,m\}$

                      \[X = \begin{pmatrix} + q_1 - p_1 \\ + q_2 - p_2 + (q_1 - p_1)^2 +\end{pmatrix}\]

                      source
                      Manifolds.inverse_local_metricMethod
                      inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                      Return the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                      \[G^{-1}_p = +\begin{pmatrix} + 1 & 2p_1\\ + 2p_1 & 1+4p_1^2 \\ +\end{pmatrix}.\]

                      source
                      Manifolds.local_metricMethod
                      local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                      Return the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                      \[G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix}\]

                      source
                      ManifoldsBase.change_representerMethod
                      Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)
                      +change_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)

                      Given the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.

                      this function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.

                      source
                      ManifoldsBase.innerMethod
                      inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)

                      Compute the inner product on $\mathbb R^2$ with respect to the RosenbrockMetric, i.e. for $X,Y \in T_p\mathcal M$ we have

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1\\ + -2p_1 & 1 +\end{pmatrix},\]

                      source

                      Total Variation

                      See the Total Variation example to see these in use.

                      ManoptExamples.Intrinsic_infimal_convolution_TV12Method
                      Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

                      Compute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads

                      \[E(u,v) = + \frac{1}{2}\sum_{i ∈ \mathcal G} + d_{\mathcal M}\bigl(g(\frac{1}{2},v_i,w_i),f_i\bigr) + +\alpha\bigl( β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) \bigr).\]

                      for more details see [BFPS17, BFPS18].

                      See also

                      Total_Variation, second_order_Total_Variation

                      source
                      ManoptExamples.Total_VariationFunction
                      Total_Variation(M,x [,p=2,q=1])

                      Compute the $\operatorname{TV}^p$ functional for data xon the PowerManifold manifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i$ denote the forward neighbors, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I_i = \{i+e_j, j=1,…,k\}\cap \mathcal G$. The formula reads

                      \[E^q(x) = \sum_{i ∈ \mathcal G} + \bigl( \sum_{j ∈ \mathcal I_i} d^p_{\mathcal M}(x_i,x_j) \bigr)^{q/p},\]

                      see [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.

                      See also

                      grad_Total_Variation, prox_Total_Variation, second_order_Total_Variation

                      source
                      ManoptExamples.adjoint_differential_forward_logsMethod
                      Y = adjoint_differential_forward_logs(M, p, X)
                      +adjoint_differential_forward_logs!(M, Y, p, X)

                      Compute the adjoint differential of forward_logs $F$ occurring, in the power manifold array p, the differential of the function

                      $F_i(p) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j$

                      where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$ Let $n$ be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold $\mathcal M' = \mathcal M^n$. The adjoint differential can be computed in place of Y.

                      Input

                      • M – a PowerManifold manifold
                      • p – an array of points on a manifold
                      • X – a tangent vector to from the n-fold power of p, where n is the ndims of p

                      Output

                      Y – resulting tangent vector in $T_p\mathcal M$ representing the adjoint differentials of the logs.

                      source
                      ManoptExamples.differential_forward_logsMethod
                      Y = differential_forward_logs(M, p, X)
                      +differential_forward_logs!(M, Y, p, X)

                      compute the differential of forward_logs $F$ on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function

                      \[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j, \quad i ∈ \mathcal G,\]

                      where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

                      Input

                      • M – a PowerManifold manifold
                      • p – a point.
                      • X – a tangent vector.

                      Output

                      • Y – resulting tangent vector in $T_x\mathcal N$ representing the differentials of the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.
                      source
                      ManoptExamples.forward_logsMethod
                      Y = forward_logs(M,x)
                      +forward_logs!(M, Y, x)

                      compute the forward logs $F$ (generalizing forward differences) occurring, in the power manifold array, the function

                      \[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{x_i} x_j,\quad i ∈ \mathcal G,\]

                      where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$. This can also be done in place of ξ.

                      Input

                      • M – a PowerManifold manifold
                      • x – a point.

                      Output

                      • Y – resulting tangent vector in $T_x\mathcal M$ representing the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.
                      source
                      ManoptExamples.grad_Total_VariationFunction
                      X = grad_Total_Variation(M, λ, x[, p=1])
                      +grad_Total_Variation!(M, X, λ, x[, p=1])

                      Compute the (sub)gradient $∂f$ of all forward differences occurring, in the power manifold array, i.e. of the function

                      \[f(p) = \sum_{i}\sum_{j ∈ \mathcal I_i} d^p(x_i,x_j)\]

                      where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

                      Input

                      • M – a PowerManifold manifold
                      • x – a point.

                      Output

                      • X – resulting tangent vector in $T_x\mathcal M$. The computation can also be done in place.
                      source
                      ManoptExamples.grad_Total_VariationMethod
                      X = grad_Total_Variation(M, (x,y)[, p=1])
                      +grad_Total_Variation!(M, X, (x,y)[, p=1])

                      compute the (sub) gradient of $\frac{1}{p}d^p_{\mathcal M}(x,y)$ with respect to both $x$ and $y$ (in place of X and Y).

                      source
                      ManoptExamples.grad_intrinsic_infimal_convolution_TV12Method
                      grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

                      compute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some $f ∈ \mathcal M$ on a PowerManifold manifold $\mathcal M$ this function computes the (sub)gradient of

                      \[E(u,v) = +\frac{1}{2}\sum_{i ∈ \mathcal G} d_{\mathcal M}(g(\frac{1}{2},v_i,w_i),f_i) ++ \alpha +\bigl( +β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) +\bigr),\]

                      where both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.

                      source
                      ManoptExamples.grad_second_order_Total_VariationFunction
                      Y = grad_second_order_Total_Variation(M, q[, p=1])
                      +grad_second_order_Total_Variation!(M, Y, q[, p=1])

                      computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1, q_2, q_3)$ with respect to all three components of $q∈\mathcal M^3$, where $d_2$ denotes the second order absolute difference using the mid point model, i.e. let

                      \[\mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};q_1,q_3) \text{ for some geodesic }g\bigr\}\]

                      denote the mid points between $q_1$ and $q_3$ on the manifold $\mathcal M$. Then the absolute second order difference is defined as

                      \[d_2(q_1,q_2,q_3) = \min_{c ∈ \mathcal C_{q_1,q_3}} d(c, q_2).\]

                      While the (sub)gradient with respect to $q_2$ is easy, the other two require the evaluation of an adjoint_Jacobi_field.

                      The derivation of this gradient can be found in [BBSW16].

                      source
                      ManoptExamples.grad_second_order_Total_VariationFunction
                      grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])

                      computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1,q_2,q_3)$ with respect to all $q_1,q_2,q_3$ occurring along any array dimension in the point q, where M is the corresponding PowerManifold.

                      source
                      ManoptExamples.project_collaborative_TVFunction
                      project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])
                      +project_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])

                      compute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function

                      \[F^q(x) = \sum_{i∈\mathcal G} + \Bigl( \sum_{j∈\mathcal I_i} + \sum_{k=1}^d \lVert X_{i,j}\rVert_x^p\Bigr)^\frac{q}{p},\]

                      where $\mathcal G$ is the set of indices for $x∈\mathcal M$ and $\mathcal I_i$ is the set of its forward neighbors. The computation can also be done in place of Θ.

                      This is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.

                      source
                      ManoptExamples.prox_Total_VariationFunction
                      ξ = prox_Total_Variation(M,λ,x [,p=1])

                      compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all forward differences occurring in the power manifold array, i.e. $\varphi(xi,xj) = d_{\mathcal M}^p(xi,xj)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • x – a point.

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place
                      source
                      ManoptExamples.prox_Total_VariationMethod
                      [y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])
                      +prox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])

                      Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $φ(x,y) = d_{\mathcal M}^p(x,y)$ with parameter λ. A derivation of this closed form solution is given in see [WDS14].

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • (x1,x2) – a tuple of two points,

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • (y1,y2) – resulting tuple of points of the $\operatorname{prox}_{λφ}($(x1,x2)$)$. The result can also be computed in place.
                      source
                      ManoptExamples.prox_parallel_TVFunction
                      y = prox_parallel_TV(M, λ, x [,p=1])
                      +prox_parallel_TV!(M, y, λ, x [,p=1])

                      compute the proximal maps $\operatorname{prox}_{λφ}$ of all forward differences occurring in the power manifold array, i.e. $φ(x_i,x_j) = d_{\mathcal M}^p(x_i,x_j)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

                      Input

                      • M – a PowerManifold manifold
                      • λ – a real value, parameter of the proximal map
                      • x – a point

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.

                      See also prox_Total_Variation

                      source
                      ManoptExamples.prox_second_order_Total_VariationFunction
                      (y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)
                      +prox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)

                      Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $\varphi(x_1,x_2,x_3) = d_{\mathcal M}^p(c(x_1,x_3),x_2)$ with parameter λ>0, where $c(x,z)$ denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.

                      Note that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.

                      Input

                      • M – a manifold

                      • λ – a real value, parameter of the proximal map

                      • (x1,x2,x3) – a tuple of three points

                      • p – (1) exponent of the distance of the TV term

                      Optional

                      kwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)

                      Output

                      • (y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.

                        Note

                        This function requires Manopt.jl to be loaded

                      source
                      ManoptExamples.prox_second_order_Total_VariationMethod
                      y = prox_second_order_Total_Variation(M, λ, x[, p=1])
                      +prox_second_order_Total_Variation!(M, y, λ, x[, p=1])

                      compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all centered second order differences occurring in the power manifold array, i.e. $\varphi(x_k,x_i,x_j) = d_2(x_k,x_i.x_j)$, where $k,j$ are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • x – a points.

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.
                      Note

                      This function requires Manopt.jl to be loaded

                      source
                      ManoptExamples.second_order_Total_VariationFunction
                      second_order_Total_Variation(M,x [,p=1])

                      compute the $\operatorname{TV}_2^p$ functional for data x on the PowerManifold manifoldmanifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i^{\pm}$ denote the forward and backward neighbors, respectively, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I^\pm_i = \{i\pm e_j, j=1,…,k\}\cap \mathcal I$. The formula then reads

                      \[E(x) = \sum_{i ∈ \mathcal I,\ j_1 ∈ \mathcal I^+_i,\ j_2 ∈ \mathcal I^-_i} +d^p_{\mathcal M}(c_i(x_{j_1},x_{j_2}), x_i),\]

                      where $c_i(⋅,⋅)$ denotes the mid point between its two arguments that is nearest to $x_i$, see [BBSW16] for a derivation.

                      In long function names, this might be shortened to TV2.

                      See also

                      grad_second_order_Total_Variation, prox_second_order_Total_Variation

                      source
                      ManoptExamples.second_order_Total_VariationMethod
                      second_order_Total_Variation(M,(x1,x2,x3) [,p=1])

                      Compute the $\operatorname{TV}_2^p$ functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by

                      \[ \mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};x_1,x_3) \text{ for some geodesic }g\bigr\}\]

                      the set of mid points between $x_1$ and $x_3$. Then the function reads

                      \[d_2^p(x_1,x_2,x_3) = \min_{c ∈ \mathcal C} d_{\mathcal M}(c,x_2),\]

                      see [BBSW16] for a derivation. In long function names, this might be shortened to TV2.

                      See also

                      grad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation

                      source

                      Literature

                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BFPS18]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
                      [BFPS17]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [Bou23]
                      [Cas59]
                      P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
                      [Cas63]
                      P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
                      [DMSC16]
                      J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.7/objects.inv b/v0.1.7/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..d48e06514031b87edb89e759b63ecfd18ef979b3 GIT binary patch literal 3999 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 F?Hh*u%;W$7 literal 0 HcmV?d00001 diff --git a/v0.1.7/references.bib b/v0.1.7/references.bib new file mode 100644 index 0000000..d844eb9 --- /dev/null +++ b/v0.1.7/references.bib @@ -0,0 +1,235 @@ +% +% --- A +% +@inproceedings{AkibaSanoYanaseToshihikoTakeruKoyama:2019, + title={Optuna: A Next-generation Hyperparameter Optimization Framework}, + author={Akiba, Takuya and Sano, Shotaro and Yanase, Toshihiko and Ohta, Takeru and Koyama, Masanori}, + booktitle={Proceedings of the 25th {ACM} {SIGKDD} International Conference on Knowledge Discovery and Data Mining}, + year={2019}, + doi={10.1145/3292500.3330701}, + eprint = {1907.10902}, + eprinttype = {arXiv} +} +@article{AxenBaranBergmannRzecki:2023, + AUTHOR = {Axen, Seth D. and Baran, Mateusz and Bergmann, Ronny and Rzecki, Krzysztof}, + DOI = {10.1145/3618296}, + EPRINT = {2021.08777}, + EPRINTTYPE = {arXiv}, + ISSN = {1557-7295}, + JOURNAL = {ACM Transactions on Mathematical Software}, + TITLE = {Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds}, + YEAR = {2023} +} + +% +% --- B +% +@article{Bacak:2014, + AUTHOR = {Bačák, M.}, + DOI = {10.1137/140953393}, + EPRINT = {1210.2145}, + EPRINTTYPE = {arXiv}, + JOURNAL = {SIAM Journal on Optimization}, + NUMBER = {3}, + PAGES = {1542--1566}, + TITLE = {Computing medians and means in Hadamard spaces}, + VOLUME = {24}, + YEAR = {2014} +} + +@article{BacakBergmannSteidlWeinmann:2016, + AUTHOR = {Bačák, Miroslav and Bergmann, Ronny and Steidl, Gabriele and Weinmann, Andreas}, + EPRINT = {1506.02409}, + EPRINTTYPE = {arXiv}, + YEAR = {2016}, + DOI = {10.1137/15M101988X}, + JOURNAL = {SIAM Journal on Scientific Computing}, + NUMBER = {1}, + PAGES = {A567--A597}, + TITLE = {A second order non-smooth variational model for restoring manifold-valued images}, + VOLUME = {38}, +} + +@article{BergmannFerreiraSantosSouza:2023, + AUTHOR = {Bergmann, R. and Ferreira, O. P. and Santos, E. M. and Souza, J. C. O.}, + EPRINT = {2112.05250}, + EPRINTTYPE = {arXiv}, + JOURNAL = {Preprint}, + TITLE = {The difference of convex algorithm on Hadamard manifolds}, + YEAR = {2023} +} + +@incollection{BergmannFitschenPerschSteidl:2017, + AUTHOR = {Bergmann, Ronny and Fitschen, Jan Henrik and Persch, Johannes and Steidl, Gabriele}, + EDITOR = {Lauze, François and Dong, Yiqiu and Dahl, Anders Bjorholm}, + LOCATION = {Cham}, + PUBLISHER = {Springer International Publishing}, + BOOKTITLE = {Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4--8, 2017, Proceedings}, + YEAR = {2017}, + DOI = {10.1007/978-3-319-58771-4_36}, + PAGES = {447--459}, + TITLE = {Infimal convolution coupling of first and second order differences on manifold-valued images} +} + +@article{BergmannFitschenPerschSteidl:2018, + AUTHOR = {Bergmann, Ronny and Fitschen, Jan Henrik and Persch, Johannes and Steidl, Gabriele}, + YEAR = {2018}, + DOI = {10.1007/s10851-018-0840-y}, + EPRINT = {1709.01343}, + EPRINTTYPE = {arXiv}, + JOURNAL = {Journal of Mathematical Imaging and Vision}, + NUMBER = {9}, + PAGES = {1459--1481}, + TITLE = {Priors with coupled first and second order differences for manifold-valued image processing}, + VOLUME = {60} +} + +@article{BergmannGousenbourger:2018, + AUTHOR = {Bergmann, Ronny and Gousenbourger, Pierre-Yves}, + DOI = {10.3389/fams.2018.00059}, + EPRINT = {1807.10090}, + EPRINTTYPE = {arXiv}, + JOURNAL = {Frontiers in Applied Mathematics and Statistics}, + TITLE = {A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve}, + VOLUME = {4}, + YEAR = {2018} +} + +@article{BergmannLausSteidlWeinmann:2014:1, + AUTHOR = {Bergmann, Ronny and Laus, Friederike and Steidl, Gabriele and Weinmann, Andreas}, + EPRINT = {1405.5349}, + EPRINTTYPE = {arXiv}, + DOI = {10.1137/140969993}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {4}, + PAGES = {2916--2953}, + TITLE = {Second order differences of cyclic data and applications in variational denoising}, + VOLUME = {7}, + YEAR = {2014} +} + +@article{BergmannPerschSteidl:2016, + AUTHOR = {Bergmann, Ronny and Persch, Johannes and Steidl, Gabriele}, + DOI = {10.1137/15M1052858}, + EPRINT = {1512.02814}, + EPRINTTYPE = {arXiv}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {4}, + PAGES = {901--937}, + TITLE = {A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds}, + VOLUME = {9}, + YEAR = {2016}, +} + +@book{Boumal:2023, + TITLE = {An Introduction to Optimization on Smooth Manifolds}, + AUTHOR = {Boumal, Nicolas}, + YEAR = {2023}, + MONTH = mar, + EDITION = {First}, + PUBLISHER = {Cambridge University Press}, + DOI = {10.1017/9781009166164}, + ABSTRACT = {Optimization on Riemannian manifolds-the result of smooth geometry and optimization merging into one elegant modern framework-spans many areas of science and engineering, including machine learning, computer vision, signal processing, dynamical systems and scientific computing. This text introduces the differential geometry and Riemannian geometry concepts that will help students and researchers in applied mathematics, computer science and engineering gain a firm mathematical grounding to use these tools confidently in their research. Its charts-last approach will prove more intuitive from an optimizer's viewpoint, and all definitions and theorems are motivated to build time-tested optimization algorithms. Starting from first principles, the text goes on to cover current research on topics including worst-case complexity and geodesic convexity. Readers will appreciate the tricks of the trade for conducting research and for numerical implementations sprinkled throughout the book.}, + ISBN = {978-1-00-916616-4}, + URL = {https://www.nicolasboumal.net/#book} +} + +@article{PopielNoakes:2007, + DOI = {10.1016/j.jat.2007.03.002}, + YEAR = {2007}, + MONTH = oct, + PUBLISHER = {Elsevier}, + VOLUME = {148}, + NUMBER = {2}, + PAGES = {111--127}, + AUTHOR = {Tomasz Popiel and Lyle Noakes}, + TITLE = {Bézier curves and $C^2$ interpolation in Riemannian manifolds}, + JOURNAL = {Journal of Approximation Theory} +} + +@techreport{deCasteljau:1959, + AUTHOR = {de Casteljau, Paul}, + INSTITUTION = {Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris.}, + TITLE = {Outillage methodes calcul}, + YEAR = {1959} +} + +@techreport{deCasteljau:1963, + AUTHOR = {de Casteljau, Paul}, + INSTITUTION = {Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris.}, + TITLE = {Courbes et surfaces à pôles}, + YEAR = {1963} +} + +@article{DuranMoelleSbertCremers:2016, + AUTHOR = {Duran, J. and Moeller, M. and Sbert, C. and Cremers, D.}, + DOI = {10.1137/15M102873X}, + EPRINT = {1508.01308}, + EPRINTTYPE = {arXiv}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {1}, + PAGES = {116-151}, + TITLE = {Collaborative Total Variation: A General Framework for Vectorial TV Models}, + VOLUME = {9}, + YEAR = {2016}, +} + +@article{LausNikolovaPerschSteidl:2017, + AUTHOR = {Laus, F. and Nikolova, M. and Persch, J. and Steidl, G.}, + YEAR = {2017}, + DOI = {10.1137/16M1087114}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {1}, + PAGES = {416--448}, + TITLE = {A nonlocal denoising algorithm for manifold-valued images using second order statistics}, + VOLUME = {10} +} + +@article{RudinOsherFatemi:1992, + AUTHOR = {Rudin, Leonid I. and Osher, Stanley and Fatemi, Emad}, + DOI = {10.1016/0167-2789(92)90242-f}, + ISSN = {0167-2789}, + JOURNAL = {Physica D: Nonlinear Phenomena}, + NUMBER = {1–4}, + PAGES = {259–268}, + TITLE = {Nonlinear total variation based noise removal algorithms}, + VOLUME = {60}, + YEAR = {1992} +} + +@article{SouzaOliveira:2015, + AUTHOR = {J. C. O. Souza and P. R. Oliveira}, + DOI = {10.1007/s10898-015-0282-7}, + JOURNAL = {Journal of Global Optimization}, + MONTH = feb, + NUMBER = {4}, + PAGES = {797--810}, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {63}, + TITLE = {A proximal point algorithm for DC fuctions on Hadamard manifolds}, + YEAR = {2015} +} + +@article{WeberSra:2022, + DOI = {10.1007/s10107-022-01840-5}, + YEAR = {2022}, + MONTH = jul, + PUBLISHER = {Springer Science and Business Media LLC}, + VOLUME = {199}, + NUMBER = {1-2}, + PAGES = {525--556}, + AUTHOR = {Melanie Weber and Suvrit Sra}, + TITLE = {Riemannian Optimization via Frank-Wolfe Methods}, + JOURNAL = {Mathematical Programming} +} + +@article{WeinmannDemaretStorath:2014, + AUTHOR = {Weinmann, Andreas and Demaret, Laurent and Storath, Martin}, + DOI = {10.1137/130951075}, + JOURNAL = {SIAM Journal on Imaging Sciences}, + NUMBER = {4}, + PAGES = {2226--2257}, + TITLE = {Total variation regularization for manifold-valued data}, + VOLUME = {7}, + YEAR = {2014} +} diff --git a/v0.1.7/references/index.html b/v0.1.7/references/index.html new file mode 100644 index 0000000..72e58e8 --- /dev/null +++ b/v0.1.7/references/index.html @@ -0,0 +1,2 @@ + +References · ManoptExamples.jl

                      Literature

                      [ASY+19]
                      T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.
                      [ABBR23]
                      S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
                      [Bac14]
                      M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [BFPS18]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
                      [BFPS17]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [BPS16]
                      R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
                      [Bou23]
                      [Cas59]
                      P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
                      [Cas63]
                      P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
                      [DMSC16]
                      J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
                      [LNPS17]
                      F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      [ROF92]
                      L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
                      [SO15]
                      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                      [WS22]
                      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.7/search_index.js b/v0.1.7/search_index.js new file mode 100644 index 0000000..599d86a --- /dev/null +++ b/v0.1.7/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Difference-of-Convex-Frank-Wolfe/#A-comparison-of-the-Difference-of-Convex-and-Frank-Wolfe-Algorithm","page":"Frank Wolfe comparison","title":"A comparison of the Difference of Convex and Frank Wolfe Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Ronny Bergmann 2023-11-06","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Introduction","page":"Frank Wolfe comparison","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing ManifoldsBase, Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices mathcal P(n) with the affine invariant metric. Let q_1ldotsq_m in mathcal P(n) be a set of points and mu_1ldotsmu_m be a set of weights, such that they sum to one. We consider then","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmax_pinmathcal C h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"h(p) =\nsum_j=1^m mu_j d^2(pq_i)\nquad text where \nd^2(pq_i) = operatornametrbigl(\n log^2(p^-frac12q_jp^-frac12)\nbig)\nqquadtextandqquad\nmathcal C = pin mathcal M bar Lpreceq p preceq bar U ","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"for a lower bound L and an upper bound U for the matrices in the positive definite sense A preceq B Leftrightarrow (B-A) is positive semi-definite","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"When every one of the weights mu_1 ldots mu_m are equal, this function h is known as the of the set q_1 dots q_m.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And for our example we set","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Random.seed!(42)\nn = 20\nm = 100\nM = SymmetricPositiveDefinite(n)\nq = [rand(M) for _ in 1:m];\nw = rand(m)\nw ./=sum(w)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use as lower and upper bound the arithmetic and geometric mean L and U, respectively.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )\nU = sum( wi * qi for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p0 = (L+U)/2","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can check that it is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Common-Functions","page":"Frank Wolfe comparison","title":"Common Functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Given p in mathcal M, X in T_pmathcal M on the symmetric positive definite matrices M, this method computes the closed form solution to","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_qin mathcal C langle X log_p qrangle\n = operatorname*argmin_qin mathcal C operatornametr(Slog(YqY))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"where mathcal C = q L preceq q preceq U , S = p^-12Xp^-12, and Y=p^-12.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The solution is given by Z=X^-1Qbigl( P^mathrmT-operatornamesgn(D)_+P+hatLbigr)Q^mathrmTX^-1,@ where S=QDQ^mathrmT is a diagonalization of S, hatU-hatL=P^mathrmTP with hatL=Q^mathrmTXLXQ and hatU=Q^mathrmTXUXQ, where -mboxsgn(D)_+ is the diagonal matrix","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatornamediagbigl(\n -operatornamesgn(d_11)_+ ldots -operatornamesgn(d_nn)_+\nbigr)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and D=(d_ij).","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@doc raw\"\"\"\n closed_form_solution!(M, q, L, U, p X)\n\nCompute the closeed form solution of the constraint sub problem in place of ``q``.\n\"\"\"\nfunction closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)\n # extract p^1/2 and p^{-1/2}\n (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)\n # Compute D & Q\n e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk = QDQ'\n D = Diagonal(1.0 .* (e2.values .< 0))\n Q = e2.vectors\n #println(p)\n Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q\n Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q\n P = cholesky(Hermitian(Uprime - Lprime))\n z = P.U' * D * P.U + Lprime\n copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-Difference-of-Convex-Formulation","page":"Frank Wolfe comparison","title":"The Difference of Convex Formulation","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use g(p) = iota_mathcal C(p) as the indicator funtion of the set mathcal C. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function is_pos_def(p; atol=5e-13)\n e = eigen(Symmetric(p))\n return all((e.values .+ atol) .> 0)\nend\nfunction g(p, L, U)\n return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf\nend\nh(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"So we can first check that p0 is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"g(p0,L,U) == 0.0","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"true","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Now setting","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We look for a maximum of h, where g is minimal, i.e. g(p) is zero or in other words p in mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The gradient of h can also be implemented in closed form as","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))\nfunction grad_h!(M, X, p, w, q)\n Y = copy(M, p, X)\n zero_vector!(M, X, p)\n for (wi, qi) in zip(w,q)\n log!(M, Y, p, qi)\n Y .*= - 2.0*wi\n X .+= Y\n end\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can further define the cost, which will just be +infty outside of mathcal C. We define","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_dc(M, p) = g(p, L, U) - h(M, p, w, q)\ngrad_h!(M, X, p) = grad_h!(M, X, p, w, q)\nfunction grad_f_dc!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Here we can omit the gradient of g in the definition of operatornamegrad f, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As the last step, we can provide the closed form solver for the DC sub problem given at iteration k by","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pin mathcal C\n biglangle -operatornamegrad h(p^(k)) exp^-1_p^(k)pbigrangle","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Which we con compute","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution!(M, q, p, X)\n closed_form_solution!(M, q, L, U, p, -X)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For safety, we might want to avoid ending up at the boundary of mathcal C. That is we reduce the distance we walk towards the solution q a bit.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution_safe!(M, q, p, X)\n p_last = copy(M,p) # since p=q might be in place\n closed_form_solution!(M, q, L, U, p, -X)\n q_orig = copy(M,q) # since we do the following in place of q\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n s = 1.0\n d = distance(M, p_last, q_orig);\n # if we are close to zero, we reduce faster.\n α = d < 1/(n^2) ? 0.66 : 0.9995;\n i=0\n while (a < 0) || (b < 0)\n s *= α\n shortest_geodesic!(M, q, p_last, q_orig, s)\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n #println(\"$i a: $a, b = $b with s=$s\")\n i=i+1\n if (i>100) # safety fallback\n #@warn \" $i steps where not enough $s ($α)\\n$a $b\\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs\"\n qe = eigen(q)\n if a < 0\n qe.values .+= min(1e-8, n*abs(min(a,b)))\n else\n qe.values .-= min(1e-8, n*abs(min(a,b)))\n end\n q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n return q\n end\n end\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-DoC-solver-run","page":"Frank Wolfe comparison","title":"The DoC solver run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s compare both methods when they have the same stopping criteria","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;\n gradient=grad_f_dc!,\n sub_problem=dc_sub_solution_safe!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(300) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 30, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(p): -0.77661458292831\nAt iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.\n 16.161776 seconds (17.17 M allocations: 1.670 GiB, 1.83% gc time, 93.45% compilation time)\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 23 iterations\n\n## Parameters\n* sub solver state:\n | InplaceEvaluation()\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 300: not reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 30]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s extract the final point and look at its cost","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_dc = get_solver_result(state1_dc);\nf_dc(M, p1_dc)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.784425242474807","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (1.1886583723800445e-12, 0.06669240322431051)\n (1.3411042178831775e-5, 0.0671353506908023)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For the statistics we extract the recordings from the state","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Define-the-Frank-Wolfe-functions","page":"Frank Wolfe comparison","title":"Define the Frank-Wolfe functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For Frank wolfe, the cost is just defined as -h(p) but the minimisation is constraint to mathcal C, which is enfored by the oracle.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_fw(M, p) = -h(M, p, w, q)\nfunction grad_f_fw!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend\noracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-FW-Solver-Run","page":"Frank Wolfe comparison","title":"The FW Solver Run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Similarly we can run the Frank-Wolfe algorithm with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;\n sub_problem=oracle_fw!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(10^4) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), :Cost, (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 2*10^3, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial f(x): -0.776615\n# 2000 f(x): -0.784420 |Δp|: 0.04611942377596 |grad f(p)|: 0.17693408 |Δgrad f(p)|: 0.17555618\n# 4000 f(x): -0.784421 |Δp|: 0.00372201632005 |grad f(p)|: 0.17694619 |Δgrad f(p)|: 0.00749427\n# 6000 f(x): -0.784422 |Δp|: 0.00205683506784 |grad f(p)|: 0.17695204 |Δgrad f(p)|: 0.00414088\n# 8000 f(x): -0.784422 |Δp|: 0.00140675676260 |grad f(p)|: 0.17695565 |Δgrad f(p)|: 0.00283200\n# 10000 f(x): -0.784422 |Δp|: 0.00106177438611 |grad f(p)|: 0.17695815 |Δgrad f(p)|: 0.00213746\nThe algorithm reached its maximal number of iterations (10000).\n152.781466 seconds (55.53 M allocations: 94.006 GiB, 2.12% gc time, 0.57% compilation time)\n\n# Solver state for `Manopt.jl`s Frank Wolfe Method\nAfter 10000 iterations\n\n## Parameters\n* inverse retraction method: LogarithmicInverseRetraction()\n* retraction method: ExponentialRetraction()\n* sub solver state:\n | InplaceEvaluation()\n\n## Stepsize\nDecreasingStepsize(; length=2.0, factor=1.0, subtrahend=0.0, shift=2)\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 10000: reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"f(x): %f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 2000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we take a look at this result as well","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_fw = get_solver_result(state1_fw);\nf_dc(M, p1_fw)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844220281765162","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And its feasibility","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.904818928410655e-10, 0.06659173821656107)\n (3.245654983213335e-5, 0.06713970236096602)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Statistics","page":"Frank Wolfe comparison","title":"Statistics","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We extract the recorded values","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"# DoC\niter1_dc = get_record(state1_dc, :Iteration, :Iteration)\npk_dc = get_record(state1_dc,:Iteration,:Iterate)\ncosts1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))\ndc_min = minimum(costs1_dc)\n# FW\niter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]\npk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]\ncosts1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x_k)-f^*$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-8, 10^-2),\n xaxis=:log,\n xlims=(1,10^4),\n)\nplot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label=\"Difference of Convex\")\nplot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label=\"Frank-Wolfe\")","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Literature","page":"Frank Wolfe comparison","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\n","category":"page"},{"location":"references/#Literature","page":"References","title":"Literature","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.\n\n\n\nS. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nM. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-of-the-Difference-of-Convex-Algorithms","page":"A Benchmark","title":"Benchmark of the Difference of Convex Algorithms","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Introduction","page":"A Benchmark","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where ghcolon mathcal M to mathbb R are geodesically convex function on the Riemannian manifold mathcal M.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#The-DC-Problem","page":"A Benchmark","title":"The DC Problem","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We start with defining the two convex functions gh and their gradients as well as the DC problem f and its gradient for the problem","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":" operatorname*argmin_pinmathcal M bigl( logbigr(det(p)bigr)bigr)^4 - bigl(log det(p) bigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where the critical points obtain a functional value of -frac14.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where mathcal M is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We first define the corresponding functions","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"g(M, p) = log(det(p))^4\nh(M, p) = log(det(p))^2\nf(M, p) = g(M, p) - h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and their gradients","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"grad_g(M, p) = 4 * (log(det(p)))^3 * p\ngrad_h(M, p) = 2 * log(det(p)) * p\ngrad_f(M, p) = grad_g(M, p) - grad_h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which we can use to verify that the gradients of g and h are correct. We use for that","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"n = 6\nM = SymmetricPositiveDefinite(n)\np0 = log(n) * Matrix{Float64}(I, n, n);\nX0 = 1 / n * Matrix{Float64}(I, n, n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"to tall both checks","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, g, grad_g, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, h, grad_h, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which both pass the test. We continue to define their inplace variants","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"function grad_g!(M, X, p)\n copyto!(M, X, p)\n X .*= 4 * (log(det(p)))^3\n return X\nend\nfunction grad_h!(M, X, p)\n copyto!(M, X, p)\n X .*= 2 * (log(det(p)))\n return X\nend\nfunction grad_f!(M, X, p)\n grad_g!(M, X, p)\n Y = copy(M, p, X)\n grad_h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And compare times for both algorithms, with a bit of debug output.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dca = difference_of_convex_algorithm(\n M,\n f,\n g,\n grad_h!,\n p0;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n (:GradientNorm, \" |grad_f(p)|: %1.9f\"),\n (:Change, \" |δp|: %1.9f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470\n# 5 f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127\n# 10 f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103\n# 15 f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011\nThe algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.\n 3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The cost is","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dca)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25000000000000006","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Similarly the DCPPA performs","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dcppa = difference_of_convex_proximal_point(\n M,\n grad_h!,\n p0;\n g=g,\n grad_g=grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n \" \",\n (:GradientNorm, \"|grad_f(p)|: %1.10f\"),\n (:Change, \"|δp|: %1.10f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470 \n# 5 f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692\n# 10 f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316\n# 15 f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968\n# 25 f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530\n# 30 f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048\n# 35 f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001\nThe algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.\n 1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dcppa)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-I:-Time-comparison","page":"A Benchmark","title":"Benchmark I: Time comparison","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()\ndcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()\nN_max=14\nN = 2:N_max","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and run a benchmark for both algorithms","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"for n in N\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I, n, n)\n bdca = @benchmark difference_of_convex_algorithm(\n $Mn,\n $f,\n $g,\n $grad_h!,\n $pn;\n grad_g=$grad_g!,\n gradient=$grad_f!,\n evaluation=InplaceEvaluation(),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dca_benchmarks[n] = bdca\n bdcppa = @benchmark difference_of_convex_proximal_point(\n $Mn,\n $grad_h!,\n $pn;\n g=$g,\n grad_g=$grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dcppa_benchmarks[n] = bdcppa\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]\ndca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]\ndcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Time (sec.)\")\nplot!(dims, dca_times; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims, dcppa_times; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-II:-Iterations-and-cost.","page":"A Benchmark","title":"Benchmark II: Iterations and cost.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"N2 = [5,10,20,40,80]\ndims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]\ndca_iterations = Dict{Int,Int}()\ndca_costs = Dict{Int,Vector{Float64}}()\ndcppa_iterations = Dict{Int,Int}()\ndcppa_costs = Dict{Int,Vector{Float64}}()","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time for n in N2\n println(n)\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I,n,n);\n @time dca_st = difference_of_convex_algorithm(\n Mn, f, g, grad_h!, pn;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation = InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dca_costs[n] = get_record(dca_st, :Iteration, :Cost)\n dca_iterations[n] = length(dca_costs[n])\n @time dcppa_st = difference_of_convex_proximal_point(\n Mn, grad_h!, pn;\n g=g,\n grad_g=grad_g!,\n λ = i -> 1/(2*n),\n cost = f,\n gradient= grad_f!,\n evaluation = InplaceEvaluation(),\n stepsize = ConstantStepsize(1.0),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)\n dcppa_iterations[n] = length(dcppa_costs[n])\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The iterations are like","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Iterations\")\nplot!(dims2, [values(dca_iterations)...]; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims2, [values(dcppa_iterations)...]; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And for the developtment of the cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where we can see that the DCA needs less iterations than the DCPPA.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Literature","page":"A Benchmark","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\n","category":"page"},{"location":"objectives/#List-of-Objectives-defined-for-the-Examples","page":"Objectives","title":"List of Objectives defined for the Examples","text":"","category":"section"},{"location":"objectives/#Rayleigh","page":"Objectives","title":"Rayleigh Quotient on the Sphere","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rayleigh example (TODO) to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RayleighQuotient.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RayleighQuotientCost","page":"Objectives","title":"ManoptExamples.RayleighQuotientCost","text":"RayleighQuotientCost\n\nA functor representing the Rayleigh Quotient cost function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either\n\nf(p) = p^mathrmTApqquad p 𝕊^n-1\n\nor extended into the embedding as\n\nf(x) = x^mathrmTAx qquad x ℝ^n\n\nwhich is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of 𝕊^n-1.\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientCost(A)\n\nCreate the Rayleigh cost function.\n\nSee also\n\nRayleighQuotientGrad!!, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientGrad!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientGrad!!","text":"RayleighQuotientGrad!!\n\nA functor representing the Rayleigh Quotient gradient function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either\n\noperatornamegrad f(p) = 2 Ap - 2 (p^mathrmTAp)*pqquad p 𝕊^n-1\n\nor taking the Euclidean gradient of the Rayleigh quotient on the sphere as\n\nf(x) = 2Ax qquad x ℝ^n\n\nFor details, see Example 3.62 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientGrad!!(A)\n\nCreate the Rayleigh quotient gradient function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientHess!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientHess!!","text":"RayleighQuotientHess!!\n\nA functor representing the Rayleigh Quotient Hessian.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either\n\noperatornameHess f(p)X = 2 bigl(AX - (p^mathrmTAX)p - (p^mathrmTAp)Xbigr)qquad p 𝕊^n-1 X in T_p𝕊^n-1\n\nor taking the Euclidean Hessian of the Rayleigh quotient on the sphere as\n\n^2f(x)V = 2AV qquad x V ℝ^n\n\nFor details, see Example 5.27 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientHess!!(A)\n\nCreate the Rayleigh quotient Hessian function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientGrad!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#BezierCurves","page":"Objectives","title":"Bézier Curves","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Bezier Curves example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/BezierCurves.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.BezierSegment","page":"Objectives","title":"ManoptExamples.BezierSegment","text":"BezierSegment\n\nA type to capture a Bezier segment. With n points, a Bézier segment of degree n-1 is stored. On the Euclidean manifold, this yields a polynomial of degree n-1.\n\nThis type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.\n\nNot that this can also be used to represent tangent vectors on the control points of a segment.\n\nSee also: de_Casteljau.\n\nConstructor\n\nBezierSegment(pts::AbstractVector)\n\nGiven an abstract vector of pts generate the corresponding Bézier segment.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}, AbstractFloat, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.L2_acceleration_Bezier","text":"L2_acceleration_Bezier(M,B,pts,λ,d)\n\ncompute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.\n\nfracλ2sum_i=0^N d_mathcal M(d_i c_B(i))^2+\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i and d_2 refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by p_i, and to each p_i corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}}} where P","page":"Objectives","title":"ManoptExamples.acceleration_Bezier","text":"acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector{<:AbstractFloat},\n) where {P}\n\ncompute the value of the discrete Acceleration of the composite Bezier curve\n\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i, i=1N, and d_2 refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nThis acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n T::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n T::AbstractVector,\n X::AbstractVector,\n)\n\nEvaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\n\nevaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t,\n η,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t01 on the curve and a tangent vector ηT_β(t)mathcal M. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.de_Casteljau-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any}}","page":"Objectives","title":"ManoptExamples.de_Casteljau","text":"de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function\n\nreturn the Bézier curve β(b_0b_n) 01 mathcal M defined by the control points b_0b_nmathcal M, nmathbb N, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let γ_ab(t) denote the shortest geodesic connecting abmathcal M. Then the curve is defined by the recursion\n\nbeginaligned\n β(tb_0b_1) = gamma_b_0b_1(t)\n β(tb_0b_n) = gamma_β(tb_0b_n-1) β(tb_1b_n)(t)\nendaligned\n\nand P is the type of a point on the Manifold M.\n\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function\n\nGiven a vector of Bézier segments, i.e. a vector of control points B=bigl( (b_00b_n_00)(b_0m b_n_mm) bigr), where the different segments might be of different degree(s) n_0n_m. The resulting composite Bézier curve c_B0m mathcal M consists of m segments which are Bézier curves.\n\nc_B(t) =\n begincases\n β(t b_00b_n_00) text if t 01\n β(t-i b_0ib_n_ii) text if \n t(ii+1 quad i1m-1\n endcases\n\nde_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)\nde_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector\nde_Casteljau(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n) -> AbstractVector\n\nEvaluate the Bézier curve at time t or at times t in T.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Θ::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in 0N, and each depending the corresponding segment(s). Here, N is the length of B. For the mutating variant the result is computed in Θ.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t0N, which depends only on the corresponding segment. Here, N is the length of B. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n t,\n X::BezierSegment\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degree-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.get_Bezier_degree","text":"get_Bezier_degree(M::AbstractManifold, b::BezierSegment)\n\nreturn the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degrees-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_degrees","text":"get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\n\nreturn the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_inner_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_inner_points","text":"get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )\nget_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)\n\nreturns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junction_tangent_vectors-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_junction_tangent_vectors","text":"get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)\n\nreturns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junctions","page":"Objectives","title":"ManoptExamples.get_Bezier_junctions","text":"get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junctions(M::AbstractManifold, b::BezierSegment)\n\nreturns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_points","page":"Objectives","title":"ManoptExamples.get_Bezier_points","text":"get_Bezier_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n reduce::Symbol=:default\n)\nget_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)\n\nreturns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.\n\nThis method reduces the points depending on the optional reduce symbol\n\n:default: no reduction is performed\n:continuous: for a continuous function, the junction points are doubled at b_0i=b_n_i-1i-1, so only b_0i is in the vector.\n:differentiable: for a differentiable function additionally log_b_0ib_1i = -log_b_n_i-1i-1b_n_i-1-1i-1 holds. hence b_n_i-1-1i-1 is omitted.\n\nIf only one segment is given, all points of b, b.pts, is returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_segments-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any, Symbol}} where P","page":"Objectives","title":"ManoptExamples.get_Bezier_segments","text":"get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])\n\nreturns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.\n\nThere are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let c=(c_1c_k) and d=(d_1d_m), where m denotes the number of components the composite Bézier curve consists of. Then\n\n:default: k = m + sum_i=1^m d_i since each component requires one point more than its degree. The points are then ordered in tuples, i.e.\nB = bigl c_1c_d_1+1 (c_d_1+2c_d_1+d_2+2 c_k-m+1+d_mc_k bigr\n:continuous: k = 1+ sum_i=1m d_i, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.\nB = bigl c_1c_d_1+1 c_d_1+1c_d_1+d_2+1 c_k-1+d_mb_k) bigr\n:differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence k = 2 - m + sum_i=1m d_i and at a junction point b_n with its given prior point c_n-1, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as b = exp_c_n(-log_c_n c_n-1) such that the assumed differentiability holds\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector, Any, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.grad_L2_acceleration_Bezier","text":"grad_L2_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector,\n λ,\n d::AbstractVector{P}\n) where {P}\n\ncompute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight λ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in 0N), where N is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting λ=0 yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.\n\nNote that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_acceleration_Bezier-Tuple{ManifoldsBase.AbstractManifold, AbstractVector, AbstractVector{<:Integer}, AbstractVector}","page":"Objectives","title":"ManoptExamples.grad_acceleration_Bezier","text":"grad_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector,\n degrees::AbstractVector{<:Integer}\n T::AbstractVector\n)\n\ncompute the gradient of the discretized acceleration of a (composite) Bézier curve c_B(t) on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in 0N, where N is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set λ=0 therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.\n\nSee also\n\nacceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=Manopt.AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\nnote: Note\n\n\nThe objective is available when Manopt.jl is loaded.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the in-place variant to be used, though that keyword is used to setup the objective.\n\nnote: Note\n\n\nThe objective is available when Manopt.jl is loaded.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also 📖 Rosenbrock (with slightly different parameter naming).\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\ngrad_f!!(M,p)\ngrad_f!!(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockMetric","page":"Objectives","title":"ManoptExamples.RosenbrockMetric","text":"RosenbrockMetric <: AbstractMetric\n\nA metric related to the Rosenbrock problem, where the metric at a point pmathbb R^2 is given by\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\nwhere the mathrmRb stands for Rosenbrock\n\n\n\n\n\n","category":"type"},{"location":"objectives/#Base.exp-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Number}","page":"Objectives","title":"Base.exp","text":"q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)\nexp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)\n\nCompute the exponential map with respect to the RosenbrockMetric.\n\n q = beginpmatrix p_1 + X_1 p_2+X_2+X_1^2endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Base.log-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any}","page":"Objectives","title":"Base.log","text":"X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)\nlog!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)\n\nCompute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any j 1m\n\nX = beginpmatrix\n q_1 - p_1 \n q_2 - p_2 + (q_1 - p_1)^2\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.inverse_local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.inverse_local_metric","text":"inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG^-1_p =\nbeginpmatrix\n 1 2p_1\n 2p_1 1+4p_1^2 \nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.local_metric","text":"local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.change_representer-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, ManifoldsBase.EuclideanMetric, Any, Any}","page":"Objectives","title":"ManifoldsBase.change_representer","text":"Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)\nchange_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)\n\nGiven the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.\n\nthis function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.inner-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Any}","page":"Objectives","title":"ManifoldsBase.inner","text":"inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)\n\nCompute the inner product on mathbb R^2 with respect to the RosenbrockMetric, i.e. for XY in T_pmathcal M we have\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1\n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\nnote: Note\n\n\nThe objective is available when Manopt.jl is loaded.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Total-Variation","page":"Objectives","title":"Total Variation","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Total Variation example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/TotalVariation.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.Intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.Intrinsic_infimal_convolution_TV12","text":"Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\nCompute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads\n\nE(uv) =\n frac12sum_i mathcal G\n d_mathcal Mbigl(g(frac12v_iw_i)f_ibigr)\n +alphabigl( βmathrmTV(v) + (1-β)mathrmTV_2(w) bigr)\n\nfor more details see [BFPS17, BFPS18].\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation-NTuple{4, Any}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation","text":"L2_Total_Variation(M, p_data, α, p)\n\ncompute the ℓ^2-TV functional on the PowerManifold M for given (fixed) data p_data (on M), a nonnegative weight α, and evaluated at p (on M), i.e.\n\nE(p) = d_mathcal M^2(fp) + alpha operatornameTV(p)\n\nSee also\n\nTotal_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation_1_2-Tuple{ManifoldsBase.PowerManifold, Vararg{Any, 4}}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation_1_2","text":"L2_Total_Variation_1_2(M, f, α, β, x)\n\ncompute the ℓ^2-TV-TV2 functional on the PowerManifold manifold M for given (fixed) data f (on M), nonnegative weight α, β, and evaluated at x (on M), i.e.\n\nE(x) = d_mathcal M^2(fx) + alphaoperatornameTV(x)\n + βoperatornameTV_2(x)\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_second_order_Total_Variation-Tuple{ManifoldsBase.PowerManifold, Any, Any, Any}","page":"Objectives","title":"ManoptExamples.L2_second_order_Total_Variation","text":"L2_second_order_Total_Variation(M, f, β, x)\n\ncompute the ℓ^2-TV2 functional on the PowerManifold manifold M for given data f, nonnegative parameter β, and evaluated at x, i.e.\n\nE(x) = d_mathcal M^2(fx) + βoperatornameTV_2(x)\n\nas used in [BBSW16].\n\nSee also\n\nsecond_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Total_Variation","page":"Objectives","title":"ManoptExamples.Total_Variation","text":"Total_Variation(M,x [,p=2,q=1])\n\nCompute the operatornameTV^p functional for data xon the PowerManifold manifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i denote the forward neighbors, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I_i = i+e_j j=1kcap mathcal G. The formula reads\n\nE^q(x) = sum_i mathcal G\n bigl( sum_j mathcal I_i d^p_mathcal M(x_ix_j) bigr)^qp\n\nsee [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.\n\nSee also\n\ngrad_Total_Variation, prox_Total_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.adjoint_differential_forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.adjoint_differential_forward_logs","text":"Y = adjoint_differential_forward_logs(M, p, X)\nadjoint_differential_forward_logs!(M, Y, p, X)\n\nCompute the adjoint differential of forward_logs F occurring, in the power manifold array p, the differential of the function\n\nF_i(p) = sum_j mathcal I_i log_p_i p_j\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i Let n be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold mathcal M = mathcal M^n. The adjoint differential can be computed in place of Y.\n\nInput\n\nM – a PowerManifold manifold\np – an array of points on a manifold\nX – a tangent vector to from the n-fold power of p, where n is the ndims of p\n\nOutput\n\nY – resulting tangent vector in T_pmathcal M representing the adjoint differentials of the logs.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_forward_logs-Tuple{ManifoldsBase.PowerManifold, Any, Any}","page":"Objectives","title":"ManoptExamples.differential_forward_logs","text":"Y = differential_forward_logs(M, p, X)\ndifferential_forward_logs!(M, Y, p, X)\n\ncompute the differential of forward_logs F on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function\n\nF_i(x) = sum_j mathcal I_i log_p_i p_j quad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\np – a point.\nX – a tangent vector.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal N representing the differentials of the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.forward_logs","text":"Y = forward_logs(M,x)\nforward_logs!(M, Y, x)\n\ncompute the forward logs F (generalizing forward differences) occurring, in the power manifold array, the function\n\nF_i(x) = sum_j mathcal I_i log_x_i x_jquad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i. This can also be done in place of ξ.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal M representing the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, λ, x[, p=1])\ngrad_Total_Variation!(M, X, λ, x[, p=1])\n\nCompute the (sub)gradient f of all forward differences occurring, in the power manifold array, i.e. of the function\n\nf(p) = sum_isum_j mathcal I_i d^p(x_ix_j)\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nX – resulting tangent vector in T_xmathcal M. The computation can also be done in place.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}, Any}} where T","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, (x,y)[, p=1])\ngrad_Total_Variation!(M, X, (x,y)[, p=1])\n\ncompute the (sub) gradient of frac1pd^p_mathcal M(xy) with respect to both x and y (in place of X and Y).\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.grad_intrinsic_infimal_convolution_TV12","text":"grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\ncompute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some f mathcal M on a PowerManifold manifold mathcal M this function computes the (sub)gradient of\n\nE(uv) =\nfrac12sum_i mathcal G d_mathcal M(g(frac12v_iw_i)f_i)\n+ alpha\nbigl(\nβmathrmTV(v) + (1-β)mathrmTV_2(w)\nbigr)\n\nwhere both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"Y = grad_second_order_Total_Variation(M, q[, p=1])\ngrad_second_order_Total_Variation!(M, Y, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1 q_2 q_3) with respect to all three components of qmathcal M^3, where d_2 denotes the second order absolute difference using the mid point model, i.e. let\n\nmathcal C = bigl c mathcal M g(tfrac12q_1q_3) text for some geodesic gbigr\n\ndenote the mid points between q_1 and q_3 on the manifold mathcal M. Then the absolute second order difference is defined as\n\nd_2(q_1q_2q_3) = min_c mathcal C_q_1q_3 d(c q_2)\n\nWhile the (sub)gradient with respect to q_2 is easy, the other two require the evaluation of an adjoint_Jacobi_field.\n\nThe derivation of this gradient can be found in [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation-2","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1q_2q_3) with respect to all q_1q_2q_3 occurring along any array dimension in the point q, where M is the corresponding PowerManifold.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.project_collaborative_TV","page":"Objectives","title":"ManoptExamples.project_collaborative_TV","text":"project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])\nproject_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])\n\ncompute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function\n\nF^q(x) = sum_imathcal G\n Bigl( sum_jmathcal I_i\n sum_k=1^d lVert X_ijrVert_x^pBigr)^fracqp\n\nwhere mathcal G is the set of indices for xmathcal M and mathcal I_i is the set of its forward neighbors. The computation can also be done in place of Θ.\n\nThis is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"ξ = prox_Total_Variation(M,λ,x [,p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all forward differences occurring in the power manifold array, i.e. varphi(xixj) = d_mathcal M^p(xixj) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a point.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}, Int64}} where T","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"[y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])\nprox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])\n\nCompute the proximal map operatornameprox_λvarphi of φ(xy) = d_mathcal M^p(xy) with parameter λ. A derivation of this closed form solution is given in see [WDS14].\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\n(x1,x2) – a tuple of two points,\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\n(y1,y2) – resulting tuple of points of the operatornameprox_λφ((x1,x2)). The result can also be computed in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.prox_parallel_TV","page":"Objectives","title":"ManoptExamples.prox_parallel_TV","text":"y = prox_parallel_TV(M, λ, x [,p=1])\nprox_parallel_TV!(M, y, λ, x [,p=1])\n\ncompute the proximal maps operatornameprox_λφ of all forward differences occurring in the power manifold array, i.e. φ(x_ix_j) = d_mathcal M^p(x_ix_j) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a PowerManifold manifold\nλ – a real value, parameter of the proximal map\nx – a point\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.\n\nSee also prox_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"(y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)\nprox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)\n\nCompute the proximal map operatornameprox_λvarphi of varphi(x_1x_2x_3) = d_mathcal M^p(c(x_1x_3)x_2) with parameter λ>0, where c(xz) denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.\n\nNote that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.\n\nInput\n\nM – a manifold\nλ – a real value, parameter of the proximal map\n(x1,x2,x3) – a tuple of three points\np – (1) exponent of the distance of the TV term\n\nOptional\n\nkwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)\n\nOutput\n\n(y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.\nnote: Note\n\nThis function requires Manopt.jl to be loaded\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation-Union{Tuple{T}, Tuple{N}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any, Int64}} where {N, T}","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"y = prox_second_order_Total_Variation(M, λ, x[, p=1])\nprox_second_order_Total_Variation!(M, y, λ, x[, p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all centered second order differences occurring in the power manifold array, i.e. varphi(x_kx_ix_j) = d_2(x_kx_ix_j), where kj are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a points.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.\n\nnote: Note\nThis function requires Manopt.jl to be loaded\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,x [,p=1])\n\ncompute the operatornameTV_2^p functional for data x on the PowerManifold manifoldmanifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i^pm denote the forward and backward neighbors, respectively, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I^pm_i = ipm e_j j=1kcap mathcal I. The formula then reads\n\nE(x) = sum_i mathcal I j_1 mathcal I^+_i j_2 mathcal I^-_i\nd^p_mathcal M(c_i(x_j_1x_j_2) x_i)\n\nwhere c_i() denotes the mid point between its two arguments that is nearest to x_i, see [BBSW16] for a derivation.\n\nIn long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation-Union{Tuple{T}, Tuple{MT}, Tuple{MT, Tuple{T, T, T}}, Tuple{MT, Tuple{T, T, T}, Any}} where {MT<:ManifoldsBase.AbstractManifold, T}","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,(x1,x2,x3) [,p=1])\n\nCompute the operatornameTV_2^p functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by\n\n mathcal C = bigl c mathcal M g(tfrac12x_1x_3) text for some geodesic gbigr\n\nthe set of mid points between x_1 and x_3. Then the function reads\n\nd_2^p(x_1x_2x_3) = min_c mathcal C d_mathcal M(cx_2)\n\nsee [BBSW16] for a derivation. In long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Literature","page":"Objectives","title":"Literature","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/HyperparameterOptimization/#Hyperparameter-optimization","page":"Hyperparameter optimziation","title":"Hyperparameter optimization","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Mateusz Baran 2024-08-03","category":"page"},{"location":"examples/HyperparameterOptimization/#Introduction","page":"Hyperparameter optimziation","title":"Introduction","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"This example shows how to automatically select the best values of hyperparameters of optimization procedures such as retraction, vector transport, size of memory in L-BFGS or line search coefficients. Hyperparameter optimization relies on the Optuna [ASY+19] Python library because it is much more advanced than similar Julia projects, offering Bayesian optimization with conditional hyperparameters and early stopping.","category":"page"},{"location":"examples/HyperparameterOptimization/#General-definitions","page":"Hyperparameter optimziation","title":"General definitions","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Here are some general definitions that you will most likely be able to directly use for your problem without any changes. Just remember to install optuna, for example using CondaPkg Julia library.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"using Manifolds, Manopt\nusing PythonCall\nusing BenchmarkTools\nusing LineSearches\n\n# This script requires optuna to be available through PythonCall\n# You can install it for example using\n# using CondaPkg\n# ]conda add optuna\n\noptuna = pyimport(\"optuna\")\n\nnorm_inf(M::AbstractManifold, p, X) = norm(X, Inf)\n\n# TTsuggest_ structs collect data from a calibrating optimization run\n# that is handled by compute_pruning_losses function\n\nstruct TTsuggest_int\n suggestions::Dict{String,Int}\nend\nfunction (s::TTsuggest_int)(name::String, a, b)\n return s.suggestions[name]\nend\nstruct TTsuggest_float\n suggestions::Dict{String,Float64}\nend\nfunction (s::TTsuggest_float)(name::String, a, b; log::Bool=false)\n return s.suggestions[name]\nend\nstruct TTsuggest_categorical\n suggestions::Dict{String,Any}\nend\nfunction (s::TTsuggest_categorical)(name::String, vals)\n return s.suggestions[name]\nend\nstruct TTreport\n reported_vals::Vector{Float64}\nend\nfunction (r::TTreport)(val, i)\n return push!(r.reported_vals, val)\nend\nstruct TTshould_prune end\n(::TTshould_prune)() = Py(false)\nstruct TracingTrial\n suggest_int::TTsuggest_int\n suggest_float::TTsuggest_float\n suggest_categorical::TTsuggest_categorical\n report::TTreport\n should_prune::TTshould_prune\nend\n\nfunction compute_pruning_losses(\n od,\n int_suggestions::Dict{String,Int},\n float_suggestions::Dict{String,Float64},\n categorical_suggestions::Dict{String,Int},\n)\n tt = TracingTrial(\n TTsuggest_int(int_suggestions),\n TTsuggest_float(float_suggestions),\n TTsuggest_categorical(categorical_suggestions),\n TTreport(Float64[]),\n TTshould_prune(),\n )\n od(tt)\n return tt.report.reported_vals\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"The next part is your hyperparameter optimization objective. The ObjectiveData struct contains all relevant information about the sequence of specific problems. The outermost key part is the N_range field. Early stopping requires a series of progressively more complex problems. They will be attempted from the most simple one to the most complex one, and are specified by the values of N in that vector.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"mutable struct ObjectiveData{TObj,TGrad}\n obj::TObj\n grad::TGrad\n N_range::Vector{Int}\n gtol::Float64\n vts::Vector{AbstractVectorTransportMethod}\n retrs::Vector{AbstractRetractionMethod}\n manifold_constructors::Vector{Tuple{String,Any}}\n pruning_losses::Vector{Float64}\n manopt_stepsize::Vector{Tuple{String,Any}}\n obj_loss_coeff::Float64\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"In the example below we optimize hyperparameters on a sequence of Rosenbrock-type problems restricted to spheres:","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"argmin_p in S^N-1 sum_i=1^N2 (1-p_2i)^2 + 100 (p_2i+1 - p_2i^2)^2","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"where N in 2 16 128 1024 8192 65536.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"obj and grad are the objective and gradient, here defined as below. Note that gradient works in-place and variants without manifolds are also provided for easier comparison with other libraries like Optim.jl. It is easiest when problems for different values N can be distinguished by being defined on successively larger manifolds but the script could be modified so that it’s not necessary.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"pruning_losses and compute_pruning_losses are related to early pruning used in Optuna and you shouldn’t have to modify them.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"function f_rosenbrock(x)\n result = 0.0\n for i in 1:2:length(x)\n result += (1.0 - x[i])^2 + 100.0 * (x[i + 1] - x[i]^2)^2\n end\n return result\nend\nfunction f_rosenbrock(::AbstractManifold, x)\n return f_rosenbrock(x)\nend\n\nfunction g_rosenbrock!(storage, x)\n for i in 1:2:length(x)\n storage[i] = -2.0 * (1.0 - x[i]) - 400.0 * (x[i + 1] - x[i]^2) * x[i]\n storage[i + 1] = 200.0 * (x[i + 1] - x[i]^2)\n end\n return storage\nend\nfunction g_rosenbrock!(M::AbstractManifold, storage, x)\n g_rosenbrock!(storage, x)\n riemannian_gradient!(M, storage, x, storage)\n return storage\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Next, gtol is the tolerance used for the stopping criterion in optimization. vts and retrs are, respectively, vector transports and retraction methods selected through hyperparameter optimization. Some items need to be different for different values of N, for example the manifold over which the problem is defined. This is handled by manifold_constructors which is then defined as Tuple{String,Any}[(\"Sphere\", N -> Manifolds.Sphere(N - 1))], where the string \"Sphere\" is used to identify the manifold family and the next element is a function that transforms the value of N to the manifold for the problem of size N.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Similarly, different stepsize selection methods may be considered. This is handled by the field manopt_stepsize. It will be easiest to see how it works by looking at how it is initialized:","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Tuple{String,Any}[\n (\"LS-HZ\", M -> Manopt.LineSearchesStepsize(ls_hz)),\n (\"Wolfe-Powell\", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),\n]","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"We have a string that identifies the line search method name and a constructor of the line search which takes relevant arguments like the manifold or a numerical parameter.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"The next part is the trial evaluation procedure. This is one of the more important places which need to be customized to your problem. This is the point where we tell Optuna about the relevant optimization hyperparameters and use them to define specific problems. The hyperparameter optimization is a multiobjective problem: we want as good problem objectives as possible and as low times as possible. As Optuna doesn’t currently support multicriteria pruning, which is important for obtaining a solution in a reasonable amount of time, we use a linear combination of sub-objectives to turn the problem into a single-criterion optimization. The hyperparameter optimization objective is a linear combination of achieved objectives the relative weight is controlled by objective.obj_loss_coeff.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"function (objective::ObjectiveData)(trial)\n # Here we use optuna to select memory length for L-BFGS -- an integer in the range between 2 and 30, referenced by name \"mem_len\"\n mem_len = trial.suggest_int(\"mem_len\", 2, 30)\n\n # Here we select a vector transport and retraction methods, one of those specified in the `ObjectiveData`.\n vt = objective.vts[pyconvert(\n Int,\n trial.suggest_categorical(\n \"vector_transport_method\", Vector(eachindex(objective.vts))\n ),\n )]\n retr = objective.retrs[pyconvert(\n Int,\n trial.suggest_categorical(\"retraction_method\", Vector(eachindex(objective.retrs))),\n )]\n\n # Here we select the manifold constructor, in case we want to try different manifolds for our problem. For example one could try defining a problem with orthogonality constraints on Stiefel, Grassmann or flag manifold.\n manifold_name, manifold_constructor = objective.manifold_constructors[pyconvert(\n Int,\n trial.suggest_categorical(\n \"manifold\", Vector(eachindex(objective.manifold_constructors))\n ),\n )]\n\n # Here the stepsize selection method type is selected.\n manopt_stepsize_name, manopt_stepsize_constructor = objective.manopt_stepsize[pyconvert(\n Int,\n trial.suggest_categorical(\n \"manopt_stepsize\", Vector(eachindex(objective.manopt_stepsize))\n ),\n )]\n\n # This parametrizes stepsize selection methods with relevant numerical parameters.\n local c1_val, c2_val, hz_sigma\n if manopt_stepsize_name == \"Wolfe-Powell\"\n c1_val = pyconvert(\n Float64, trial.suggest_float(\"Wolfe-Powell c1\", 1e-5, 1e-2; log=true)\n )\n c2_val =\n 1.0 - pyconvert(\n Float64, trial.suggest_float(\"Wolfe-Powell 1-c2\", 1e-4, 1e-2; log=true)\n )\n elseif manopt_stepsize_name == \"Improved HZ\"\n hz_sigma = pyconvert(Float64, trial.suggest_float(\"Improved HZ sigma\", 0.1, 0.9))\n end\n\n # The current loss estimate, taking into account estimated loss values for larger, not-yet-evaluated values of `N`.\n loss = sum(objective.pruning_losses)\n\n # Here iterate over problems we want to optimize for\n # from smallest to largest; pruning should stop the iteration early\n # if the hyperparameter set is not promising\n cur_i = 0\n for N in objective.N_range\n # Here we define the initial point for the optimization procedure\n p0 = zeros(N)\n p0[1] = 1\n M = manifold_constructor(N)\n # Here we construct the specific line search to be used\n local ls\n if manopt_stepsize_name == \"Wolfe-Powell\"\n ls = manopt_stepsize_constructor(M, c1_val, c2_val)\n elseif manopt_stepsize_name == \"Improved HZ\"\n ls = manopt_stepsize_constructor(M, hz_sigma)\n else\n ls = manopt_stepsize_constructor(M)\n end\n manopt_time, manopt_iters, manopt_obj = benchmark_time_state(\n ManoptQN(),\n M,\n N,\n objective.obj,\n objective.grad,\n p0,\n ls,\n pyconvert(Int, mem_len),\n objective.gtol;\n vector_transport_method=vt,\n retraction_method=retr,\n )\n # TODO: turn this into multi-criteria optimization when Optuna starts supporting\n # pruning in such problems\n loss -= objective.pruning_losses[cur_i + 1]\n loss += manopt_time + objective.obj_loss_coeff * manopt_obj\n trial.report(loss, cur_i)\n if pyconvert(Bool, trial.should_prune().__bool__())\n throw(PyException(optuna.TrialPruned()))\n end\n cur_i += 1\n end\n return loss\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"In the following benchmarking code you will most likely have to adapt solver parameters. This is designed around quasi_Newton but can be adapted to any solver as needed. The example below performs a small number of trials for quick rendering but in practice you should aim for at least a few thousand trials (the n_trials parameter).","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"# An abstract type in case we want to try different optimization packages.\nabstract type AbstractOptimConfig end\nstruct ManoptQN <: AbstractOptimConfig end\n\n# Benchmark that evaluates hyperparameters. Returns time to reach the solution, number of iterations and final value of the objective.\nfunction benchmark_time_state(\n ::ManoptQN,\n M::AbstractManifold,\n N,\n f,\n g!,\n p0,\n stepsize::Manopt.Stepsize,\n mem_len::Int,\n gtol::Real;\n kwargs...,\n)\n manopt_sc = StopWhenGradientNormLess(gtol; norm=norm_inf) | StopAfterIteration(1000)\n mem_len = min(mem_len, manifold_dimension(M))\n manopt_state = quasi_Newton(\n M,\n f,\n g!,\n p0;\n stepsize=stepsize,\n evaluation=InplaceEvaluation(),\n return_state=true,\n memory_size=mem_len,\n stopping_criterion=manopt_sc,\n debug=[],\n kwargs...,\n )\n bench_manopt = @benchmark quasi_Newton(\n $M,\n $f,\n $g!,\n $p0;\n stepsize=$(stepsize),\n evaluation=$(InplaceEvaluation()),\n memory_size=$mem_len,\n stopping_criterion=$(manopt_sc),\n debug=[],\n $kwargs...,\n )\n iters = get_count(manopt_state, :Iterations)\n final_val = f(M, manopt_state.p)\n return median(bench_manopt.times) / 1000, iters, final_val\nend\n\n\"\"\"\n lbfgs_study(; pruning_coeff::Float64=0.95)\n\nSet up the example hyperparameter optimization study.\n\"\"\"\nfunction lbfgs_study(; pruning_coeff::Float64=0.95)\n Ns = [2^n for n in 1:3:12]\n ls_hz = LineSearches.HagerZhang()\n od = ObjectiveData(\n f_rosenbrock,\n g_rosenbrock!,\n Ns,\n 1e-5,\n AbstractVectorTransportMethod[ParallelTransport(), ProjectionTransport()],\n [ExponentialRetraction(), ProjectionRetraction()],\n Tuple{String,Any}[(\"Sphere\", N -> Manifolds.Sphere(N - 1))],\n zeros(Float64, eachindex(Ns)),\n Tuple{String,Any}[\n (\"LS-HZ\", M -> Manopt.LineSearchesStepsize(ls_hz)),\n #(\"Improved HZ\", (M, sigma) -> HagerZhangLinesearch(M; sigma=sigma)),\n (\"Wolfe-Powell\", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),\n ],\n 10.0,\n )\n\n # Here you need to define baseline values of all hyperparameters\n baseline_pruning_losses = compute_pruning_losses(\n od,\n Dict(\"mem_len\" => 4),\n Dict(\n \"Wolfe-Powell c1\" => 1e-4,\n \"Wolfe-Powell 1-c2\" => 1e-3,\n \"Improved HZ sigma\" => 0.9,\n ),\n Dict(\n \"vector_transport_method\" => 1,\n \"retraction_method\" => 1,\n \"manifold\" => 1,\n \"manopt_stepsize\" => 1,\n ),\n )\n od.pruning_losses = pruning_coeff * baseline_pruning_losses\n\n study = optuna.create_study(; study_name=\"L-BFGS\")\n # Here you can specify number of trials and timeout (in seconds).\n study.optimize(od; n_trials=1000, timeout=500)\n println(\"Best params is $(study.best_params) with value $(study.best_value)\")\n selected_manifold = od.manifold_constructors[pyconvert(Int, study.best_params[\"manifold\"])][1]\n selected_retraction_method = od.retrs[pyconvert(Int, study.best_params[\"retraction_method\"])]\n selected_vector_transport = od.vts[pyconvert(Int, study.best_params[\"vector_transport_method\"])]\n println(\"Selected manifold: $(selected_manifold)\")\n println(\"Selected retraction method: $(selected_retraction_method)\")\n println(\"Selected vector transport method: $(selected_vector_transport)\")\n return study\nend\n\nlbfgs_study()","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Best params is {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093} with value 5510.963227438757\nSelected manifold: Sphere\nSelected retraction method: ExponentialRetraction()\nSelected vector transport method: ProjectionTransport()\n\n[I 2024-03-16 18:04:17,965] A new study created in memory with name: L-BFGS\n[I 2024-03-16 18:04:45,996] Trial 0 finished with value: 5639.789870295856 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00027288064367948073, 'Wolfe-Powell 1-c2': 0.00026503788892114045}. Best is trial 0 with value: 5639.789870295856.\n[I 2024-03-16 18:05:11,860] Trial 1 finished with value: 5635.936370295855 and parameters: {'mem_len': 11, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.002743250060163298, 'Wolfe-Powell 1-c2': 0.00037986521186922096}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:05:39,386] Trial 2 finished with value: 5673.101441724422 and parameters: {'mem_len': 26, 'vector_transport_method': 2, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00043339485784312605, 'Wolfe-Powell 1-c2': 0.0027302649933974173}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:10,279] Trial 3 finished with value: 7410.818084581564 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:37,995] Trial 4 finished with value: 5756.566226449636 and parameters: {'mem_len': 25, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:42,755] Trial 5 pruned. \n[I 2024-03-16 18:06:58,577] Trial 6 pruned. \n[I 2024-03-16 18:07:15,366] Trial 7 pruned. \n[I 2024-03-16 18:07:40,605] Trial 8 finished with value: 5581.7437274386975 and parameters: {'mem_len': 7, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0010567355712112379, 'Wolfe-Powell 1-c2': 0.003948002490203636}. Best is trial 8 with value: 5581.7437274386975.\n[I 2024-03-16 18:07:46,021] Trial 9 pruned. \n[I 2024-03-16 18:08:11,512] Trial 10 finished with value: 5510.963227438757 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:08:35,914] Trial 11 finished with value: 5521.388656010121 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006738829952322474, 'Wolfe-Powell 1-c2': 0.0010639659137420014}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:00,317] Trial 12 finished with value: 5521.36958458155 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00010975606104676191, 'Wolfe-Powell 1-c2': 0.0007663843095951679}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:24,680] Trial 13 finished with value: 5520.7020845815505 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 6.743450835567536e-05, 'Wolfe-Powell 1-c2': 0.0008779759729737719}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:50,268] Trial 14 pruned. \n[I 2024-03-16 18:10:15,494] Trial 15 finished with value: 5595.119584581556 and parameters: {'mem_len': 6, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 8.147444451747575e-05, 'Wolfe-Powell 1-c2': 0.00012268601197923553}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:10:25,264] Trial 16 pruned. \n[I 2024-03-16 18:10:50,209] Trial 17 finished with value: 5572.474513153012 and parameters: {'mem_len': 5, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0015998473664092935, 'Wolfe-Powell 1-c2': 0.0005109172020536229}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:10:54,772] Trial 18 pruned. \n[I 2024-03-16 18:11:04,534] Trial 19 pruned. \n[I 2024-03-16 18:11:28,873] Trial 20 finished with value: 5512.3824417244705 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.1581668103921961e-05, 'Wolfe-Powell 1-c2': 0.0002691056199427656}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:11:53,327] Trial 21 finished with value: 5529.088227438692 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.3645031886009879e-05, 'Wolfe-Powell 1-c2': 0.0001863385753491203}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:12:17,911] Trial 22 finished with value: 5522.041370295835 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.0030173525937465e-05, 'Wolfe-Powell 1-c2': 0.000543991948003312}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:12:27,645] Trial 23 pruned. \n[I 2024-03-16 18:12:52,163] Trial 24 finished with value: 5528.840941724406 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.000245400433292576, 'Wolfe-Powell 1-c2': 0.000133639324295565}. Best is trial 10 with value: 5510.963227438757.\n\nPython: ","category":"page"},{"location":"examples/HyperparameterOptimization/#Summary","page":"Hyperparameter optimziation","title":"Summary","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"We’ve shown how to automatically select the best hyperparameter values for your optimization problem.","category":"page"},{"location":"examples/HyperparameterOptimization/#Literature","page":"Hyperparameter optimziation","title":"Literature","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.\n\n\n\n","category":"page"},{"location":"examples/#List-of-Examples","page":"Overview","title":"List of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation Comment\nA Benchmark for Difference of Convex contains a few simple functions \nBézier Curves and Minimizing their Acceleration tools Bézier curves and their acceleration 📚 \nSolving Rosenbrock with Difference of Convex DoC split of Rosenbrock 📚 uses a Rosenbrock based metric\nDifference of Convex vs. Frank-Wolfe closed-form sub solver\nRiemannian Mean f, operatornamegradf (A/I), objective 📚 \nRobust PCA f, operatornamegradf (A/I), objective 📚 \nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚 \nThe Rayleigh Quotient f, operatornamegradf (A/I), operatornameHessf (A/I), objective 📚 \nTotal Variation Minimization f, operatornameproxf (A/I), objective 📚 ","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Solving-Rosenbrock-with-the-Difference-of-Convex-Algorithm","page":"Rosenbrock Metric","title":"Solving Rosenbrock with the Difference of Convex Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Introduction","page":"Rosenbrock Metric","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Both the Rosenbrock problem","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":" operatorname*argmin_xin ℝ^2 abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where ab0 and usually b=1 and a gg b, we know the minimizer x^* = (bb^2)^mathrmT, and also the (Euclidean) gradient","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"nabla f(x) =\n beginpmatrix\n 4a(x_1^2-x_2) -2a(x_1^2-x_2)\n endpmatrix\n +\n beginpmatrix\n 2(x_1-b) 0\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Furthermore, the RosenbrockMetric can be used on ℝ^2, that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"XY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"The Euclidean Gradient\nThe Riemannian gradient descent with respect to the RosenbrockMetric\nThe Euclidean Difference of Convex Algorithm\nThe Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Where we obtain a difference of convex problem by writing","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f(x) = abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2\n = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 - bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"g(x) = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 quadtext and quad h(x) = bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nimport Manopt: set_manopt_parameter!\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\ngreen = paul_tol[\"mutedgreen\"]\nsand = paul_tol[\"mutedsand\"]\nteal = paul_tol[\"mutedteal\"]\ngrey = paul_tol[\"mutedgrey\"]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"To emphasize the effect, we choose a quite large value of a.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"a = 2*10^5\nb = 1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and use the starting point and a direction to check gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"p0 = [0.1, 0.2]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Euclidean Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Euclidean gradient we can just use the same approach as in the Rosenbrock example","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M = ℝ^2\nf = ManoptExamples.RosenbrockCost(M; a=a, b=b)\n∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"define a common debug vector","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"debug_vec = [\n (:Iteration, \"# %-8d \"),\n (:Cost, \"F(x): %1.4e\"),\n \" \",\n (:Change, \"|δp|: %1.4e | \"),\n (:GradientNorm, \"|grad f|: %1.6e\"),\n :Stop,\n \"\\n\",\n ]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and call the gradient descent algorithm","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^7],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03\n# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04\n# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06\n# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08\n# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 53073227 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Riemannian Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Riemannian case, we define","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and the gradient is now adopted to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_f!(M, X, p)\n ∇f!!(M, X, p)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_f(M, p)\n X = zero_vector(M, p)\n return grad_f!(M, X, p)\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^6],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 1000000 F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04\n# 2000000 F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 2443750 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Euclidean Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the convex case, we have to first introduce the two parts of the cost.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;\nf2(M, p; a=100, b=1) = (p[1] - b[1])^2;\ng(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)\nh(M, p; a=100, b=1) = f2(M, p; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and their (Euclidan) gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function ∇h!(M, X, p; a=100, b=1)\n X[1] = 2*(p[1]-b)\n X[2] = 0\n return X\nend\nfunction ∇h(M, p; a=100, b=1)\n X = zero(p)\n ∇h!(M, X, p; a=a, b=b)\n return X\nend\nfunction ∇g!(M, X, p; a=100, b=1)\n X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)\n X[2] = -2*a*(p[1]^2-p[2])\n return X\nend\nfunction ∇g(M, p; a=100, b=1)\n X = zero(p)\n ∇g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and we define for convenience","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docE_g(M, p) = g(M, p; a=a, b=b)\ndocE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)\ndocE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)\ndocE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)\nfunction docE_∇f!(M, X, p)\n Y = zero_vector(M, p)\n docE_∇g!(M, X, p)\n docE_∇h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we call the difference of convex algorithm on Eucldiean space ℝ^2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"E_doc_state = difference_of_convex_algorithm(\n M, docE_f, docE_g, docE_∇h!, p0;\n gradient=docE_∇f!,\n grad_g = docE_∇g!,\n debug=[debug_vec..., 10^4],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_hess=nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000 F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04\n# 20000 F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 26549 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping criterion\n | \n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Riemannian Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"We first have to again defined the gradients with respect to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_h!(M, X, p; a=100, b=1)\n ∇h!(M, X, p; a=a, b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_h(M, p; a=100, b=1)\n X = zero(p)\n grad_h!(M, X, p; a=a, b=b)\n return X\nend\nfunction grad_g!(M, X, p; a=100, b=1)\n ∇g!(M, X, p; a=a,b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_g(M, p; a=100, b=1)\n X = zero(p)\n grad_g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For X in h(p^(k)) the sunproblem top determine p^(k+1) reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatorname*argmin_pinmathcal M g(p) - langle X log_p^(k)prangle","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with X = operatornamegrad h(p^(k)) that","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"phi(p) = g(p) - langle X log_p^(k)prangle\n= abigl( p_1^2-p_2bigr)^2\n + 2bigl(p_1-bbigr)^2 - 2(p^(k)_1-b)p_1 + 2(p^(k)_1-b)p^(k)_1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"its Euclidean gradient reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatornamegradphi(p) =\n nabla varphi(p)\n = beginpmatrix\n 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^(k)_1-b)\n -2a(p_1^2-p_2)\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where we can again employ the gradient conversion from before to obtain the Riemannian gradient.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"mutable struct SubGrad{P,T,V}\n pk::P\n Xk::T\n a::V\n b::V\nend\nfunction (ϕ::SubGrad)(M, p)\n X = zero_vector(M, p)\n ϕ(M, X, p)\n return X\nend\nfunction (ϕ::SubGrad)(M, X, p)\n X .= [\n 4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),\n -2 * ϕ.a * (p[1]^2 - p[2]),\n ]\n riemannian_gradient!(M, X, p, X) # convert\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And in orer to update the subsolvers gradient correctly, we have to overwrite","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)\nset_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we again introduce for ease of use","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docR_g(M, p) = g(M, p; a=a, b=b)\ndocR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)\ndocR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)\ndocR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)\nfunction docR_grad_f!(M, X, p)\n Y = zero_vector(M, p)\n docR_grad_g!(M, X, p)\n docR_grad_h!(M, Y, p)\n X .-= Y\n return X\nend\ndocR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_doc_state = difference_of_convex_algorithm(\n M_rb, docR_f, docR_g, docR_grad_h!, p0;\n gradient=docR_grad_f!,\n grad_g = docR_grad_g!,\n debug=[debug_vec..., 10^6],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_grad=docR_sub_grad,\n sub_hess = nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 1235 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping criterion\n | \n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Comparison-in-Iterations","page":"Rosenbrock Metric","title":"Comparison in Iterations","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x)$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-16, 5*1e5),\n xaxis=:log,\n xlims=(1,10^8),\n)\nscatter!(fig, [1,], [f(M,p0),], label=raw\"$f(p_0)$\", markercolor=grey)\negi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries\negc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries\nplot!(fig, egi, egc, color=teal, label=\"Euclidean GD\")\n#\nrgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries\nrgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries\nplot!(fig, rgi, rgc, color=indigo, label=\"Riemannian GD\")\n#\nedi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries\nedc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries\nplot!(fig, edi, edc, color=sand, label=\"Euclidean DoC\")\n#\nrdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries\nrdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries\nplot!(fig, rdi, rdc, color=green, label=\"Riemannian DoC\")","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Literature","page":"Rosenbrock Metric","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\n","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/Changelog.md\"","category":"page"},{"location":"changelog/#Changelog","page":"Changelog","title":"Changelog","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"All notable changes to this Julia package will be documented in this file.","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.","category":"page"},{"location":"changelog/#[0.1.7]-–-07/06/2024","page":"Changelog","title":"[0.1.7] – 07/06/2024","text":"","category":"section"},{"location":"changelog/#Changed","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"make Manopt.jl a weak dependency and load functions that require parts of it only load as an extension. This makes it easier to use the examples in the tests of Manopt itself.","category":"page"},{"location":"changelog/#[0.1.6]-–-22/03/2024","page":"Changelog","title":"[0.1.6] – 22/03/2024","text":"","category":"section"},{"location":"changelog/#Added","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Hyperparameter optimization example.","category":"page"},{"location":"changelog/#[0.1.3]-–-11/12/2023","page":"Changelog","title":"[0.1.3] – 11/12/2023","text":"","category":"section"},{"location":"changelog/#Added-2","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Total variation Minimization cost, proxes, and an example\nBézier curve cost, gradients, and an example.","category":"page"},{"location":"changelog/#[0.1.3]-–-16/09/2023","page":"Changelog","title":"[0.1.3] – 16/09/2023","text":"","category":"section"},{"location":"changelog/#Added-3","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rayleigh Quotient functions added\nan example illustrating Euclidean gradient/HEssian conversion\nAdd Literature with DocumenterCitations","category":"page"},{"location":"changelog/#[0.1.2]-–-13/06/2023","page":"Changelog","title":"[0.1.2] – 13/06/2023","text":"","category":"section"},{"location":"changelog/#Added-4","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Update examples to use Quarto\nAdd DC examples","category":"page"},{"location":"changelog/#[0.1.1]-–-01/03/2023","page":"Changelog","title":"[0.1.1] – 01/03/2023","text":"","category":"section"},{"location":"changelog/#Added-5","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rosenbrock function and examples","category":"page"},{"location":"changelog/#[0.1.0]-–-18/02/2023","page":"Changelog","title":"[0.1.0] – 18/02/2023","text":"","category":"section"},{"location":"changelog/#Added-6","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested\nSetup Documentation to provide one example Quarto file for every example objective to illustrate how to use them.","category":"page"},{"location":"examples/Bezier-curves/#Minimizing-the-Acceleration-of-Bézier-Curves-on-the-Sphere","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using Manifolds, Manopt, ManoptExamples","category":"page"},{"location":"examples/Bezier-curves/#Introduction","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Introduction","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"function bezier(M::AbstractManifold, t, pts::NTuple)\n p = bezier(M, t, pts[1:(end - 1)])\n q = bezier(M, t, pts[2:end])\n return shortest_geodesic(M, p, q, t)\nend\nfunction bezier(M::AbstractManifold, t, pts::NTuple{2})\n return shortest_geodesic(M, pts[1], pts[2], t)\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using ManoptExamples:\n artificial_S2_composite_Bezier_curve,\n BezierSegment,\n de_Casteljau,\n get_Bezier_degrees,\n get_Bezier_inner_points,\n get_Bezier_junctions,\n get_Bezier_junction_tangent_vectors,\n get_Bezier_points,\n get_Bezier_segments,\n grad_L2_acceleration_Bezier,\n L2_acceleration_Bezier","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"This notebook reproduces the example form Section 5.2 in [BG18].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The following image illustrates how the de-Casteljau algorithm works for one segment.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: A Bezier segment and illustration of the de-Casteljau algorithm)","category":"page"},{"location":"examples/Bezier-curves/#Approximating-data-by-a-curve-with-minimal-accelartion","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Approximating data by a curve with minimal accelartion","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We first load our example data","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"M = Sphere(2)\nB = artificial_S2_composite_Bezier_curve()\ndata_points = get_Bezier_junctions(M, B)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The original curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We continue to recude the points, since we “know” sme points due to the C^1 property: the second to last control point of the first segment b_02, the joint junction point connecting both segments b_03=b_10 and the second control point b_11 of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We can use this reduced form as the variable to optimize and the one from the data as our initial point.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"pB = get_Bezier_points(M, B, :differentiable)\nN = PowerManifold(M, NestedPowerRepresentation(), length(pB))","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the λ=10","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient\nλ = 10.0\nfunction f(M, pB)\n return L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend\nfunction grad_f(M, pB)\n return grad_L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"grad_f (generic function with 1 method)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Then we can optimize","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"x0 = pB\npB_opt = gradient_descent(\n N,\n f,\n grad_f,\n x0;\n stepsize=ArmijoLinesearch(N;\n initial_stepsize=1.0,\n retraction_method=ExponentialRetraction(),\n contraction_factor=0.5,\n sufficient_decrease=0.001,\n ),\n stopping_criterion=StopWhenChangeLess(1e-5) |\n StopWhenGradientNormLess(1e-7) |\n StopAfterIteration(300),\n debug=[\n :Iteration,\n \" | \",\n :Cost,\n \" | \",\n DebugGradientNorm(),\n \" | \",\n DebugStepsize(),\n \" | \",\n :Change,\n \"\\n\",\n 25,\n :Stop,\n ],\n);","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Initial | f(x): 10.647244 | | | \n# 25 | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281\n# 50 | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780\n# 75 | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590\n# 100 | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745\nThe algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we can again look at the result","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The result looks as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The resulting curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\n","category":"page"},{"location":"data/#Data-sets","page":"Data","title":"Data sets","text":"","category":"section"},{"location":"data/#Signals-on-manifolds","page":"Data","title":"Signals on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_signals.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.Lemniscate-Tuple{Number}","page":"Data","title":"ManoptExamples.Lemniscate","text":"Lemniscate(t::Float; kwargs...)\nLemniscate(n::integer; interval=[0.0, 2π], kwargs...)\n\ngenerate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.\n\nTo be precise on the manifold M we use the tangent space at p and generate the curve\n\nγ(t) fracasin^2(t) + 1 beginpmatrix cos(t) cos(t)sin(t) endpmatrix\n\nin the plane spanned by X and Y in the tangent space. Note that this curve is 2π-periodic and a is the half-width of the curve.\n\nTo reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.\n\nTHe second variant generates n points equispaced in ìnterval` and calls the first variant.\n\nKeywords\n\nmanifold - (Sphere(2)) the manifold to build the lemniscate on\np - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate\na – (π/2.0) half-width of the Lemniscate\nX – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.\nY – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_signal","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal([pts=500])\n\ngenerate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to ``[BLSW14].\n\nOptional\n\npts: (500) number of points to sample the function\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S1_signal-Tuple{Real}","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal(x)\n\nevaluate the example signal f(x) x 01, of phase-valued data introduces in Sec. 5.1 of [BLSW14] for values outside that interval, this Signal is missing.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_slope_signal","page":"Data","title":"ManoptExamples.artificial_S1_slope_signal","text":"artificial_S1_slope_signal([pts=500, slope=4.])\n\nCreates a Signal of (phase-valued) data represented on the Circle with increasing slope.\n\nOptional\n\npts: (500) number of points to sample the function.\nslope: (4.0) initial slope that gets increased afterwards\n\nThis data set was introduced for the numerical examples in [BLSW14]\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_composite_Bezier_curve-Tuple{}","page":"Data","title":"ManoptExamples.artificial_S2_composite_Bezier_curve","text":"artificial_S2_composite_Bezier_curve()\n\nGenerate a composite Bézier curve on the [BG18].\n\nIt consists of 4 egments connecting the points\n\nmathbf d_0 = beginpmatrix 001endpmatrixquad\nmathbf d_1 = beginpmatrix 0-10endpmatrixquad\nmathbf d_2 = beginpmatrix -100endpmatrixtext and \nmathbf d_3 = beginpmatrix 00-1endpmatrix\n\nwhere instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be C^1.\n\nWe define\n\nX_0 = fracπ8sqrt2beginpmatrix1-10endpmatrixquad\nX_1 = fracπ4sqrt2beginpmatrix101endpmatrixquad\nX_2 = fracπ4sqrt2beginpmatrix01-1endpmatrixtext and \nX_3 = fracπ8sqrt2beginpmatrix-110endpmatrix\n\nwhere we defined each X_i in T_d_imathbb S^2. We defined three BezierSegments\n\nof cubic Bézier curves as follows\n\nbeginalign*\nb_00 = d_0 quad b_10 = exp_d_0X_0 quad b_20 = exp_d_1X_1 quad b_30 = d_1\nb_01 = d_1 quad b_11 = exp_d_1(-X_1) quad b_21 = exp_d_2X_2 quad b_31 = d_2\nb_02 = d_2 quad b_11 = exp_d_2(-X_2) quad b_22 = exp_d_3X_3 quad b_32 = d_3\nendalign*\n\n\n\n\n\n","category":"method"},{"location":"data/#images-on-manifolds","page":"Data","title":"images on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_images.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.artificialIn_SAR_image-Tuple{Integer}","page":"Data","title":"ManoptExamples.artificialIn_SAR_image","text":"artificialIn_SAR_image([pts=500])\n\ngenerate an artificial InSAR image, i.e. phase valued data, of size pts x pts points.\n\nThis data set was introduced for the numerical examples in [BLSW14].\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S2_rotation_image","page":"Data","title":"ManoptExamples.artificial_S2_rotation_image","text":"artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])\n\nCreate an image with a rotation on each axis as a parametrization.\n\nOptional Parameters\n\npts: (64) number of pixels along one dimension\nrotations: ((.5,.5)) number of total rotations performed on the axes.\n\nThis dataset was used in the numerical example of Section 5.1 of [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_image","page":"Data","title":"ManoptExamples.artificial_S2_whirl_image","text":"artificial_S2_whirl_image([pts::Int=64])\n\nGenerate an artificial image of data on the 2 sphere,\n\nArguments\n\npts: (64) size of the image in pts×pts pixel.\n\nThis example dataset was used in the numerical example in Section 5.5 of [LNPS17]\n\nIt is based on artificial_S2_rotation_image extended by small whirl patches.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_patch","page":"Data","title":"ManoptExamples.artificial_S2_whirl_patch","text":"artificial_S2_whirl_patch([pts=5])\n\ncreate a whirl within the pts×pts patch of Sphere(@ref)(2)-valued image data.\n\nThese patches are used within artificial_S2_whirl_image.\n\nOptional Parameters\n\npts: (5) size of the patch. If the number is odd, the center is the north pole.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image","page":"Data","title":"ManoptExamples.artificial_SPD_image","text":"artificial_SPD_image([pts=64, stepsize=1.5])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.\n\nThis dataset was used in the numerical example of Section 5.2 of [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image2","page":"Data","title":"ManoptExamples.artificial_SPD_image2","text":"artificial_SPD_image2([pts=64, fraction=.66])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.\n\nThis data set was introduced in the numerical examples of Section of [BPS16]\n\n\n\n\n\n","category":"function"},{"location":"data/#Literature","page":"Data","title":"Literature","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\n","category":"page"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny BergmannLaura Weigl 2023-07-02","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139397\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.430690947905521","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412961981726742","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Total-Variation/#Total-Variation-Minimization","page":"Total Variation","title":"Total Variation Minimization","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Total-Variation/#Introduction","page":"Total Variation","title":"Introduction","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.","category":"page"},{"location":"examples/Total-Variation/#The-manifold-valued-ROF-model","page":"Total Variation","title":"The manifold-valued ROF model","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold s = (s_i)_i=1^N in mathbb M^n of length n in mathbb N, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term D(ps) to “stay close to” s and a regularizer R(p). For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"operatorname*argmin_pinmathcal M^n\nf(p)\nqquad\nf(p) = D(ps) + α R(p) = sum_i=1^n d_mathcal M^2(s_ip_i) + αsum_i=1^n-1 d_mathcal M(p_ip_i+1)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"where α 0 is a weight parameter.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost f(p) to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any p_i=p_i+1. So we have to use another technique.","category":"page"},{"location":"examples/Total-Variation/#The-Cyclic-Proximal-Point-algorithm","page":"Total Variation","title":"The Cyclic Proximal Point algorithm","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the Cyclic Proximal Point Algorithm [Bac14].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.","category":"page"},{"location":"examples/Total-Variation/#The-Optimsation","page":"Total Variation","title":"The Optimsation","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Manifolds, Manopt, ManoptExamples, ManifoldDiff\nusing ManifoldDiff: prox_distance\nusing ManoptExamples: prox_Total_Variation\nn = 500 #Signal length\nσ = 0.2 # amount of noise\nα = 0.5# in the TV model","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We define a few colors","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Colors, NamedColors, ColorSchemes, Plots, Random\ndata_color = RGBA{Float64}(colorant\"black\")\nlight_color = RGBA{Float64}(colorant\"brightgrey\")\nrecon_color = RGBA{Float64}(colorant\"vibrantorange\")\nnoisy_color = RGBA{Float64}(colorant\"vibrantteal\")","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Random.seed!(23)\nM = Circle()\nN = PowerManifold(M, n)\ndata = ManoptExamples.artificial_S1_signal(n)\ns = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]\nt = range(0.0, 1.0; length=n)\nscene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=noisy_color,\n markerstrokecolor=noisy_color,\n lab=\"noisy\",\n)\nyticks!(\n [-π, -π / 2, 0, π / 2, π],\n [raw\"$-\\pi$\", raw\"$-\\frac{\\pi}{2}$\", raw\"$0$\", raw\"$\\frac{\\pi}{2}$\", raw\"$\\pi$\"],\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Defining cost and the proximal maps, which are actually 3 proxes to be precise.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)\nproxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_Total_Variation(N, α * λ, p))","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We run the algorithm","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"o = cyclic_proximal_point(\n N,\n f,\n proxes_f,\n s;\n λ=i -> π / (2 * i),\n debug=[\n :Iteration,\n \" | \",\n DebugProximalParameter(),\n \" | \",\n :Cost,\n \" | \",\n :Change,\n \"\\n\",\n 1000,\n :Stop,\n ],\n record=[:Iteration, :Cost, :Change, :Iterate],\n return_state=true,\n);","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Initial | | f(x): 59.187445 | \n# 1000 | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283\n# 2000 | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678\n# 3000 | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907\n# 4000 | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957\n# 5000 | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175\nThe algorithm reached its maximal number of iterations (5000).","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can see that the cost reduces nicely. Let’s extract the result an the recorded values","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"recon = get_solver_result(o)\nrecord = get_record(o)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We get","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"scene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=light_color,\n markerstrokecolor=light_color,\n lab=\"noisy\",\n)\nscatter!(\n scene,\n t,\n recon;\n markersize=2,\n markercolor=recon_color,\n markerstrokecolor=recon_color,\n lab=\"reconstruction\",\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”","category":"page"},{"location":"examples/Total-Variation/#Outlook","page":"Total Variation","title":"Outlook","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the operatornameTV_2 yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Another extension for both first and second order TV is to apply this for manifold-valued images S = (S_ij)_ij=1^mn in mathcal M^mn, where the distances in the regularizer are then used in both the first dimension i and the second dimension j in the data.","category":"page"},{"location":"examples/Total-Variation/#Technical-details","page":"Total Variation","title":"Technical details","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This version of the example was generated with the following package versions.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Pkg.status()","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`\n [6e4b80f9] BenchmarkTools v1.5.0\n [35d6a980] ColorSchemes v3.25.0\n [5ae59095] Colors v0.12.11\n [7073ff75] IJulia v1.24.2\n [8ac3fa9e] LRUCache v1.6.1\n [d3d80556] LineSearches v7.2.0\n [af67fdf4] ManifoldDiff v0.3.10\n [1cead3c2] Manifolds v0.9.18\n [3362f125] ManifoldsBase v0.15.10\n [0fc0a36d] Manopt v0.4.63\n [5b8d5e80] ManoptExamples v0.1.7 `..`\n [51fcb6bd] NamedColors v0.2.2\n [91a5bcdd] Plots v1.40.4\n [6099a3de] PythonCall v0.9.20","category":"page"},{"location":"examples/Total-Variation/#Literature","page":"Total Variation","title":"Literature","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 2023-01-03","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field=ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 26 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector transport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |grad f| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"1.4404666436813376e-18","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 2023-07-02","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get started: optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get started: optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do in-place-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393613136017\n 0.006531541407458413\n 0.7267799052788726","category":"page"},{"location":"examples/RayleighQuotient/#The-Rayleigh-Quotient","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Ronny Bergmann 2024-03-09","category":"page"},{"location":"examples/RayleighQuotient/#Introduction","page":"The Rayleigh Quotient","title":"Introduction","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For a symmetric matrix A in mathbb R^ntimes n we consider the 📖 Rayleigh Quotient","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"operatorname*argmin_x in mathbb R^n backslash 0\nfracx^mathrmTAxlVert x rVert^2","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"On the sphere we can omit the denominator and obtain","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f(p) = p^mathrmTApqquad p 𝕊^n-1","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"which by itself we can again continue in the embedding as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"tilde f(x) = x^mathrmTAxqquad x in mathbb R^n","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This cost has the nice feature that at the minimizer p^*inmathbb S^n-1 the function falue f(p^*) is the smalles eigenvalue of A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For the embedded function tilde f the gradient and Hessian can be computed with classical methods as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\ntilde f(x) = 2Ax qquad x ℝ^n\n\n^2tilde f(x)V = 2AV qquad x V ℝ^n\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold mathcal M = mathbb S^n-1 are given by","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\noperatornamegrad f(p) = 2Ap - 2(p^mathrmTAp)*pqquad p 𝕊^n-1\n\noperatornameHess f(p)X = 2AX - 2(p^mathrmTAX)p - 2(p^mathrmTAp)Xqquad p 𝕊^n-1 X in T_p𝕊^n-1\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first generate an example martrx A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random\nRandom.seed!(42)\nn = 500\nA = Symmetric(randn(n, n) / n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And the manifolds","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"M = Sphere(n-1)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Sphere(499, ℝ)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"E = get_embedding(M)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean(500; field=ℝ)","category":"page"},{"location":"examples/RayleighQuotient/#Setup-the-corresponding-functions","page":"The Rayleigh Quotient","title":"Setup the corresponding functions","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute f is called with M as their first argument and tilde f if called with E.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We instantiate","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f = ManoptExamples.RayleighQuotientCost(A)\ngrad_f = ManoptExamples.RayleighQuotientGrad!!(A)\nHess_f = ManoptExamples.RayleighQuotientHess!!(A)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"p0 = [1.0, zeros(n-1)...]\nX = zero_vector(M, p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"we can both call","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Y = grad_f(M, p0) # Allocates memory\ngrad_f(M, X, p0) # Computes in place of X and returns the result in X.\nnorm(M, p0, X-Y)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"0.0","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"λ = min(eigvals(A)...)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"-0.08967721009388108","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-on-gradient-information","page":"The Rayleigh Quotient","title":"A Solver based on gradient information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient nabla tilde f. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n return_state=true,\n)\nq1 = get_solver_result(s)\ns","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 50 f(x): -0.088415|grad f(p)|:0.004530500043902619\n# 100 f(x): -0.089097|grad f(p)|:0.004589417101266096\n# 150 f(x): -0.089530|grad f(p)|:0.0026028331895358247\n# 200 f(x): -0.089650|grad f(p)|:0.0012359084298719039\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-6d\"), (:Cost, \"f(x): %f\"), (:GradientNorm, \"|grad f(p)|:%s\"), \"\\n\", 50]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q2 = gradient_descent(M, f, grad_f, p0;\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n)\n#Test that both are the same\nisapprox(M, q1,q2)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 50 f(x): -0.088415|grad f(p)|:0.004530500043902567\n# 100 f(x): -0.089097|grad f(p)|:0.004589417101266063\n# 150 f(x): -0.089530|grad f(p)|:0.002602833189535808\n# 200 f(x): -0.089650|grad f(p)|:0.0012359084298719097\n\ntrue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We can also benchmark both","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 23 samples with 1 evaluation.\n Range (min … max): 217.668 ms … 268.332 ms ┊ GC (min … max): 3.21% … 3.98%\n Time (median): 219.032 ms ┊ GC (median): 3.24%\n Time (mean ± σ): 222.029 ms ± 10.351 ms ┊ GC (mean ± σ): 3.33% ± 0.26%\n\n █ \n ▆█▆▃▁▃▁▃▁▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃ ▁\n 218 ms Histogram: frequency by time 268 ms <\n\n Memory estimate: 1.13 GiB, allocs estimate: 3613.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 149 samples with 1 evaluation.\n Range (min … max): 31.006 ms … 163.769 ms ┊ GC (min … max): 0.00% … 79.63%\n Time (median): 31.330 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 33.701 ms ± 11.067 ms ┊ GC (mean ± σ): 3.40% ± 7.06%\n\n █▃ ▂ ▁ ▃ \n ██▄█▇██▆▄▁▄▄▁▇▁▁▆▁▄▆█▇▁▁▄▁▄▄▁▁▁▁▁▁▁▁▁▄▁▁▁▄▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▁▁▄ ▄\n 31 ms Histogram: log(frequency) by time 47 ms <\n\n Memory estimate: 11.38 MiB, allocs estimate: 3006.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From these results we see, that the conversion from the Euclidean to the Riemannian gradient does require a small amount of effort and hence reduces the performance slighly. Still, if the Euclidean Gradient is easier to compute or already available, this is in terms of coding the faster way. Finally this is a tradeoff between derivation and implementation efforts for the Riemannian gradient and a slight performance reduction when using the Euclidean one.","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-(also)-on-(approximate)-Hessian-information","page":"The Rayleigh Quotient","title":"A Solver based (also) on (approximate) Hessian information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To also involve the Hessian, we consider the trust regions solver with three cases:","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean, approximating the Hessian\nEuclidean, providing the Hessian\nRiemannian, providing the Hessian but also using in-place evaluations.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.088106|grad f(p)|:0.01903913659588686\n# 20 f(x): -0.089023|grad f(p)|:0.007792334296299116\n# 30 f(x): -0.089501|grad f(p)|:0.008034300330026467\n# 40 f(x): -0.089842|grad f(p)|:0.008125526728200166\n# 50 f(x): -0.089890|grad f(p)|:0.0031244752821335416\n# 60 f(x): -0.089925|grad f(p)|:0.0029682862637714163\n# 70 f(x): -0.089962|grad f(p)|:0.002811722437216778\n# 80 f(x): -0.089997|grad f(p)|:0.0026658493010157363\n# 90 f(x): -0.090032|grad f(p)|:0.0025418974797659266\n# 100 f(x): -0.090067|grad f(p)|:0.0024485809550738955\n# 110 f(x): -0.090108|grad f(p)|:0.0023894008071780747\n# 120 f(x): -0.090155|grad f(p)|:0.002362317662908117\n# 130 f(x): -0.090208|grad f(p)|:0.0023611301647631484\n# 140 f(x): -0.090262|grad f(p)|:0.00237797866404072\n# 150 f(x): -0.090314|grad f(p)|:0.002405563029627607\n# 160 f(x): -0.090362|grad f(p)|:0.002438250821406204\n# 170 f(x): -0.090404|grad f(p)|:0.002472221074327323\n# 180 f(x): -0.090441|grad f(p)|:0.0025051377726827166\n# 190 f(x): -0.090472|grad f(p)|:0.002535721310831389\n# 200 f(x): -0.090498|grad f(p)|:0.0025633813700434637\n# 210 f(x): -0.090513|grad f(p)|:0.0025832821804127513\n# 220 f(x): -0.090513|grad f(p)|:0.0025832821804127513\n# 230 f(x): -0.090513|grad f(p)|:0.0025832821792817493\n# 240 f(x): -0.090513|grad f(p)|:0.0025832821770197098\n# 250 f(x): -0.090513|grad f(p)|:0.0025832821747576924\n# 260 f(x): -0.090513|grad f(p)|:0.002583282172495683\n# 270 f(x): -0.090513|grad f(p)|:0.0025832821702336567\n# 280 f(x): -0.090513|grad f(p)|:0.002583282167971658\n# 290 f(x): -0.090513|grad f(p)|:0.002583282165709656\n# 300 f(x): -0.090513|grad f(p)|:0.002583282163447637\n# 310 f(x): -0.090513|grad f(p)|:0.0025832821611855928\n# 320 f(x): -0.090513|grad f(p)|:0.0025832821589235814\n# 330 f(x): -0.090513|grad f(p)|:0.002583282156661572\n# 340 f(x): -0.090513|grad f(p)|:0.0025832821543995727\n# 350 f(x): -0.090513|grad f(p)|:0.002583282152137569\n# 360 f(x): -0.090513|grad f(p)|:0.0025832821498755487\n# 370 f(x): -0.090513|grad f(p)|:0.0025832821476135036\n# 380 f(x): -0.090513|grad f(p)|:0.0025832821453515035\n# 390 f(x): -0.090513|grad f(p)|:0.0025832821430894675\n# 400 f(x): -0.090513|grad f(p)|:0.0025832821408274405\n# 410 f(x): -0.090513|grad f(p)|:0.002583282138565445\n# 420 f(x): -0.090513|grad f(p)|:0.002583282136303441\n# 430 f(x): -0.090513|grad f(p)|:0.00258328213404143\n# 440 f(x): -0.090513|grad f(p)|:0.002583282131779385\n# 450 f(x): -0.090513|grad f(p)|:0.0025832821295174104\n# 460 f(x): -0.090513|grad f(p)|:0.002583282127255372\n# 470 f(x): -0.090513|grad f(p)|:0.002583282124993372\n# 480 f(x): -0.090513|grad f(p)|:0.0025832821227313313\n# 490 f(x): -0.090513|grad f(p)|:0.0025832821204693065\n# 500 f(x): -0.090513|grad f(p)|:0.002583282118207321\n# 510 f(x): -0.090513|grad f(p)|:0.0025832821159453034\n# 520 f(x): -0.090513|grad f(p)|:0.0025832821136832665\n# 530 f(x): -0.090513|grad f(p)|:0.0025832821114212673\n# 540 f(x): -0.090513|grad f(p)|:0.002583282109159243\n# 550 f(x): -0.090513|grad f(p)|:0.002583282106897217\n# 560 f(x): -0.090513|grad f(p)|:0.002583282104635213\n# 570 f(x): -0.090513|grad f(p)|:0.0025832821023731955\n# 580 f(x): -0.090513|grad f(p)|:0.0025832821001112094\n# 590 f(x): -0.090513|grad f(p)|:0.002583282097849167\n# 600 f(x): -0.090513|grad f(p)|:0.0025832820955871503\n# 610 f(x): -0.090513|grad f(p)|:0.0025832820933251325\n# 620 f(x): -0.090513|grad f(p)|:0.002583282091063122\n# 630 f(x): -0.090513|grad f(p)|:0.0025832820888010873\n# 640 f(x): -0.090513|grad f(p)|:0.0025832820865390785\n# 650 f(x): -0.090513|grad f(p)|:0.0025832820842770442\n# 660 f(x): -0.090513|grad f(p)|:0.0025832820820150576\n# 670 f(x): -0.090513|grad f(p)|:0.0025832820797530767\n# 680 f(x): -0.090513|grad f(p)|:0.0025832820774910523\n# 690 f(x): -0.090513|grad f(p)|:0.0025832820752290362\n# 700 f(x): -0.090513|grad f(p)|:0.002583282072966992\n# 710 f(x): -0.090513|grad f(p)|:0.002583282070704973\n# 720 f(x): -0.090513|grad f(p)|:0.0025832820684429532\n# 730 f(x): -0.090513|grad f(p)|:0.002583282066180946\n# 740 f(x): -0.090513|grad f(p)|:0.0025832820639189306\n# 750 f(x): -0.090513|grad f(p)|:0.0025832820616569214\n# 760 f(x): -0.090513|grad f(p)|:0.00258328205939488\n# 770 f(x): -0.090513|grad f(p)|:0.002583282057132884\n# 780 f(x): -0.090513|grad f(p)|:0.0025832820548708406\n# 790 f(x): -0.090513|grad f(p)|:0.002583282052608873\n# 800 f(x): -0.090513|grad f(p)|:0.002583282050346837\n# 810 f(x): -0.090513|grad f(p)|:0.0025832820480848214\n# 820 f(x): -0.090513|grad f(p)|:0.0025832820458228205\n# 830 f(x): -0.090513|grad f(p)|:0.0025832820435608087\n# 840 f(x): -0.090513|grad f(p)|:0.0025832820412987944\n# 850 f(x): -0.090513|grad f(p)|:0.0025832820390367726\n# 860 f(x): -0.090513|grad f(p)|:0.002583282036774768\n# 870 f(x): -0.090513|grad f(p)|:0.002583282034512706\n# 880 f(x): -0.090513|grad f(p)|:0.002583282032250709\n# 890 f(x): -0.090513|grad f(p)|:0.0025832820299886896\n# 900 f(x): -0.090513|grad f(p)|:0.002583282027726701\n# 910 f(x): -0.090513|grad f(p)|:0.002583282025464682\n# 920 f(x): -0.090513|grad f(p)|:0.0025832820232026517\n# 930 f(x): -0.090513|grad f(p)|:0.002583282020940619\n# 940 f(x): -0.090513|grad f(p)|:0.0025832820186786334\n# 950 f(x): -0.090513|grad f(p)|:0.002583282016416595\n# 960 f(x): -0.090513|grad f(p)|:0.0025832820141545986\n# 970 f(x): -0.090513|grad f(p)|:0.0025832820118925717\n# 980 f(x): -0.090513|grad f(p)|:0.0025832820096305525\n# 990 f(x): -0.090513|grad f(p)|:0.002583282007368543\n# 1000 f(x): -0.090513|grad f(p)|:0.0025832820051065217","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.089673|grad f(p)|:0.0033633987039373655","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;\n evaluation=InplaceEvaluation(),\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.089673|grad f(p)|:0.00336339870393737","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $p0;\n objective_type=:Euclidean,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 10 samples with 1 evaluation.\n Range (min … max): 488.560 ms … 542.951 ms ┊ GC (min … max): 3.26% … 3.55%\n Time (median): 498.677 ms ┊ GC (median): 3.22%\n Time (mean ± σ): 503.851 ms ± 17.951 ms ┊ GC (mean ± σ): 3.27% ± 0.11%\n\n █ ▁ ▁▁ ▁▁▁ ▁ ▁ \n █▁█▁██▁▁▁▁▁▁▁▁▁▁▁███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 489 ms Histogram: frequency by time 543 ms <\n\n Memory estimate: 1.97 GiB, allocs estimate: 40408.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n objective_type=:Euclidean\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 294 samples with 1 evaluation.\n Range (min … max): 12.991 ms … 148.108 ms ┊ GC (min … max): 0.00% … 87.36%\n Time (median): 15.369 ms ┊ GC (median): 3.17%\n Time (mean ± σ): 17.014 ms ± 8.238 ms ┊ GC (mean ± σ): 7.16% ± 7.03%\n\n ▁ █ ▂ \n ▆▁▁▇▅█▃▆█▇▅█▄▁▆▃▂▂▁▁▂▅▂▃▅▂▁▃▃▄▂▃▅▃▁▁▁▁▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▃▁▂▃ ▃\n 13 ms Histogram: frequency by time 28.6 ms <\n\n Memory estimate: 37.43 MiB, allocs estimate: 2920.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 506 samples with 1 evaluation.\n Range (min … max): 8.717 ms … 152.718 ms ┊ GC (min … max): 0.00% … 90.61%\n Time (median): 8.884 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 9.881 ms ± 6.537 ms ┊ GC (mean ± σ): 4.94% ± 5.90%\n\n ▆█▂ ▂▃ ▁ \n ███▄▁▁▆▆██▇▄▆██▆▇▄▅▇▄▄▁▁▆▄▇▄▆▁▅▅▆▁▅▅▄▁▁▄▅▅▁▆▇▇▇▄▄▄▄▁▁▁▁▁▁▄▄ ▇\n 8.72 ms Histogram: log(frequency) by time 14.7 ms <\n\n Memory estimate: 10.77 MiB, allocs estimate: 2899.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q1, q) for q ∈ [q2,q3] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 4.471485799821605e-15\n 0.048047538209352994","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q3, q) for q ∈ [q4,q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 0.08269488012454579\n 0.08269488012454579","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Which we can also see in the final cost, comparing it to the Eigenvalue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"5-element Vector{Float64}:\n 2.76900562450888e-5\n 2.769005624428389e-5\n -0.000836208332542443\n 3.191891195797325e-16\n 3.191891195797325e-16","category":"page"},{"location":"examples/RayleighQuotient/#Summary","page":"The Rayleigh Quotient","title":"Summary","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.","category":"page"},{"location":"examples/RayleighQuotient/#Literature","page":"The Rayleigh Quotient","title":"Literature","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"N. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\n","category":"page"},{"location":"helpers/error_measures/#Error-measures","page":"Error measures","title":"Error measures","text":"","category":"section"},{"location":"helpers/error_measures/","page":"Error measures","title":"Error measures","text":"Modules = [ManoptExamples]\nPages = [\"ErrorMeasures.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"helpers/error_measures/#ManoptExamples.mean_average_error-Tuple{ManifoldsBase.AbstractManifold, Any, Any}","page":"Error measures","title":"ManoptExamples.mean_average_error","text":"mean_average_error(M,x,y)\n\nCompute the (mean) squared error between the two points x and y on the PowerManifold manifold M.\n\n\n\n\n\n","category":"method"},{"location":"helpers/error_measures/#ManoptExamples.mean_squared_error-Union{Tuple{mT}, Tuple{mT, Any, Any}} where mT<:ManifoldsBase.AbstractManifold","page":"Error measures","title":"ManoptExamples.mean_squared_error","text":"mean_squared_error(M, p, q)\n\nCompute the (mean) squared error between the two points p and q on the (power) manifold M.\n\n\n\n\n\n","category":"method"},{"location":"#Welcome-to-ManoptExample.jl","page":"Home","title":"Welcome to ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"ManoptExamples.ManoptExamples","category":"page"},{"location":"#ManoptExamples.ManoptExamples","page":"Home","title":"ManoptExamples.ManoptExamples","text":"🏔️⛷️ ManoptExamples.jl – A collection of research and tutorial example problems for Manopt.jl\n\n📚 Documentation: juliamanifolds.github.io/ManoptExamples.jl\n📦 Repository: github.com/JuliaManifolds/ManoptExamples.jl\n💬 Discussions: github.com/JuliaManifolds/ManoptExamples.jl/discussions\n🎯 Issues: github.com/JuliaManifolds/ManoptExamples.jl/issues\n\n\n\n\n\n","category":"module"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/v0.1.7/siteinfo.js b/v0.1.7/siteinfo.js new file mode 100644 index 0000000..6adc786 --- /dev/null +++ b/v0.1.7/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.7"; diff --git a/v0.1.8/.documenter-siteinfo.json b/v0.1.8/.documenter-siteinfo.json new file mode 100644 index 0000000..32a7753 --- /dev/null +++ b/v0.1.8/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-06-12T12:48:32","documenter_version":"1.4.1"}} \ No newline at end of file diff --git a/v0.1.8/assets/documenter.js b/v0.1.8/assets/documenter.js new file mode 100644 index 0000000..c6562b5 --- /dev/null +++ b/v0.1.8/assets/documenter.js @@ -0,0 +1,1050 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let timer = 0; +var isExpanded = true; + +$(document).on("click", ".docstring header", function () { + let articleToggleTitle = "Expand docstring"; + + debounce(() => { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function (event) { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + let animationSpeed = event.noToggleAnimation ? 0 : 400; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(animationSpeed); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(animationSpeed); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let meta = $("div[data-docstringscollapsed]").data(); + + if (meta?.docstringscollapsed) { + $("#documenter-article-toggle-button").trigger({ + type: "click", + noToggleAnimation: true, + }); + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +/* +To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +PSEUDOCODE: + +Searching happens automatically as the user types or adjusts the selected filters. +To preserve responsiveness, as much as possible of the slow parts of the search are done +in a web worker. Searching and result generation are done in the worker, and filtering and +DOM updates are done in the main thread. The filters are in the main thread as they should +be very quick to apply. This lets filters be changed without re-searching with minisearch +(which is possible even if filtering is on the worker thread) and also lets filters be +changed _while_ the worker is searching and without message passing (neither of which are +possible if filtering is on the worker thread) + +SEARCH WORKER: + +Import minisearch + +Build index + +On message from main thread + run search + find the first 200 unique results from each category, and compute their divs for display + note that this is necessary and sufficient information for the main thread to find the + first 200 unique results from any given filter set + post results to main thread + +MAIN: + +Launch worker + +Declare nonconstant globals (worker_is_running, last_search_text, unfiltered_results) + +On text update + if worker is not running, launch_search() + +launch_search + set worker_is_running to true, set last_search_text to the search text + post the search query to worker + +on message from worker + if last_search_text is not the same as the text in the search field, + the latest search result is not reflective of the latest search query, so update again + launch_search() + otherwise + set worker_is_running to false + + regardless, display the new search results to the user + save the unfiltered_results as a global + update_search() + +on filter click + adjust the filter selection + update_search() + +update_search + apply search filters by looping through the unfiltered_results and finding the first 200 + unique results that match the filters + + Update the DOM +*/ + +/////// SEARCH WORKER /////// + +function worker_function(documenterSearchIndex, documenterBaseURL, filters) { + importScripts( + "https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min.js" + ); + + let data = documenterSearchIndex.map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; + }); + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", + ]); + + let index = new MiniSearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + + word = word.toLowerCase(); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not + // find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + prefix: true, + boost: { title: 100 }, + fuzzy: 2, + }, + }); + + index.addAll(data); + + /** + * Used to map characters to HTML entities. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const htmlEscapes = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + }; + + /** + * Used to match HTML entities and HTML characters. + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + const reUnescapedHtml = /[&<>"']/g; + const reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** + * Escape function from lodash + * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts + */ + function escape(string) { + return string && reHasUnescapedHtml.test(string) + ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) + : string || ""; + } + + /** + * Make the result component given a minisearch result data object and the value + * of the search input as queryString. To view the result object structure, refer: + * https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ + function make_search_result(result, querystring) { + let search_divider = `
                      `; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + + let textindex = new RegExp(`${querystring}`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + text = text.length ? escape(text) : ""; + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`${escape(querystring)}`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
                      +
                      ${escape(result.title)}
                      +
                      ${result.category}
                      +
                      +

                      + ${display_result} +

                      +
                      + ${display_link} +
                      +
                      + ${search_divider} + `; + + return result_div; + } + + self.onmessage = function (e) { + let query = e.data; + let results = index.search(query, { + filter: (result) => { + // Only return relevant results + return result.score >= 1; + }, + }); + + // Pre-filter to deduplicate and limit to 200 per category to the extent + // possible without knowing what the filters are. + let filtered_results = []; + let counts = {}; + for (let filter of filters) { + counts[filter] = 0; + } + let present = {}; + + for (let result of results) { + cat = result.category; + cnt = counts[cat]; + if (cnt < 200) { + id = cat + "---" + result.location; + if (present[id]) { + continue; + } + present[id] = true; + filtered_results.push({ + location: result.location, + category: cat, + div: make_search_result(result, query), + }); + } + } + + postMessage(filtered_results); + }; +} + +// `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in JavaScript! +const filters = [ + ...new Set(documenterSearchIndex["docs"].map((x) => x.category)), +]; +const worker_str = + "(" + + worker_function.toString() + + ")(" + + JSON.stringify(documenterSearchIndex["docs"]) + + "," + + JSON.stringify(documenterBaseURL) + + "," + + JSON.stringify(filters) + + ")"; +const worker_blob = new Blob([worker_str], { type: "text/javascript" }); +const worker = new Worker(URL.createObjectURL(worker_blob)); + +/////// SEARCH MAIN /////// + +// Whether the worker is currently handling a search. This is a boolean +// as the worker only ever handles 1 or 0 searches at a time. +var worker_is_running = false; + +// The last search text that was sent to the worker. This is used to determine +// if the worker should be launched again when it reports back results. +var last_search_text = ""; + +// The results of the last search. This, in combination with the state of the filters +// in the DOM, is used compute the results to display on calls to update_search. +var unfiltered_results = []; + +// Which filter is currently selected +var selected_filter = ""; + +$(document).on("input", ".documenter-search-input", function (event) { + if (!worker_is_running) { + launch_search(); + } +}); + +function launch_search() { + worker_is_running = true; + last_search_text = $(".documenter-search-input").val(); + worker.postMessage(last_search_text); +} + +worker.onmessage = function (e) { + if (last_search_text !== $(".documenter-search-input").val()) { + launch_search(); + } else { + worker_is_running = false; + } + + unfiltered_results = e.data; + update_search(); +}; + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + selected_filter = ""; + } else { + selected_filter = $(this).text().toLowerCase(); + } + + // This updates search results and toggles classes for UI: + update_search(); +}); + +/** + * Make/Update the search component + */ +function update_search() { + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + if (selected_filter == "") { + results = unfiltered_results; + } else { + results = unfiltered_results.filter((result) => { + return selected_filter == result.category.toLowerCase(); + }); + } + + let search_result_container = ``; + let modal_filters = make_modal_body_filters(); + let search_divider = `
                      `; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + for (var i = 0, n = results.length; i < n && count < 200; ++i) { + let result = results[i]; + if (result.location && !links.includes(result.location)) { + search_results += result.div; + count++; + links.push(result.location); + } + } + + if (count == 1) { + count_str = "1 result"; + } else if (count == 200) { + count_str = "200+ results"; + } else { + count_str = count + " results"; + } + let result_count = `
                      ${count_str}
                      `; + + search_result_container = ` +
                      + ${modal_filters} + ${search_divider} + ${result_count} +
                      + ${search_results} +
                      +
                      + `; + } else { + search_result_container = ` +
                      + ${modal_filters} + ${search_divider} +
                      0 result(s)
                      +
                      +
                      No result found!
                      + `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(` +
                      Type something to get started!
                      + `); + } +} + +/** + * Make the modal filter html + * + * @returns string + */ +function make_modal_body_filters() { + let str = filters + .map((val) => { + if (selected_filter == val.toLowerCase()) { + return `${val}`; + } else { + return `${val}`; + } + }) + .join(""); + + return ` +
                      + Filters: + ${str} +
                      `; +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +$(document).ready(function () { + let search_modal_header = ` + + `; + + let initial_search_body = ` +
                      Type something to get started!
                      + `; + + let search_modal_footer = ` +
                      + + Ctrl + + / to search + + esc to close +
                      + `; + + $(document.body).append( + ` + + ` + ); + + document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); + }); + + document + .querySelector(".close-search-modal") + .addEventListener("click", () => { + closeModal(); + }); + + $(document).on("click", ".search-result-link", function () { + closeModal(); + }); + + document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; + }); + + // Functions to open and close a modal + function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); + } + + function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
                      Type something to get started!
                      + `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); + } + + document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "" + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "" + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/v0.1.8/assets/themes/documenter-dark.css b/v0.1.8/assets/themes/documenter-dark.css new file mode 100644 index 0000000..1d71701 --- /dev/null +++ b/v0.1.8/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-info-light{color:#ebf7ff !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#b9e2fe !important}.has-background-info-light{background-color:#ebf7ff !important}.has-text-info-dark{color:#0e9dfb !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#40b1fc !important}.has-background-info-dark{background-color:#0e9dfb !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-success-light{color:#ebfff3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#b8ffd6 !important}.has-background-success-light{background-color:#ebfff3 !important}.has-text-success-dark{color:#00eb64 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#1fff7e !important}.has-background-success-dark{background-color:#00eb64 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-warning-light{color:#fffaeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#ffedb8 !important}.has-background-warning-light{background-color:#fffaeb !important}.has-text-warning-dark{color:#d19c00 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffbf05 !important}.has-background-warning-dark{background-color:#d19c00 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-danger-light{color:#fdeeec !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fac3bd !important}.has-background-danger-light{background-color:#fdeeec !important}.has-text-danger-dark{color:#ec311d !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f05c4c !important}.has-background-danger-dark{background-color:#ec311d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:#024c7d;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#def2fe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#d2edfe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:#008438;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#deffec;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#d1ffe5;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:#ad8100;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fff7de;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fff3d1;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#fce3e0;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#fcd8d5;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#ebf7ff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#0e9dfb}html.theme--documenter-dark .message.is-success{background-color:#ebfff3}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#00eb64}html.theme--documenter-dark .message.is-warning{background-color:#fffaeb}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#d19c00}html.theme--documenter-dark .message.is-danger{background-color:#fdeeec}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#ec311d}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#024c7d;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#024c7d}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#024c7d}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#008438;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#008438}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#008438}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#ad8100;color:#fff}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ad8100}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#ad8100}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#9e1b0d}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#9e1b0d}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#024c7d !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#008438 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#ad8100 !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#9e1b0d !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f;overflow:auto}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content a:hover code{color:#1dd2af}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/v0.1.8/assets/themes/documenter-light.css b/v0.1.8/assets/themes/documenter-light.css new file mode 100644 index 0000000..07f9d08 --- /dev/null +++ b/v0.1.8/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-info-light{color:#ecf7fe !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#bde2fa !important}.has-background-info-light{background-color:#ecf7fe !important}.has-text-info-dark{color:#0e72b4 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#1190e3 !important}.has-background-info-dark{background-color:#0e72b4 !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-success-light{color:#eefcf3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c2f4d4 !important}.has-background-success-light{background-color:#eefcf3 !important}.has-text-success-dark{color:#198f43 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#21bb57 !important}.has-background-success-dark{background-color:#198f43 !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#947600 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#c79f00 !important}.has-background-warning-dark{background-color:#947600 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-danger-light{color:#ffeceb !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#ffbbb8 !important}.has-background-danger-light{background-color:#ffeceb !important}.has-text-danger-dark{color:#f50c00 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#ff3429 !important}.has-background-danger-dark{background-color:#f50c00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:#209cee;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e0f1fd;border-color:transparent;color:#0e72b4}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#d4ecfc;border-color:transparent;color:#0e72b4}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:#22c35b;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#eefcf3;color:#198f43}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e3faeb;border-color:transparent;color:#198f43}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#d8f8e3;border-color:transparent;color:#198f43}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:#ffdd57;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:#da0b00;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#ffe0de;border-color:transparent;color:#f50c00}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#ffd3d1;border-color:transparent;color:#f50c00}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-success.is-light{background-color:#eefcf3;color:#198f43}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#da0b00;color:#fff}.notification.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ecf7fe;color:#0e72b4}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#eefcf3;color:#198f43}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#947600}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#ffeceb;color:#f50c00}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#ecf7fe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#0e72b4}.message.is-success{background-color:#eefcf3}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#198f43}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#ffeceb}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#f50c00}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#209cee;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#209cee}.panel.is-info .panel-block.is-active .panel-icon{color:#209cee}.panel.is-success .panel-heading{background-color:#22c35b;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#22c35b}.panel.is-success .panel-block.is-active .panel-icon{color:#22c35b}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#da0b00;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#da0b00}.panel.is-danger .panel-block.is-active .panel-icon{color:#da0b00}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#209cee !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#22c35b !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#ffdd57 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#da0b00 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb;overflow:auto}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content a:hover code{color:#363636}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1;overflow-x:hidden}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/v0.1.8/assets/themeswap.js b/v0.1.8/assets/themeswap.js new file mode 100644 index 0000000..9f5eebe --- /dev/null +++ b/v0.1.8/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/v0.1.8/assets/warner.js b/v0.1.8/assets/warner.js new file mode 100644 index 0000000..3f6f5d0 --- /dev/null +++ b/v0.1.8/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
                      Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/v0.1.8/changelog/index.html b/v0.1.8/changelog/index.html new file mode 100644 index 0000000..5caee3a --- /dev/null +++ b/v0.1.8/changelog/index.html @@ -0,0 +1,2 @@ + +Changelog · ManoptExamples.jl

                      Changelog

                      All notable changes to this Julia package will be documented in this file.

                      The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

                      [0.1.8] – 12/06/2024

                      Changed

                      • use range compatible with Julia 1.6 and hence lower the compatibility entry for Julia again.

                      [0.1.7] – 07/06/2024

                      Changed

                      • make Manopt.jl a weak dependency and load functions that require parts of it only load as an extension. This makes it easier to use the examples in the tests of Manopt itself.

                      [0.1.6] – 22/03/2024

                      Added

                      • Hyperparameter optimization example.

                      [0.1.3] – 11/12/2023

                      Added

                      • Total variation Minimization cost, proxes, and an example
                      • Bézier curve cost, gradients, and an example.

                      [0.1.3] – 16/09/2023

                      Added

                      • Rayleigh Quotient functions added
                      • an example illustrating Euclidean gradient/HEssian conversion
                      • Add Literature with DocumenterCitations

                      [0.1.2] – 13/06/2023

                      Added

                      • Update examples to use Quarto
                      • Add DC examples

                      [0.1.1] – 01/03/2023

                      Added

                      • Rosenbrock function and examples

                      [0.1.0] – 18/02/2023

                      Added

                      • Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested
                      • Setup Documentation to provide one example Quarto file for every example objective to illustrate how to use them.
                      diff --git a/v0.1.8/contributing/index.html b/v0.1.8/contributing/index.html new file mode 100644 index 0000000..92e67e5 --- /dev/null +++ b/v0.1.8/contributing/index.html @@ -0,0 +1,2 @@ + +Contributing to ManoptExamples.jl · ManoptExamples.jl

                      Contributing to Manopt.jl

                      First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.

                      The following is a set of guidelines to ManoptExamples.jl.

                      Table of Contents

                      I just have a question

                      The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.

                      How can I file an issue?

                      If you found a bug or want to propose a feature, we track our issues within the GitHub repository.

                      How can I contribute?

                      Add an objective

                      The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.

                      If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.

                      If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:

                      • cost functions are always of the form cost_ and a fitting name
                      • gradient functions are always of the gradient_ and a fitting name, followed by an !

                      for in-place gradients and by !! if it is a struct that can provide both.

                      It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.

                      Add an example

                      If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).

                      Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.

                      Code style

                      We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.

                      We also follow a few internal conventions:

                      • Any implemented function should be accompanied by its mathematical formulae if a closed form exists.
                      • within a file the structs should come first and functions second. The only exception are constructors for the structs
                      • within both blocks an alphabetical order is preferable.
                      • The above implies that the mutating variant of a function follows the non-mutating variant.
                      • There should be no dangling = signs.
                      • Always add a newline between things of different types (struct/method/const).
                      • Always add a newline between methods for different functions (including in-place/non-mutating variants).
                      • Prefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.
                      • All import/using/include should be in the main module file.
                      • There should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]
                      • the Quarto Markdown files are excluded from this formatting.
                      diff --git a/v0.1.8/data/index.html b/v0.1.8/data/index.html new file mode 100644 index 0000000..1b432c5 --- /dev/null +++ b/v0.1.8/data/index.html @@ -0,0 +1,13 @@ + +Data · ManoptExamples.jl

                      Data sets

                      Signals on manifolds

                      ManoptExamples.LemniscateMethod
                      Lemniscate(t::Float; kwargs...)
                      +Lemniscate(n::integer; interval=[0.0, 2π], kwargs...)

                      generate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.

                      To be precise on the manifold M we use the tangent space at p and generate the curve

                      \[γ(t) \frac{a}{}\sin^2(t) + 1 \begin{pmatrix} \cos(t) \\ \cos(t)\sin(t) \end{pmatrix}\]

                      in the plane spanned by X and Y in the tangent space. Note that this curve is $2π$-periodic and a is the half-width of the curve.

                      To reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.

                      THe second variant generates n points equispaced in ìnterval` and calls the first variant.

                      Keywords

                      • manifold - (Sphere(2)) the manifold to build the lemniscate on
                      • p - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate
                      • a – (π/2.0) half-width of the Lemniscate
                      • X – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.
                      • Y – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.
                      source
                      ManoptExamples.artificial_S1_signalFunction
                      artificial_S1_signal([pts=500])

                      generate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to ``[BLSW14].

                      Optional

                      • pts: (500) number of points to sample the function
                      source
                      ManoptExamples.artificial_S1_signalMethod
                      artificial_S1_signal(x)

                      evaluate the example signal $f(x), x ∈ [0,1]$, of phase-valued data introduces in Sec. 5.1 of [BLSW14] for values outside that interval, this Signal is missing.

                      source
                      ManoptExamples.artificial_S1_slope_signalFunction
                      artificial_S1_slope_signal([pts=500, slope=4.])

                      Creates a Signal of (phase-valued) data represented on the Circle with increasing slope.

                      Optional

                      • pts: (500) number of points to sample the function.
                      • slope: (4.0) initial slope that gets increased afterwards

                      This data set was introduced for the numerical examples in [BLSW14]

                      source
                      ManoptExamples.artificial_S2_composite_Bezier_curveMethod
                      artificial_S2_composite_Bezier_curve()

                      Generate a composite Bézier curve on the [BG18].

                      It consists of 4 egments connecting the points

                      \[\mathbf d_0 = \begin{pmatrix} 0\\0\\1\end{pmatrix},\quad +\mathbf d_1 = \begin{pmatrix} 0\\-1\\0\end{pmatrix},\quad +\mathbf d_2 = \begin{pmatrix} -1\\0\\0\end{pmatrix},\text{ and } +\mathbf d_3 = \begin{pmatrix} 0\\0\\-1\end{pmatrix}.\]

                      where instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be $C^1$.

                      We define

                      \[X_0 = \frac{π}{8\sqrt{2}}\begin{pmatrix}1\\-1\\0\end{pmatrix},\quad +X_1 = \frac{π}{4\sqrt{2}}\begin{pmatrix}1\\0\\1\end{pmatrix},\quad +X_2 = \frac{π}{4\sqrt{2}}\begin{pmatrix}0\\1\\-1\end{pmatrix},\text{ and } +X_3 = \frac{π}{8\sqrt{2}}\begin{pmatrix}-1\\1\\0\end{pmatrix},\]

                      where we defined each $X_i \in T_{d_i}\mathbb S^2$. We defined three BezierSegments

                      of cubic Bézier curves as follows

                      \[\begin{align*} +b_{0,0} &= d_0, \quad & b_{1,0} &= \exp_{d_0}X_0, \quad & b_{2,0} &= \exp_{d_1}X_1, \quad & b_{3,0} &= d_1\\ +b_{0,1} &= d_1, \quad & b_{1,1} &= \exp_{d_1}(-X_1), \quad & b_{2,1} &= \exp_{d_2}X_2, \quad & b_{3,1} &= d_2\\ +b_{0,2} &= d_2, \quad & b_{1,1} &= \exp_{d_2}(-X_2), \quad & b_{2,2} &= \exp_{d_3}X_3, \quad & b_{3,2} &= d_3. +\end{align*}\]

                      source

                      images on manifolds

                      ManoptExamples.artificial_S2_rotation_imageFunction
                      artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])

                      Create an image with a rotation on each axis as a parametrization.

                      Optional Parameters

                      • pts: (64) number of pixels along one dimension
                      • rotations: ((.5,.5)) number of total rotations performed on the axes.

                      This dataset was used in the numerical example of Section 5.1 of [BBSW16].

                      source
                      ManoptExamples.artificial_SPD_imageFunction
                      artificial_SPD_image([pts=64, stepsize=1.5])

                      create an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.

                      This dataset was used in the numerical example of Section 5.2 of [BBSW16].

                      source
                      ManoptExamples.artificial_SPD_image2Function
                      artificial_SPD_image2([pts=64, fraction=.66])

                      create an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.

                      This data set was introduced in the numerical examples of Section of [BPS16]

                      source

                      Literature

                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [BPS16]
                      R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
                      [LNPS17]
                      F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
                      diff --git a/v0.1.8/examples/Bezier-curves/index.html b/v0.1.8/examples/Bezier-curves/index.html new file mode 100644 index 0000000..fad0b30 --- /dev/null +++ b/v0.1.8/examples/Bezier-curves/index.html @@ -0,0 +1,68 @@ + +Minimizing the Acceleration of Bézier Curves on the Sphere · ManoptExamples.jl

                      Minimizing the Acceleration of Bézier Curves on the Sphere

                      Ronny Bergmann 2023-06-06

                      using Manifolds, Manopt, ManoptExamples

                      Introduction

                      Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as

                      function bezier(M::AbstractManifold, t, pts::NTuple)
                      +    p = bezier(M, t, pts[1:(end - 1)])
                      +    q = bezier(M, t, pts[2:end])
                      +    return shortest_geodesic(M, p, q, t)
                      +end
                      +function bezier(M::AbstractManifold, t, pts::NTuple{2})
                      +    return shortest_geodesic(M, pts[1], pts[2], t)
                      +end

                      which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.

                      In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].

                      using ManoptExamples:
                      +    artificial_S2_composite_Bezier_curve,
                      +    BezierSegment,
                      +    de_Casteljau,
                      +    get_Bezier_degrees,
                      +    get_Bezier_inner_points,
                      +    get_Bezier_junctions,
                      +    get_Bezier_junction_tangent_vectors,
                      +    get_Bezier_points,
                      +    get_Bezier_segments,
                      +    grad_L2_acceleration_Bezier,
                      +    L2_acceleration_Bezier

                      This notebook reproduces the example form Section 5.2 in [BG18].

                      The following image illustrates how the de-Casteljau algorithm works for one segment.

                      A Bezier segment and illustration of the de-Casteljau algorithm

                      Approximating data by a curve with minimal accelartion

                      We first load our example data

                      M = Sphere(2)
                      +B = artificial_S2_composite_Bezier_curve()
                      +data_points = get_Bezier_junctions(M, B)

                      Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.

                      The original curve

                      We continue to recude the points, since we “know” sme points due to the $C^1$ property: the second to last control point of the first segment $b_{0,2}$, the joint junction point connecting both segments $b_{0,3}=b_{1,0}$ and the second control point $b_{1,1}$ of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.

                      We can use this reduced form as the variable to optimize and the one from the data as our initial point.

                      pB = get_Bezier_points(M, B, :differentiable)
                      +N = PowerManifold(M, NestedPowerRepresentation(), length(pB))
                      PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)

                      And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the $λ=10$

                      curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient
                      +λ = 10.0
                      +function f(M, pB)
                      +    return L2_acceleration_Bezier(
                      +        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
                      +    )
                      +end
                      +function grad_f(M, pB)
                      +    return grad_L2_acceleration_Bezier(
                      +        M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points
                      +    )
                      +end
                      grad_f (generic function with 1 method)

                      Then we can optimize

                      x0 = pB
                      +pB_opt = gradient_descent(
                      +    N,
                      +    f,
                      +    grad_f,
                      +    x0;
                      +    stepsize=ArmijoLinesearch(N;
                      +        initial_stepsize=1.0,
                      +        retraction_method=ExponentialRetraction(),
                      +        contraction_factor=0.5,
                      +        sufficient_decrease=0.001,
                      +    ),
                      +    stopping_criterion=StopWhenChangeLess(1e-5) |
                      +                       StopWhenGradientNormLess(1e-7) |
                      +                       StopAfterIteration(300),
                      +    debug=[
                      +        :Iteration,
                      +        " | ",
                      +        :Cost,
                      +        " | ",
                      +        DebugGradientNorm(),
                      +        " | ",
                      +        DebugStepsize(),
                      +        " | ",
                      +        :Change,
                      +        "\n",
                      +        25,
                      +        :Stop,
                      +    ],
                      +);
                      Initial  | f(x): 10.647244 |  |  | 
                      +# 25     | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281
                      +# 50     | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780
                      +# 75     | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590
                      +# 100    | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745
                      +The algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.

                      And we can again look at the result

                      The result looks as

                      The resulting curve

                      where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.

                      [ABBR23]
                      S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      diff --git a/v0.1.8/examples/Difference-of-Convex-Benchmark/index.html b/v0.1.8/examples/Difference-of-Convex-Benchmark/index.html new file mode 100644 index 0000000..635f899 --- /dev/null +++ b/v0.1.8/examples/Difference-of-Convex-Benchmark/index.html @@ -0,0 +1,165 @@ + +A Benchmark · ManoptExamples.jl

                      Benchmark of the Difference of Convex Algorithms

                      Ronny Bergmann 2023-06-06

                      Introduction

                      In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.

                      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ \ g(p) - h(p)\]

                      where $g,h\colon \mathcal M \to \mathbb R$ are geodesically convex function on the Riemannian manifold $\mathcal M$.

                      using LinearAlgebra, Random, Statistics, BenchmarkTools
                      +using Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots
                      +Random.seed!(42)

                      and we load a few nice colors

                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +teal = paul_tol["mutedteal"]

                      The DC Problem

                      We start with defining the two convex functions $g,h$ and their gradients as well as the DC problem $f$ and its gradient for the problem

                      \[ \operatorname*{arg\,min}_{p\in\mathcal M}\ \ \bigl( \log\bigr(\det(p)\bigr)\bigr)^4 - \bigl(\log \det(p) \bigr)^2.\]

                      where the critical points obtain a functional value of $-\frac{1}{4}$.

                      where $\mathcal M$ is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.

                      We first define the corresponding functions

                      g(M, p) = log(det(p))^4
                      +h(M, p) = log(det(p))^2
                      +f(M, p) = g(M, p) - h(M, p)

                      and their gradients

                      grad_g(M, p) = 4 * (log(det(p)))^3 * p
                      +grad_h(M, p) = 2 * log(det(p)) * p
                      +grad_f(M, p) = grad_g(M, p) - grad_h(M, p)

                      which we can use to verify that the gradients of $g$ and $h$ are correct. We use for that

                      n = 6
                      +M = SymmetricPositiveDefinite(n)
                      +p0 = log(n) * Matrix{Float64}(I, n, n);
                      +X0 = 1 / n * Matrix{Float64}(I, n, n);

                      to tall both checks

                      check_gradient(M, g, grad_g, p0, X0; plot=true)

                      and

                      check_gradient(M, h, grad_h, p0, X0; plot=true)

                      which both pass the test. We continue to define their inplace variants

                      function grad_g!(M, X, p)
                      +    copyto!(M, X, p)
                      +    X .*= 4 * (log(det(p)))^3
                      +    return X
                      +end
                      +function grad_h!(M, X, p)
                      +    copyto!(M, X, p)
                      +    X .*= 2 * (log(det(p)))
                      +    return X
                      +end
                      +function grad_f!(M, X, p)
                      +    grad_g!(M, X, p)
                      +    Y = copy(M, p, X)
                      +    grad_h!(M, Y, p)
                      +    X .-= Y
                      +    return X
                      +end

                      And compare times for both algorithms, with a bit of debug output.

                      @time p_min_dca = difference_of_convex_algorithm(
                      +    M,
                      +    f,
                      +    g,
                      +    grad_h!,
                      +    p0;
                      +    grad_g=grad_g!,
                      +    gradient=grad_f!,
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[
                      +        :Iteration,
                      +        (:Cost, "f(p): %1.9f"),
                      +        (:GradientNorm, " |grad_f(p)|: %1.9f"),
                      +        (:Change, " |δp|: %1.9f"),
                      +        :Stop,
                      +        5,
                      +        "\n",
                      +    ],
                      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +);
                      Initial f(p): 137.679053470
                      +# 5     f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127
                      +# 10    f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103
                      +# 15    f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574
                      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011
                      +The algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.
                      +  3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)

                      The cost is

                      f(M, p_min_dca)
                      -0.25000000000000006

                      Similarly the DCPPA performs

                      @time p_min_dcppa = difference_of_convex_proximal_point(
                      +    M,
                      +    grad_h!,
                      +    p0;
                      +    g=g,
                      +    grad_g=grad_g!,
                      +    λ=i -> 1 / (2 * n),
                      +    cost=f,
                      +    gradient=grad_f!,
                      +    debug=[
                      +        :Iteration,
                      +        (:Cost, "f(p): %1.9f"),
                      +        " ",
                      +        (:GradientNorm, "|grad_f(p)|: %1.10f"),
                      +        (:Change, "|δp|: %1.10f"),
                      +        :Stop,
                      +        5,
                      +        "\n",
                      +    ],
                      +    evaluation=InplaceEvaluation(),
                      +    stepsize=ConstantStepsize(1.0),
                      +    stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +    sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +);
                      Initial f(p): 137.679053470 
                      +# 5     f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692
                      +# 10    f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316
                      +# 15    f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676
                      +# 20    f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968
                      +# 25    f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530
                      +# 30    f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048
                      +# 35    f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001
                      +The algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.
                      +  1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)

                      It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost

                      f(M, p_min_dcppa)
                      -0.25

                      Benchmark I: Time comparison

                      We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test

                      dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()
                      +dcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()
                      +N_max=14
                      +N = 2:N_max

                      and run a benchmark for both algorithms

                      for n in N
                      +    Mn = SymmetricPositiveDefinite(n)
                      +    pn = log(n) * Matrix{Float64}(I, n, n)
                      +    bdca = @benchmark difference_of_convex_algorithm(
                      +        $Mn,
                      +        $f,
                      +        $g,
                      +        $grad_h!,
                      +        $pn;
                      +        grad_g=$grad_g!,
                      +        gradient=$grad_f!,
                      +        evaluation=InplaceEvaluation(),
                      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +    )
                      +    dca_benchmarks[n] = bdca
                      +    bdcppa = @benchmark difference_of_convex_proximal_point(
                      +        $Mn,
                      +        $grad_h!,
                      +        $pn;
                      +        g=$g,
                      +        grad_g=$grad_g!,
                      +        λ=i -> 1 / (2 * n),
                      +        cost=f,
                      +        gradient=grad_f!,
                      +        evaluation=InplaceEvaluation(),
                      +        stepsize=ConstantStepsize(1.0),
                      +        stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +    )
                      +    dcppa_benchmarks[n] = bdcppa
                      +end

                      Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds

                      dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]
                      +dca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]
                      +dcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]
                      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Time (sec.)")
                      +plot!(dims, dca_times; label="DCA", color=indigo, linewidth=2)
                      +plot!(dims, dcppa_times; label="DCPPA", color=teal, linewidth=2)

                      Benchmark II: Iterations and cost.

                      As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.

                      N2 = [5,10,20,40,80]
                      +dims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]
                      +dca_iterations = Dict{Int,Int}()
                      +dca_costs = Dict{Int,Vector{Float64}}()
                      +dcppa_iterations = Dict{Int,Int}()
                      +dcppa_costs = Dict{Int,Vector{Float64}}()
                      @time for n in N2
                      +    println(n)
                      +    Mn = SymmetricPositiveDefinite(n)
                      +    pn = log(n) * Matrix{Float64}(I,n,n);
                      +    @time dca_st = difference_of_convex_algorithm(
                      +        Mn, f, g, grad_h!, pn;
                      +        grad_g=grad_g!,
                      +        gradient=grad_f!,
                      +        evaluation = InplaceEvaluation(),
                      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +        record = [:Iteration, :Cost],
                      +        return_state = true,
                      +    );
                      +    dca_costs[n] = get_record(dca_st, :Iteration, :Cost)
                      +    dca_iterations[n] = length(dca_costs[n])
                      +    @time dcppa_st = difference_of_convex_proximal_point(
                      +        Mn, grad_h!, pn;
                      +        g=g,
                      +        grad_g=grad_g!,
                      +        λ = i -> 1/(2*n),
                      +        cost = f,
                      +        gradient= grad_f!,
                      +        evaluation = InplaceEvaluation(),
                      +        stepsize = ConstantStepsize(1.0),
                      +        stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),
                      +        sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),
                      +        record = [:Iteration, :Cost],
                      +        return_state = true,
                      +    );
                      +    dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)
                      +    dcppa_iterations[n] = length(dcppa_costs[n])
                      +end

                      The iterations are like

                      plot(; legend=:bottomright, xlabel="manifold dimension", ylabel="Iterations")
                      +plot!(dims2, [values(dca_iterations)...]; label="DCA", color=indigo, linewidth=2)
                      +plot!(dims2, [values(dcppa_iterations)...]; label="DCPPA", color=teal, linewidth=2)

                      And for the developtment of the cost

                      where we can see that the DCA needs less iterations than the DCPPA.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [SO15]
                      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                      diff --git a/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg b/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg new file mode 100644 index 0000000..ca2e758 --- /dev/null +++ b/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-18-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg b/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg new file mode 100644 index 0000000..7baeb82 --- /dev/null +++ b/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-21-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg b/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..2131b9f --- /dev/null +++ b/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg b/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg new file mode 100644 index 0000000..d51a3c6 --- /dev/null +++ b/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-8-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg b/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg new file mode 100644 index 0000000..3c244f5 --- /dev/null +++ b/v0.1.8/examples/Difference-of-Convex-Benchmark_files/figure-commonmark/cell-9-output-1.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/Difference-of-Convex-Frank-Wolfe/index.html b/v0.1.8/examples/Difference-of-Convex-Frank-Wolfe/index.html new file mode 100644 index 0000000..040d32b --- /dev/null +++ b/v0.1.8/examples/Difference-of-Convex-Frank-Wolfe/index.html @@ -0,0 +1,216 @@ + +Frank Wolfe comparison · ManoptExamples.jl

                      A comparison of the Difference of Convex and Frank Wolfe Algorithm

                      Ronny Bergmann 2023-11-06

                      Introduction

                      In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.

                      using LinearAlgebra, Random, Statistics, BenchmarkTools
                      +using ManifoldsBase, Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots

                      and we load a few nice colors

                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +teal = paul_tol["mutedteal"]

                      We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices $\mathcal P(n)$ with the affine invariant metric. Let $q_1,\ldots,q_m \in \mathcal P(n)$ be a set of points and $\mu_1,\ldots,\mu_m$ be a set of weights, such that they sum to one. We consider then

                      \[\operatorname*{arg\,max}_{p\in\mathcal C}\ \ h(p)\]

                      with

                      \[h(p) = +\sum_{j=1}^m \mu_j d^2(p,q_i), +\quad \text{ where } +d^2(p,q_i) = \operatorname{tr}\bigl( + \log^2(p^{-\frac{1}{2}}q_jp^{-\frac{1}{2}}) +\big) +\qquad\text{and}\qquad +\mathcal C = \{ p\in {\mathcal M}\ |\ \bar L\preceq p \preceq \bar U \},\]

                      for a lower bound $L$ and an upper bound $U$ for the matrices in the positive definite sense $A \preceq B \Leftrightarrow (B-A)$ is positive semi-definite

                      When every one of the weights ${\mu}_1, \ldots {\mu}_m$ are equal, this function $h$ is known as the of the set $\{q_1, \dots, q_m\}$.

                      And for our example we set

                      Random.seed!(42)
                      +n = 20
                      +m = 100
                      +M = SymmetricPositiveDefinite(n)
                      +q = [rand(M) for _ in 1:m];
                      +w = rand(m)
                      +w ./=sum(w)

                      We use as lower and upper bound the arithmetic and geometric mean $L$ and $U$, respectively.

                      L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )
                      +U = sum( wi * qi for (wi, qi) in zip(w,q) )

                      As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use

                      p0 = (L+U)/2

                      And we can check that it is feasible

                      Common Functions

                      Given $p \in \mathcal M$, $X \in T_p\mathcal M$ on the symmetric positive definite matrices M, this method computes the closed form solution to

                      \[\operatorname*{arg\,min}_{q\in {\mathcal C}}\ \langle X, \log_p q\rangle + = \operatorname*{arg\,min}_{q\in {\mathcal C}}\ \operatorname{tr}(S\log(YqY))\]

                      where $\mathcal C = \{ q | L \preceq q \preceq U \}$, $S = p^{-1/2}Xp^{-1/2}$, and $Y=p^{-1/2}$.

                      The solution is given by $Z=X^{-1}Q\bigl( P^{\mathrm{T}}[-\operatorname{sgn}(D)]_{+}P+\hat{L}\bigr)Q^{\mathrm{T}}X^{-1}$,@ where $S=QDQ^{\mathrm{T}}$ is a diagonalization of $S$, $\hat{U}-\hat{L}=P^{\mathrm{T}}P$ with $\hat{L}=Q^{\mathrm{T}}XLXQ$ and $\hat{U}=Q^{\mathrm{T}}XUXQ$, where $[-\mbox{sgn}(D)]_{+}$ is the diagonal matrix

                      \[\operatorname{diag}\bigl( + [-\operatorname{sgn}(d_{11})]_{+}, \ldots, [-\operatorname{sgn}(d_{nn})]_{+} +\bigr)\]

                      and $D=(d_{ij})$.

                      @doc raw"""
                      +    closed_form_solution!(M, q, L, U, p X)
                      +
                      +Compute the closeed form solution of the constraint sub problem in place of ``q``.
                      +"""
                      +function closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)
                      +    # extract p^1/2 and p^{-1/2}
                      +    (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)
                      +    # Compute D & Q
                      +    e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk  = QDQ'
                      +    D = Diagonal(1.0 .* (e2.values .< 0))
                      +    Q = e2.vectors
                      +    #println(p)
                      +    Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q
                      +    Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q
                      +    P = cholesky(Hermitian(Uprime - Lprime))
                      +    z = P.U' * D * P.U + Lprime
                      +    copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)
                      +    return q
                      +end

                      The Difference of Convex Formulation

                      We use $g(p) = \iota_{\mathcal C}(p)$ as the indicator funtion of the set $\mathcal C$. We use

                      function is_pos_def(p; atol=5e-13)
                      +    e = eigen(Symmetric(p))
                      +    return all((e.values .+ atol) .> 0)
                      +end
                      +function g(p, L, U)
                      +    return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf
                      +end
                      +h(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )

                      So we can first check that p0 is feasible

                      g(p0,L,U) == 0.0
                      true

                      Now setting

                      \[\operatorname*{arg\,min}_{p\in\mathcal M}\ g(p) - h(p)\]

                      We look for a maximum of $h$, where $g$ is minimal, i.e. $g(p)$ is zero or in other words $p \in \mathcal C$.

                      The gradient of $h$ can also be implemented in closed form as

                      grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))
                      +function grad_h!(M, X, p, w, q)
                      +    Y = copy(M, p, X)
                      +    zero_vector!(M, X, p)
                      +    for (wi, qi) in zip(w,q)
                      +        log!(M, Y, p, qi)
                      +        Y .*= - 2.0*wi
                      +        X .+= Y
                      +    end
                      +    return X
                      +end

                      And we can further define the cost, which will just be $+\infty$ outside of $\mathcal C$. We define

                      f_dc(M, p) = g(p, L, U) - h(M, p, w, q)
                      +grad_h!(M, X, p) = grad_h!(M, X, p, w, q)
                      +function grad_f_dc!(M,X, p)
                      +    grad_h!(M, X, p, w, q)
                      +    X .*= -1.0
                      +    return X
                      +end

                      Here we can omit the gradient of $g$ in the definition of $\operatorname{grad} f$, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of $\mathcal C$.

                      As the last step, we can provide the closed form solver for the DC sub problem given at iteration $k$ by

                      \[\operatorname*{arg\,min}_{p\in \mathcal C}\ + \big\langle -\operatorname{grad} h(p^{(k)}), \exp^{-1}_{p^{(k)}}p\big\rangle.\]

                      Which we con compute

                      function dc_sub_solution!(M, q, p, X)
                      +    closed_form_solution!(M, q, L, U, p, -X)
                      +    return q
                      +end

                      For safety, we might want to avoid ending up at the boundary of $\mathcal C$. That is we reduce the distance we walk towards the solution $q$ a bit.

                      function dc_sub_solution_safe!(M, q, p, X)
                      +    p_last = copy(M,p) # since p=q might be in place
                      +    closed_form_solution!(M, q, L, U, p, -X)
                      +    q_orig = copy(M,q) # since we do the following in place of q
                      +    a = minimum(real.(eigen(q-L).values))
                      +    b = minimum(real.(eigen(U-q).values))
                      +    s = 1.0
                      +    d = distance(M, p_last, q_orig);
                      +    # if we are close to zero, we reduce faster.
                      +    α = d < 1/(n^2) ? 0.66 : 0.9995;
                      +    i=0
                      +    while (a < 0) || (b < 0)
                      +        s *= α
                      +        shortest_geodesic!(M, q, p_last, q_orig, s)
                      +        a = minimum(real.(eigen(q-L).values))
                      +        b = minimum(real.(eigen(U-q).values))
                      +        #println("$i a: $a, b = $b with s=$s")
                      +        i=i+1
                      +        if (i>100) # safety fallback
                      +            #@warn " $i steps where not enough $s ($α)\n$a $b\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs"
                      +            qe = eigen(q)
                      +            if a < 0
                      +                qe.values .+= min(1e-8, n*abs(min(a,b)))
                      +            else
                      +                qe.values .-= min(1e-8, n*abs(min(a,b)))
                      +            end
                      +            q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'
                      +            a = minimum(real.(eigen(q-L).values))
                      +            b = minimum(real.(eigen(U-q).values))
                      +            return q
                      +        end
                      +    end
                      +    return q
                      +end

                      The DoC solver run

                      Let’s compare both methods when they have the same stopping criteria

                      @time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;
                      +    gradient=grad_f_dc!,
                      +    sub_problem=dc_sub_solution_safe!,
                      +    evaluation=InplaceEvaluation(),
                      +    stopping_criterion = StopAfterIteration(300) |
                      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                      +    debug = [
                      +        (:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "),
                      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                      +        30, :Stop, "\n"],
                      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                      +    return_state=true,
                      +)
                      Initial F(p): -0.77661458292831
                      +At iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.
                      + 16.161776 seconds (17.17 M allocations: 1.670 GiB, 1.83% gc time, 93.45% compilation time)
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 23 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | InplaceEvaluation()
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 300:  not reached
                      +    |Δp| < 1.0e-14: not reached
                      +    |Δgrad f| < 1.0e-9: reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(p): %0.14f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 30]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                      Let’s extract the final point and look at its cost

                      p1_dc = get_solver_result(state1_dc);
                      +f_dc(M, p1_dc)
                      -0.784425242474807

                      As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.

                      [ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]
                      2-element Vector{Tuple{Float64, Float64}}:
                      + (1.1886583723800445e-12, 0.06669240322431051)
                      + (1.3411042178831775e-5, 0.0671353506908023)

                      For the statistics we extract the recordings from the state

                      Define the Frank-Wolfe functions

                      For Frank wolfe, the cost is just defined as $-h(p)$ but the minimisation is constraint to $\mathcal C$, which is enfored by the oracle.

                      f_fw(M, p) = -h(M, p, w, q)
                      +function grad_f_fw!(M,X, p)
                      +    grad_h!(M, X, p, w, q)
                      +    X .*= -1.0
                      +    return X
                      +end
                      +oracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)

                      The FW Solver Run

                      Similarly we can run the Frank-Wolfe algorithm with

                      @time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;
                      +    sub_problem=oracle_fw!,
                      +    evaluation=InplaceEvaluation(),
                      +    stopping_criterion = StopAfterIteration(10^4) |
                      +        StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),
                      +    debug = [
                      +        (:Iteration, "# %-8d "), :Cost, (:Change, " |Δp|: %0.14f "),
                      +        (:GradientNorm, " |grad f(p)|: %0.8f "),
                      +        (:GradientChange, " |Δgrad f(p)|: %0.8f"),
                      +        2*10^3, :Stop, "\n"],
                      +    record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],
                      +    return_state=true,
                      +)
                      Initial f(x): -0.776615
                      +# 2000     f(x): -0.784420 |Δp|: 0.04611942377596  |grad f(p)|: 0.17693408  |Δgrad f(p)|: 0.17555618
                      +# 4000     f(x): -0.784421 |Δp|: 0.00372201632005  |grad f(p)|: 0.17694619  |Δgrad f(p)|: 0.00749427
                      +# 6000     f(x): -0.784422 |Δp|: 0.00205683506784  |grad f(p)|: 0.17695204  |Δgrad f(p)|: 0.00414088
                      +# 8000     f(x): -0.784422 |Δp|: 0.00140675676260  |grad f(p)|: 0.17695565  |Δgrad f(p)|: 0.00283200
                      +# 10000    f(x): -0.784422 |Δp|: 0.00106177438611  |grad f(p)|: 0.17695815  |Δgrad f(p)|: 0.00213746
                      +The algorithm reached its maximal number of iterations (10000).
                      +152.781466 seconds (55.53 M allocations: 94.006 GiB, 2.12% gc time, 0.57% compilation time)
                      +
                      +# Solver state for `Manopt.jl`s Frank Wolfe Method
                      +After 10000 iterations
                      +
                      +## Parameters
                      +* inverse retraction method: LogarithmicInverseRetraction()
                      +* retraction method: ExponentialRetraction()
                      +* sub solver state:
                      +    | InplaceEvaluation()
                      +
                      +## Stepsize
                      +DecreasingStepsize(; length=2.0,  factor=1.0,  subtrahend=0.0,  shift=2)
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 10000:    reached
                      +    |Δp| < 1.0e-14: not reached
                      +    |Δgrad f| < 1.0e-9: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "f(x): %f"), (:Change, " |Δp|: %0.14f "), (:GradientNorm, " |grad f(p)|: %0.8f "), (:GradientChange, " |Δgrad f(p)|: %0.8f"), "\n", 2000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)

                      And we take a look at this result as well

                      p1_fw = get_solver_result(state1_fw);
                      +f_dc(M, p1_fw)
                      -0.7844220281765162

                      And its feasibility

                      [extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]
                      2-element Vector{Tuple{Float64, Float64}}:
                      + (4.904818928410655e-10, 0.06659173821656107)
                      + (3.245654983213335e-5, 0.06713970236096602)

                      Statistics

                      We extract the recorded values

                      # DoC
                      +iter1_dc = get_record(state1_dc, :Iteration, :Iteration)
                      +pk_dc = get_record(state1_dc,:Iteration,:Iterate)
                      +costs1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))
                      +dc_min = minimum(costs1_dc)
                      +# FW
                      +iter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]
                      +pk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]
                      +costs1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))

                      And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.

                      fig = plot(;
                      +    legend=:topright,
                      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x_k)-f^*$ (log. scale)",
                      +    yaxis=:log,
                      +    ylims=(1e-8, 10^-2),
                      +    xaxis=:log,
                      +    xlims=(1,10^4),
                      +)
                      +plot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label="Difference of Convex")
                      +plot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label="Frank-Wolfe")

                      This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.

                      On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [WS22]
                      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                      diff --git a/v0.1.8/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg b/v0.1.8/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg new file mode 100644 index 0000000..85998a9 --- /dev/null +++ b/v0.1.8/examples/Difference-of-Convex-Frank-Wolfe_files/figure-commonmark/cell-23-output-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/Difference-of-Convex-Rosenbrock/index.html b/v0.1.8/examples/Difference-of-Convex-Rosenbrock/index.html new file mode 100644 index 0000000..8521de2 --- /dev/null +++ b/v0.1.8/examples/Difference-of-Convex-Rosenbrock/index.html @@ -0,0 +1,339 @@ + +Rosenbrock Metric · ManoptExamples.jl

                      Solving Rosenbrock with the Difference of Convex Algorithm

                      Ronny Bergmann 2023-06-06

                      Introduction

                      This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.

                      Both the Rosenbrock problem

                      \[ \operatorname*{argmin}_{x\in ℝ^2} a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2,\]

                      where $a,b>0$ and usually $b=1$ and $a \gg b$, we know the minimizer $x^* = (b,b^2)^\mathrm{T}$, and also the (Euclidean) gradient

                      \[\nabla f(x) = + \begin{pmatrix} + 4a(x_1^2-x_2)\\ -2a(x_1^2-x_2) + \end{pmatrix} + + + \begin{pmatrix} + 2(x_1-b)\\ 0 + \end{pmatrix}.\]

                      They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.

                      Furthermore, the RosenbrockMetric can be used on $ℝ^2$, that is

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix},\]

                      In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.

                      1. The Euclidean Gradient
                      2. The Riemannian gradient descent with respect to the RosenbrockMetric
                      3. The Euclidean Difference of Convex Algorithm
                      4. The Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric

                      Where we obtain a difference of convex problem by writing

                      \[f(x) = a\bigl( x_1^2-x_2\bigr)^2 + \bigl(x_1-b\bigr)^2 + = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 - \bigl(x_1-b\bigr)^2\]

                      that is

                      \[g(x) = a\bigl( x_1^2-x_2\bigr)^2 + 2\bigl(x_1-b\bigr)^2 \quad\text{ and }\quad h(x) = \bigl(x_1-b\bigr)^2\]

                      using LinearAlgebra, Random, Statistics
                      +using Manifolds, Manopt, ManoptExamples
                      +using NamedColors, Plots
                      +import Manopt: set_manopt_parameter!
                      +Random.seed!(42)
                      paul_tol = load_paul_tol()
                      +indigo = paul_tol["mutedindigo"]
                      +green = paul_tol["mutedgreen"]
                      +sand = paul_tol["mutedsand"]
                      +teal = paul_tol["mutedteal"]
                      +grey = paul_tol["mutedgrey"]

                      To emphasize the effect, we choose a quite large value of a.

                      a = 2*10^5
                      +b = 1

                      and use the starting point and a direction to check gradients

                      p0 = [0.1, 0.2]

                      The Euclidean Gradient Descent.

                      For the Euclidean gradient we can just use the same approach as in the Rosenbrock example

                      M = ℝ^2
                      +f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                      +∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)

                      define a common debug vector

                      debug_vec = [
                      +        (:Iteration, "# %-8d "),
                      +        (:Cost, "F(x): %1.4e"),
                      +        " ",
                      +        (:Change, "|δp|: %1.4e | "),
                      +        (:GradientNorm, "|grad f|: %1.6e"),
                      +        :Stop,
                      +        "\n",
                      +    ]

                      and call the gradient descent algorithm

                      Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[debug_vec...,10^7],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    record=[:Iteration, :Cost],
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03
                      +# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04
                      +# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06
                      +# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08
                      +# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 53073227 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Riemannian Gradient Descent.

                      For the Riemannian case, we define

                      M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())
                      MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())

                      and the gradient is now adopted to the new metric

                      function grad_f!(M, X, p)
                      +    ∇f!!(M, X, p)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_f(M, p)
                      +    X = zero_vector(M, p)
                      +    return grad_f!(M, X, p)
                      +end
                      R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug=[debug_vec...,10^6],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    record=[:Iteration, :Cost],
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 1000000  F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04
                      +# 2000000  F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 2443750 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Euclidean Difference of Convex

                      For the convex case, we have to first introduce the two parts of the cost.

                      f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;
                      +f2(M, p; a=100, b=1) = (p[1] - b[1])^2;
                      +g(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)
                      +h(M, p; a=100, b=1) = f2(M, p; a=a, b=b)

                      and their (Euclidan) gradients

                      function ∇h!(M, X, p; a=100, b=1)
                      +    X[1] = 2*(p[1]-b)
                      +    X[2] = 0
                      +    return X
                      +end
                      +function ∇h(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    ∇h!(M, X, p; a=a, b=b)
                      +    return X
                      +end
                      +function ∇g!(M, X, p; a=100, b=1)
                      +    X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)
                      +    X[2] = -2*a*(p[1]^2-p[2])
                      +    return X
                      +end
                      +function ∇g(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    ∇g!(M, X, p; a=a, b=b)
                      +    return X
                      +end

                      and we define for convenience

                      docE_g(M, p) = g(M, p; a=a, b=b)
                      +docE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)
                      +docE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)
                      +docE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)
                      +function docE_∇f!(M, X, p)
                      +  Y = zero_vector(M, p)
                      +  docE_∇g!(M, X, p)
                      +  docE_∇h!(M, Y, p)
                      +  X .-= Y
                      +  return X
                      +end

                      Then we call the difference of convex algorithm on Eucldiean space $ℝ^2$.

                      E_doc_state = difference_of_convex_algorithm(
                      +    M, docE_f, docE_g, docE_∇h!, p0;
                      +    gradient=docE_∇f!,
                      +    grad_g = docE_∇g!,
                      +    debug=[debug_vec..., 10^4],
                      +    evaluation=InplaceEvaluation(),
                      +    record=[:Iteration, :Cost],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    sub_hess=nothing, # Use gradient descent
                      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +# 10000    F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04
                      +# 20000    F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 26549 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | # Solver state for `Manopt.jl`s Gradient Descent
                      +    | After 2000 iterations
                      +    | 
                      +    | ## Parameters
                      +    | * retraction method: ExponentialRetraction()
                      +    | 
                      +    | ## Stepsize
                      +    | ArmijoLinesearch() with keyword parameters
                      +    |   * initial_stepsize    = 1.0
                      +    |   * retraction_method   = ExponentialRetraction()
                      +    |   * contraction_factor  = 0.95
                      +    |   * sufficient_decrease = 0.1
                      +    | 
                      +    | ## Stopping criterion
                      +    | 
                      +    | Stop When _one_ of the following are fulfilled:
                      +    |     Max Iteration 2000:   reached
                      +    |     |grad f| < 1.0e-16: not reached
                      +    | Overall: reached
                      +    | This indicates convergence: No
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 10000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      The Riemannian Difference of Convex

                      We first have to again defined the gradients with respect to the new metric

                      function grad_h!(M, X, p; a=100, b=1)
                      +    ∇h!(M, X, p; a=a, b=b)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_h(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    grad_h!(M, X, p; a=a, b=b)
                      +    return X
                      +end
                      +function grad_g!(M, X, p; a=100, b=1)
                      +    ∇g!(M, X, p; a=a,b=b)
                      +    riemannian_gradient!(M, X, p, X)
                      +    return X
                      +end
                      +function grad_g(M, p; a=100, b=1)
                      +    X = zero(p)
                      +    grad_g!(M, X, p; a=a, b=b)
                      +    return X
                      +end

                      While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For $X \in ∂h(p^{(k)})$ the sunproblem top determine $p^{(k+1)}$ reads

                      \[\operatorname*{argmin}_{p\in\mathcal M} g(p) - \langle X, \log_{p^{(k)}}p\rangle\]

                      for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with $X = \operatorname{grad} h(p^{(k)})$ that

                      \[\phi(p) = g(p) - \langle X, \log_{p^{(k)}}p\rangle += a\bigl( p_{1}^2-p_{2}\bigr)^2 + + 2\bigl(p_{1}-b\bigr)^2 - 2(p^{(k)}_1-b)p_1 + 2(p^{(k)}_1-b)p^{(k)}_1,\]

                      its Euclidean gradient reads

                      \[\operatorname{grad}\phi(p) = + \nabla \varphi(p) + = \begin{pmatrix} + 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^{(k)}_1-b)\\ + -2a(p_1^2-p_2) + \end{pmatrix}\]

                      where we can again employ the gradient conversion from before to obtain the Riemannian gradient.

                      mutable struct SubGrad{P,T,V}
                      +    pk::P
                      +    Xk::T
                      +    a::V
                      +    b::V
                      +end
                      +function (ϕ::SubGrad)(M, p)
                      +    X = zero_vector(M, p)
                      +    ϕ(M, X, p)
                      +    return X
                      +end
                      +function (ϕ::SubGrad)(M, X, p)
                      +    X .= [
                      +        4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),
                      +        -2 * ϕ.a * (p[1]^2 - p[2]),
                      +    ]
                      +    riemannian_gradient!(M, X, p, X) # convert
                      +    return X
                      +end

                      And in orer to update the subsolvers gradient correctly, we have to overwrite

                      set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)
                      +set_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)

                      And we again introduce for ease of use

                      docR_g(M, p) = g(M, p; a=a, b=b)
                      +docR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)
                      +docR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)
                      +docR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)
                      +function docR_grad_f!(M, X, p)
                      +    Y = zero_vector(M, p)
                      +    docR_grad_g!(M, X, p)
                      +    docR_grad_h!(M, Y, p)
                      +    X .-= Y
                      +    return X
                      +end
                      +docR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)

                      Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.

                      R_doc_state = difference_of_convex_algorithm(
                      +    M_rb, docR_f, docR_g, docR_grad_h!, p0;
                      +    gradient=docR_grad_f!,
                      +    grad_g = docR_grad_g!,
                      +    debug=[debug_vec..., 10^6],
                      +    evaluation=InplaceEvaluation(),
                      +    record=[:Iteration, :Cost],
                      +    stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),
                      +    sub_grad=docR_sub_grad,
                      +    sub_hess = nothing, # Use gradient descent
                      +    sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),
                      +    return_state=true,
                      +)
                      Initial F(x): 7.2208e+03 
                      +The algorithm performed a step with a change (0.0) less than 1.0e-16.
                      +
                      +# Solver state for `Manopt.jl`s Difference of Convex Algorithm
                      +After 1235 iterations
                      +
                      +## Parameters
                      +* sub solver state:
                      +    | # Solver state for `Manopt.jl`s Gradient Descent
                      +    | After 2000 iterations
                      +    | 
                      +    | ## Parameters
                      +    | * retraction method: ExponentialRetraction()
                      +    | 
                      +    | ## Stepsize
                      +    | ArmijoLinesearch() with keyword parameters
                      +    |   * initial_stepsize    = 1.0
                      +    |   * retraction_method   = ExponentialRetraction()
                      +    |   * contraction_factor  = 0.95
                      +    |   * sufficient_decrease = 0.1
                      +    | 
                      +    | ## Stopping criterion
                      +    | 
                      +    | Stop When _one_ of the following are fulfilled:
                      +    |     Max Iteration 2000:   reached
                      +    |     |grad f| < 1.0e-16: not reached
                      +    | Overall: reached
                      +    | This indicates convergence: No
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 100000000:    not reached
                      +    |Δp| < 1.0e-16: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-8d "), (:Cost, "F(x): %1.4e"), " ", (:Change, "|δp|: %1.4e | "), (:GradientNorm, "|grad f|: %1.6e"), "\n", 1000000]
                      +    :Stop = :Stop
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      Comparison in Iterations

                      fig = plot(;
                      +    legend=:topright,
                      +    xlabel=raw"Iterations $k$ (log. scale)", ylabel=raw"Cost $f(x)$ (log. scale)",
                      +    yaxis=:log,
                      +    ylims=(1e-16, 5*1e5),
                      +    xaxis=:log,
                      +    xlims=(1,10^8),
                      +)
                      +scatter!(fig, [1,], [f(M,p0),], label=raw"$f(p_0)$", markercolor=grey)
                      +egi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries
                      +egc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries
                      +plot!(fig, egi, egc, color=teal, label="Euclidean GD")
                      +#
                      +rgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries
                      +rgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries
                      +plot!(fig, rgi, rgc, color=indigo, label="Riemannian GD")
                      +#
                      +edi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries
                      +edc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries
                      +plot!(fig, edi, edc, color=sand, label="Euclidean DoC")
                      +#
                      +rdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries
                      +rdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries
                      +plot!(fig, rdi, rdc, color=green, label="Riemannian DoC")

                      And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.

                      Literature

                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      diff --git a/v0.1.8/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg b/v0.1.8/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg new file mode 100644 index 0000000..9417ba6 --- /dev/null +++ b/v0.1.8/examples/Difference-of-Convex-Rosenbrock_files/figure-commonmark/cell-22-output-1.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/HyperparameterOptimization/index.html b/v0.1.8/examples/HyperparameterOptimization/index.html new file mode 100644 index 0000000..e9677e6 --- /dev/null +++ b/v0.1.8/examples/HyperparameterOptimization/index.html @@ -0,0 +1,332 @@ + +Hyperparameter optimziation · ManoptExamples.jl

                      Hyperparameter optimization

                      Mateusz Baran 2024-08-03

                      Introduction

                      This example shows how to automatically select the best values of hyperparameters of optimization procedures such as retraction, vector transport, size of memory in L-BFGS or line search coefficients. Hyperparameter optimization relies on the Optuna [ASY+19] Python library because it is much more advanced than similar Julia projects, offering Bayesian optimization with conditional hyperparameters and early stopping.

                      General definitions

                      Here are some general definitions that you will most likely be able to directly use for your problem without any changes. Just remember to install optuna, for example using CondaPkg Julia library.

                      using Manifolds, Manopt
                      +using PythonCall
                      +using BenchmarkTools
                      +using LineSearches
                      +
                      +# This script requires optuna to be available through PythonCall
                      +# You can install it for example using
                      +# using CondaPkg
                      +# ]conda add optuna
                      +
                      +optuna = pyimport("optuna")
                      +
                      +norm_inf(M::AbstractManifold, p, X) = norm(X, Inf)
                      +
                      +# TTsuggest_ structs collect data from a calibrating optimization run
                      +# that is handled by compute_pruning_losses function
                      +
                      +struct TTsuggest_int
                      +    suggestions::Dict{String,Int}
                      +end
                      +function (s::TTsuggest_int)(name::String, a, b)
                      +    return s.suggestions[name]
                      +end
                      +struct TTsuggest_float
                      +    suggestions::Dict{String,Float64}
                      +end
                      +function (s::TTsuggest_float)(name::String, a, b; log::Bool=false)
                      +    return s.suggestions[name]
                      +end
                      +struct TTsuggest_categorical
                      +    suggestions::Dict{String,Any}
                      +end
                      +function (s::TTsuggest_categorical)(name::String, vals)
                      +    return s.suggestions[name]
                      +end
                      +struct TTreport
                      +    reported_vals::Vector{Float64}
                      +end
                      +function (r::TTreport)(val, i)
                      +    return push!(r.reported_vals, val)
                      +end
                      +struct TTshould_prune end
                      +(::TTshould_prune)() = Py(false)
                      +struct TracingTrial
                      +    suggest_int::TTsuggest_int
                      +    suggest_float::TTsuggest_float
                      +    suggest_categorical::TTsuggest_categorical
                      +    report::TTreport
                      +    should_prune::TTshould_prune
                      +end
                      +
                      +function compute_pruning_losses(
                      +    od,
                      +    int_suggestions::Dict{String,Int},
                      +    float_suggestions::Dict{String,Float64},
                      +    categorical_suggestions::Dict{String,Int},
                      +)
                      +    tt = TracingTrial(
                      +        TTsuggest_int(int_suggestions),
                      +        TTsuggest_float(float_suggestions),
                      +        TTsuggest_categorical(categorical_suggestions),
                      +        TTreport(Float64[]),
                      +        TTshould_prune(),
                      +    )
                      +    od(tt)
                      +    return tt.report.reported_vals
                      +end

                      The next part is your hyperparameter optimization objective. The ObjectiveData struct contains all relevant information about the sequence of specific problems. The outermost key part is the N_range field. Early stopping requires a series of progressively more complex problems. They will be attempted from the most simple one to the most complex one, and are specified by the values of N in that vector.

                      mutable struct ObjectiveData{TObj,TGrad}
                      +    obj::TObj
                      +    grad::TGrad
                      +    N_range::Vector{Int}
                      +    gtol::Float64
                      +    vts::Vector{AbstractVectorTransportMethod}
                      +    retrs::Vector{AbstractRetractionMethod}
                      +    manifold_constructors::Vector{Tuple{String,Any}}
                      +    pruning_losses::Vector{Float64}
                      +    manopt_stepsize::Vector{Tuple{String,Any}}
                      +    obj_loss_coeff::Float64
                      +end

                      In the example below we optimize hyperparameters on a sequence of Rosenbrock-type problems restricted to spheres:

                      \[\arg\min_{p \in S^{N-1}} \sum_{i=1}^{N/2} (1-p_{2i})^2 + 100 (p_{2i+1} - p_{2i}^2)^2,\]

                      where $N \in [2, 16, 128, 1024, 8192, 65536]$.

                      obj and grad are the objective and gradient, here defined as below. Note that gradient works in-place and variants without manifolds are also provided for easier comparison with other libraries like Optim.jl. It is easiest when problems for different values N can be distinguished by being defined on successively larger manifolds but the script could be modified so that it’s not necessary.

                      pruning_losses and compute_pruning_losses are related to early pruning used in Optuna and you shouldn’t have to modify them.

                      function f_rosenbrock(x)
                      +    result = 0.0
                      +    for i in 1:2:length(x)
                      +        result += (1.0 - x[i])^2 + 100.0 * (x[i + 1] - x[i]^2)^2
                      +    end
                      +    return result
                      +end
                      +function f_rosenbrock(::AbstractManifold, x)
                      +    return f_rosenbrock(x)
                      +end
                      +
                      +function g_rosenbrock!(storage, x)
                      +    for i in 1:2:length(x)
                      +        storage[i] = -2.0 * (1.0 - x[i]) - 400.0 * (x[i + 1] - x[i]^2) * x[i]
                      +        storage[i + 1] = 200.0 * (x[i + 1] - x[i]^2)
                      +    end
                      +    return storage
                      +end
                      +function g_rosenbrock!(M::AbstractManifold, storage, x)
                      +    g_rosenbrock!(storage, x)
                      +    riemannian_gradient!(M, storage, x, storage)
                      +    return storage
                      +end

                      Next, gtol is the tolerance used for the stopping criterion in optimization. vts and retrs are, respectively, vector transports and retraction methods selected through hyperparameter optimization. Some items need to be different for different values of N, for example the manifold over which the problem is defined. This is handled by manifold_constructors which is then defined as Tuple{String,Any}[("Sphere", N -> Manifolds.Sphere(N - 1))], where the string "Sphere" is used to identify the manifold family and the next element is a function that transforms the value of N to the manifold for the problem of size N.

                      Similarly, different stepsize selection methods may be considered. This is handled by the field manopt_stepsize. It will be easiest to see how it works by looking at how it is initialized:

                      Tuple{String,Any}[
                      +    ("LS-HZ", M -> Manopt.LineSearchesStepsize(ls_hz)),
                      +    ("Wolfe-Powell", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),
                      +]

                      We have a string that identifies the line search method name and a constructor of the line search which takes relevant arguments like the manifold or a numerical parameter.

                      The next part is the trial evaluation procedure. This is one of the more important places which need to be customized to your problem. This is the point where we tell Optuna about the relevant optimization hyperparameters and use them to define specific problems. The hyperparameter optimization is a multiobjective problem: we want as good problem objectives as possible and as low times as possible. As Optuna doesn’t currently support multicriteria pruning, which is important for obtaining a solution in a reasonable amount of time, we use a linear combination of sub-objectives to turn the problem into a single-criterion optimization. The hyperparameter optimization objective is a linear combination of achieved objectives the relative weight is controlled by objective.obj_loss_coeff.

                      function (objective::ObjectiveData)(trial)
                      +    # Here we use optuna to select memory length for L-BFGS -- an integer in the range between 2 and 30, referenced by name "mem_len"
                      +    mem_len = trial.suggest_int("mem_len", 2, 30)
                      +
                      +    # Here we select a vector transport and retraction methods, one of those specified in the `ObjectiveData`.
                      +    vt = objective.vts[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical(
                      +            "vector_transport_method", Vector(eachindex(objective.vts))
                      +        ),
                      +    )]
                      +    retr = objective.retrs[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical("retraction_method", Vector(eachindex(objective.retrs))),
                      +    )]
                      +
                      +    # Here we select the manifold constructor, in case we want to try different manifolds for our problem. For example one could try defining a problem with orthogonality constraints on Stiefel, Grassmann or flag manifold.
                      +    manifold_name, manifold_constructor = objective.manifold_constructors[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical(
                      +            "manifold", Vector(eachindex(objective.manifold_constructors))
                      +        ),
                      +    )]
                      +
                      +    # Here the stepsize selection method type is selected.
                      +    manopt_stepsize_name, manopt_stepsize_constructor = objective.manopt_stepsize[pyconvert(
                      +        Int,
                      +        trial.suggest_categorical(
                      +            "manopt_stepsize", Vector(eachindex(objective.manopt_stepsize))
                      +        ),
                      +    )]
                      +
                      +    # This parametrizes stepsize selection methods with relevant numerical parameters.
                      +    local c1_val, c2_val, hz_sigma
                      +    if manopt_stepsize_name == "Wolfe-Powell"
                      +        c1_val = pyconvert(
                      +            Float64, trial.suggest_float("Wolfe-Powell c1", 1e-5, 1e-2; log=true)
                      +        )
                      +        c2_val =
                      +            1.0 - pyconvert(
                      +                Float64, trial.suggest_float("Wolfe-Powell 1-c2", 1e-4, 1e-2; log=true)
                      +            )
                      +    elseif manopt_stepsize_name == "Improved HZ"
                      +        hz_sigma = pyconvert(Float64, trial.suggest_float("Improved HZ sigma", 0.1, 0.9))
                      +    end
                      +
                      +    # The current loss estimate, taking into account estimated loss values for larger, not-yet-evaluated values of `N`.
                      +    loss = sum(objective.pruning_losses)
                      +
                      +    # Here iterate over problems we want to optimize for
                      +    # from smallest to largest; pruning should stop the iteration early
                      +    # if the hyperparameter set is not promising
                      +    cur_i = 0
                      +    for N in objective.N_range
                      +        # Here we define the initial point for the optimization procedure
                      +        p0 = zeros(N)
                      +        p0[1] = 1
                      +        M = manifold_constructor(N)
                      +        # Here we construct the specific line search to be used
                      +        local ls
                      +        if manopt_stepsize_name == "Wolfe-Powell"
                      +            ls = manopt_stepsize_constructor(M, c1_val, c2_val)
                      +        elseif manopt_stepsize_name == "Improved HZ"
                      +            ls = manopt_stepsize_constructor(M, hz_sigma)
                      +        else
                      +            ls = manopt_stepsize_constructor(M)
                      +        end
                      +        manopt_time, manopt_iters, manopt_obj = benchmark_time_state(
                      +            ManoptQN(),
                      +            M,
                      +            N,
                      +            objective.obj,
                      +            objective.grad,
                      +            p0,
                      +            ls,
                      +            pyconvert(Int, mem_len),
                      +            objective.gtol;
                      +            vector_transport_method=vt,
                      +            retraction_method=retr,
                      +        )
                      +        # TODO: turn this into multi-criteria optimization when Optuna starts supporting
                      +        # pruning in such problems
                      +        loss -= objective.pruning_losses[cur_i + 1]
                      +        loss += manopt_time + objective.obj_loss_coeff * manopt_obj
                      +        trial.report(loss, cur_i)
                      +        if pyconvert(Bool, trial.should_prune().__bool__())
                      +            throw(PyException(optuna.TrialPruned()))
                      +        end
                      +        cur_i += 1
                      +    end
                      +    return loss
                      +end

                      In the following benchmarking code you will most likely have to adapt solver parameters. This is designed around quasi_Newton but can be adapted to any solver as needed. The example below performs a small number of trials for quick rendering but in practice you should aim for at least a few thousand trials (the n_trials parameter).

                      # An abstract type in case we want to try different optimization packages.
                      +abstract type AbstractOptimConfig end
                      +struct ManoptQN <: AbstractOptimConfig end
                      +
                      +# Benchmark that evaluates hyperparameters. Returns time to reach the solution, number of iterations and final value of the objective.
                      +function benchmark_time_state(
                      +    ::ManoptQN,
                      +    M::AbstractManifold,
                      +    N,
                      +    f,
                      +    g!,
                      +    p0,
                      +    stepsize::Manopt.Stepsize,
                      +    mem_len::Int,
                      +    gtol::Real;
                      +    kwargs...,
                      +)
                      +    manopt_sc = StopWhenGradientNormLess(gtol; norm=norm_inf) | StopAfterIteration(1000)
                      +    mem_len = min(mem_len, manifold_dimension(M))
                      +    manopt_state = quasi_Newton(
                      +        M,
                      +        f,
                      +        g!,
                      +        p0;
                      +        stepsize=stepsize,
                      +        evaluation=InplaceEvaluation(),
                      +        return_state=true,
                      +        memory_size=mem_len,
                      +        stopping_criterion=manopt_sc,
                      +        debug=[],
                      +        kwargs...,
                      +    )
                      +    bench_manopt = @benchmark quasi_Newton(
                      +        $M,
                      +        $f,
                      +        $g!,
                      +        $p0;
                      +        stepsize=$(stepsize),
                      +        evaluation=$(InplaceEvaluation()),
                      +        memory_size=$mem_len,
                      +        stopping_criterion=$(manopt_sc),
                      +        debug=[],
                      +        $kwargs...,
                      +    )
                      +    iters = get_count(manopt_state, :Iterations)
                      +    final_val = f(M, manopt_state.p)
                      +    return median(bench_manopt.times) / 1000, iters, final_val
                      +end
                      +
                      +"""
                      +    lbfgs_study(; pruning_coeff::Float64=0.95)
                      +
                      +Set up the example hyperparameter optimization study.
                      +"""
                      +function lbfgs_study(; pruning_coeff::Float64=0.95)
                      +    Ns = [2^n for n in 1:3:12]
                      +    ls_hz = LineSearches.HagerZhang()
                      +    od = ObjectiveData(
                      +        f_rosenbrock,
                      +        g_rosenbrock!,
                      +        Ns,
                      +        1e-5,
                      +        AbstractVectorTransportMethod[ParallelTransport(), ProjectionTransport()],
                      +        [ExponentialRetraction(), ProjectionRetraction()],
                      +        Tuple{String,Any}[("Sphere", N -> Manifolds.Sphere(N - 1))],
                      +        zeros(Float64, eachindex(Ns)),
                      +        Tuple{String,Any}[
                      +            ("LS-HZ", M -> Manopt.LineSearchesStepsize(ls_hz)),
                      +            #("Improved HZ", (M, sigma) -> HagerZhangLinesearch(M; sigma=sigma)),
                      +            ("Wolfe-Powell", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),
                      +        ],
                      +        10.0,
                      +    )
                      +
                      +    # Here you need to define baseline values of all hyperparameters
                      +    baseline_pruning_losses = compute_pruning_losses(
                      +        od,
                      +        Dict("mem_len" => 4),
                      +        Dict(
                      +            "Wolfe-Powell c1" => 1e-4,
                      +            "Wolfe-Powell 1-c2" => 1e-3,
                      +            "Improved HZ sigma" => 0.9,
                      +        ),
                      +        Dict(
                      +            "vector_transport_method" => 1,
                      +            "retraction_method" => 1,
                      +            "manifold" => 1,
                      +            "manopt_stepsize" => 1,
                      +        ),
                      +    )
                      +    od.pruning_losses = pruning_coeff * baseline_pruning_losses
                      +
                      +    study = optuna.create_study(; study_name="L-BFGS")
                      +    # Here you can specify number of trials and timeout (in seconds).
                      +    study.optimize(od; n_trials=1000, timeout=500)
                      +    println("Best params is $(study.best_params) with value $(study.best_value)")
                      +    selected_manifold = od.manifold_constructors[pyconvert(Int, study.best_params["manifold"])][1]
                      +    selected_retraction_method = od.retrs[pyconvert(Int, study.best_params["retraction_method"])]
                      +    selected_vector_transport = od.vts[pyconvert(Int, study.best_params["vector_transport_method"])]
                      +    println("Selected manifold: $(selected_manifold)")
                      +    println("Selected retraction method: $(selected_retraction_method)")
                      +    println("Selected vector transport method: $(selected_vector_transport)")
                      +    return study
                      +end
                      +
                      +lbfgs_study()
                      Best params is {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093} with value 5510.963227438757
                      +Selected manifold: Sphere
                      +Selected retraction method: ExponentialRetraction()
                      +Selected vector transport method: ProjectionTransport()
                      +
                      +[I 2024-03-16 18:04:17,965] A new study created in memory with name: L-BFGS
                      +[I 2024-03-16 18:04:45,996] Trial 0 finished with value: 5639.789870295856 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00027288064367948073, 'Wolfe-Powell 1-c2': 0.00026503788892114045}. Best is trial 0 with value: 5639.789870295856.
                      +[I 2024-03-16 18:05:11,860] Trial 1 finished with value: 5635.936370295855 and parameters: {'mem_len': 11, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.002743250060163298, 'Wolfe-Powell 1-c2': 0.00037986521186922096}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:05:39,386] Trial 2 finished with value: 5673.101441724422 and parameters: {'mem_len': 26, 'vector_transport_method': 2, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00043339485784312605, 'Wolfe-Powell 1-c2': 0.0027302649933974173}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:06:10,279] Trial 3 finished with value: 7410.818084581564 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:06:37,995] Trial 4 finished with value: 5756.566226449636 and parameters: {'mem_len': 25, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.
                      +[I 2024-03-16 18:06:42,755] Trial 5 pruned. 
                      +[I 2024-03-16 18:06:58,577] Trial 6 pruned. 
                      +[I 2024-03-16 18:07:15,366] Trial 7 pruned. 
                      +[I 2024-03-16 18:07:40,605] Trial 8 finished with value: 5581.7437274386975 and parameters: {'mem_len': 7, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0010567355712112379, 'Wolfe-Powell 1-c2': 0.003948002490203636}. Best is trial 8 with value: 5581.7437274386975.
                      +[I 2024-03-16 18:07:46,021] Trial 9 pruned. 
                      +[I 2024-03-16 18:08:11,512] Trial 10 finished with value: 5510.963227438757 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:08:35,914] Trial 11 finished with value: 5521.388656010121 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006738829952322474, 'Wolfe-Powell 1-c2': 0.0010639659137420014}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:09:00,317] Trial 12 finished with value: 5521.36958458155 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00010975606104676191, 'Wolfe-Powell 1-c2': 0.0007663843095951679}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:09:24,680] Trial 13 finished with value: 5520.7020845815505 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 6.743450835567536e-05, 'Wolfe-Powell 1-c2': 0.0008779759729737719}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:09:50,268] Trial 14 pruned. 
                      +[I 2024-03-16 18:10:15,494] Trial 15 finished with value: 5595.119584581556 and parameters: {'mem_len': 6, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 8.147444451747575e-05, 'Wolfe-Powell 1-c2': 0.00012268601197923553}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:10:25,264] Trial 16 pruned. 
                      +[I 2024-03-16 18:10:50,209] Trial 17 finished with value: 5572.474513153012 and parameters: {'mem_len': 5, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0015998473664092935, 'Wolfe-Powell 1-c2': 0.0005109172020536229}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:10:54,772] Trial 18 pruned. 
                      +[I 2024-03-16 18:11:04,534] Trial 19 pruned. 
                      +[I 2024-03-16 18:11:28,873] Trial 20 finished with value: 5512.3824417244705 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.1581668103921961e-05, 'Wolfe-Powell 1-c2': 0.0002691056199427656}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:11:53,327] Trial 21 finished with value: 5529.088227438692 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.3645031886009879e-05, 'Wolfe-Powell 1-c2': 0.0001863385753491203}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:12:17,911] Trial 22 finished with value: 5522.041370295835 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.0030173525937465e-05, 'Wolfe-Powell 1-c2': 0.000543991948003312}. Best is trial 10 with value: 5510.963227438757.
                      +[I 2024-03-16 18:12:27,645] Trial 23 pruned. 
                      +[I 2024-03-16 18:12:52,163] Trial 24 finished with value: 5528.840941724406 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.000245400433292576, 'Wolfe-Powell 1-c2': 0.000133639324295565}. Best is trial 10 with value: 5510.963227438757.
                      +
                      +Python: <optuna.study.study.Study object at 0x70dd985d9b50>

                      Summary

                      We’ve shown how to automatically select the best hyperparameter values for your optimization problem.

                      Literature

                      [ASY+19]
                      T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.
                      diff --git a/v0.1.8/examples/RayleighQuotient/index.html b/v0.1.8/examples/RayleighQuotient/index.html new file mode 100644 index 0000000..f38f018 --- /dev/null +++ b/v0.1.8/examples/RayleighQuotient/index.html @@ -0,0 +1,235 @@ + +The Rayleigh Quotient · ManoptExamples.jl

                      The Rayleigh Quotient

                      Ronny Bergmann 2024-03-09

                      Introduction

                      This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.

                      For a symmetric matrix $A \in \mathbb R^{n\times n}$ we consider the 📖 Rayleigh Quotient

                      \[\operatorname*{arg\,min}_{x \in \mathbb R^n \backslash \{0\}} +\frac{x^{\mathrm{T}}Ax}{\lVert x \rVert^2}.\]

                      On the sphere we can omit the denominator and obtain

                      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                      which by itself we can again continue in the embedding as

                      \[\tilde f(x) = x^{\mathrm{T}}Ax,\qquad x \in \mathbb R^n.\]

                      This cost has the nice feature that at the minimizer $p^*\in\mathbb S^{n-1}$ the function falue $f(p^*)$ is the smalles eigenvalue of $A$.

                      For the embedded function $\tilde f$ the gradient and Hessian can be computed with classical methods as

                      \[\begin{align*} +∇\tilde f(x) &= 2Ax, \qquad x ∈ ℝ^n, +\\ +∇^2\tilde f(x)[V] &= 2AV, \qquad x, V ∈ ℝ^n. +\end{align*}\]

                      Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold $\mathcal M = \mathbb S^{n-1}$ are given by

                      \[\begin{align*} +\operatorname{grad} f(p) &= 2Ap - 2(p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1}, +\\ +\operatorname{Hess} f(p)[X] &= 2AX - 2(p^{\mathrm{T}}AX)p - 2(p^{\mathrm{T}}Ap)X,\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1} +\end{align*}\]

                      Let’s first generate an example martrx $A$.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random
                      +Random.seed!(42)
                      +n = 500
                      +A = Symmetric(randn(n, n) / n)

                      And the manifolds

                      M = Sphere(n-1)
                      Sphere(499, ℝ)
                      E = get_embedding(M)
                      Euclidean(500; field=ℝ)

                      Setup the corresponding functions

                      Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute $f$ is called with M as their first argument and $\tilde f$ if called with E.

                      We instantiate

                      f = ManoptExamples.RayleighQuotientCost(A)
                      +grad_f = ManoptExamples.RayleighQuotientGrad!!(A)
                      +Hess_f = ManoptExamples.RayleighQuotientHess!!(A)

                      the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory

                      p0 = [1.0, zeros(n-1)...]
                      +X = zero_vector(M, p0)

                      we can both call

                      Y = grad_f(M, p0)  # Allocates memory
                      +grad_f(M, X, p0)    # Computes in place of X and returns the result in X.
                      +norm(M, p0, X-Y)
                      0.0

                      Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.

                      First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute

                      λ = min(eigvals(A)...)
                      -0.08967721009388108

                      A Solver based on gradient information

                      Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient $\nabla \tilde f$. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].

                      But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent

                      s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                      +    return_state=true,
                      +)
                      +q1 = get_solver_result(s)
                      +s
                      Initial f(x): -0.000727
                      +# 50    f(x): -0.088415|grad f(p)|:0.004530500043902619
                      +# 100   f(x): -0.089097|grad f(p)|:0.004589417101266096
                      +# 150   f(x): -0.089530|grad f(p)|:0.0026028331895358247
                      +# 200   f(x): -0.089650|grad f(p)|:0.0012359084298719039
                      +
                      +# Solver state for `Manopt.jl`s Gradient Descent
                      +After 200 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 200:  reached
                      +    |grad f| < 1.0e-8: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Debug
                      +    :Iteration = [(:Iteration, "# %-6d"), (:Cost, "f(x): %f"), (:GradientNorm, "|grad f(p)|:%s"), "\n", 50]

                      From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.

                      And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.

                      q2 = gradient_descent(M, f, grad_f, p0;
                      +    debug = [:Iteration, :Cost, :GradientNorm, 50, "\n"],
                      +)
                      +#Test that both are the same
                      +isapprox(M, q1,q2)
                      Initial f(x): -0.000727
                      +# 50    f(x): -0.088415|grad f(p)|:0.004530500043902567
                      +# 100   f(x): -0.089097|grad f(p)|:0.004589417101266063
                      +# 150   f(x): -0.089530|grad f(p)|:0.002602833189535808
                      +# 200   f(x): -0.089650|grad f(p)|:0.0012359084298719097
                      +
                      +true

                      We can also benchmark both

                      @benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)
                      BenchmarkTools.Trial: 23 samples with 1 evaluation.
                      + Range (min … max):  217.668 ms … 268.332 ms  ┊ GC (min … max): 3.21% … 3.98%
                      + Time  (median):     219.032 ms               ┊ GC (median):    3.24%
                      + Time  (mean ± σ):   222.029 ms ±  10.351 ms  ┊ GC (mean ± σ):  3.33% ± 0.26%
                      +
                      +   █                                                             
                      +  ▆█▆▃▁▃▁▃▁▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃ ▁
                      +  218 ms           Histogram: frequency by time          268 ms <
                      +
                      + Memory estimate: 1.13 GiB, allocs estimate: 3613.
                      @benchmark gradient_descent($M, $f, $grad_f, $p0)
                      BenchmarkTools.Trial: 149 samples with 1 evaluation.
                      + Range (min … max):  31.006 ms … 163.769 ms  ┊ GC (min … max): 0.00% … 79.63%
                      + Time  (median):     31.330 ms               ┊ GC (median):    0.00%
                      + Time  (mean ± σ):   33.701 ms ±  11.067 ms  ┊ GC (mean ± σ):  3.40% ±  7.06%
                      +
                      +  █▃ ▂ ▁              ▃                                         
                      +  ██▄█▇██▆▄▁▄▄▁▇▁▁▆▁▄▆█▇▁▁▄▁▄▄▁▁▁▁▁▁▁▁▁▄▁▁▁▄▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▁▁▄ ▄
                      +  31 ms         Histogram: log(frequency) by time        47 ms <
                      +
                      + Memory estimate: 11.38 MiB, allocs estimate: 3006.

                      From these results we see, that the conversion from the Euclidean to the Riemannian gradient does require a small amount of effort and hence reduces the performance slighly. Still, if the Euclidean Gradient is easier to compute or already available, this is in terms of coding the faster way. Finally this is a tradeoff between derivation and implementation efforts for the Riemannian gradient and a slight performance reduction when using the Euclidean one.

                      A Solver based (also) on (approximate) Hessian information

                      To also involve the Hessian, we consider the trust regions solver with three cases:

                      1. Euclidean, approximating the Hessian
                      2. Euclidean, providing the Hessian
                      3. Riemannian, providing the Hessian but also using in-place evaluations.
                      q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.088106|grad f(p)|:0.01903913659588686
                      +# 20    f(x): -0.089023|grad f(p)|:0.007792334296299116
                      +# 30    f(x): -0.089501|grad f(p)|:0.008034300330026467
                      +# 40    f(x): -0.089842|grad f(p)|:0.008125526728200166
                      +# 50    f(x): -0.089890|grad f(p)|:0.0031244752821335416
                      +# 60    f(x): -0.089925|grad f(p)|:0.0029682862637714163
                      +# 70    f(x): -0.089962|grad f(p)|:0.002811722437216778
                      +# 80    f(x): -0.089997|grad f(p)|:0.0026658493010157363
                      +# 90    f(x): -0.090032|grad f(p)|:0.0025418974797659266
                      +# 100   f(x): -0.090067|grad f(p)|:0.0024485809550738955
                      +# 110   f(x): -0.090108|grad f(p)|:0.0023894008071780747
                      +# 120   f(x): -0.090155|grad f(p)|:0.002362317662908117
                      +# 130   f(x): -0.090208|grad f(p)|:0.0023611301647631484
                      +# 140   f(x): -0.090262|grad f(p)|:0.00237797866404072
                      +# 150   f(x): -0.090314|grad f(p)|:0.002405563029627607
                      +# 160   f(x): -0.090362|grad f(p)|:0.002438250821406204
                      +# 170   f(x): -0.090404|grad f(p)|:0.002472221074327323
                      +# 180   f(x): -0.090441|grad f(p)|:0.0025051377726827166
                      +# 190   f(x): -0.090472|grad f(p)|:0.002535721310831389
                      +# 200   f(x): -0.090498|grad f(p)|:0.0025633813700434637
                      +# 210   f(x): -0.090513|grad f(p)|:0.0025832821804127513
                      +# 220   f(x): -0.090513|grad f(p)|:0.0025832821804127513
                      +# 230   f(x): -0.090513|grad f(p)|:0.0025832821792817493
                      +# 240   f(x): -0.090513|grad f(p)|:0.0025832821770197098
                      +# 250   f(x): -0.090513|grad f(p)|:0.0025832821747576924
                      +# 260   f(x): -0.090513|grad f(p)|:0.002583282172495683
                      +# 270   f(x): -0.090513|grad f(p)|:0.0025832821702336567
                      +# 280   f(x): -0.090513|grad f(p)|:0.002583282167971658
                      +# 290   f(x): -0.090513|grad f(p)|:0.002583282165709656
                      +# 300   f(x): -0.090513|grad f(p)|:0.002583282163447637
                      +# 310   f(x): -0.090513|grad f(p)|:0.0025832821611855928
                      +# 320   f(x): -0.090513|grad f(p)|:0.0025832821589235814
                      +# 330   f(x): -0.090513|grad f(p)|:0.002583282156661572
                      +# 340   f(x): -0.090513|grad f(p)|:0.0025832821543995727
                      +# 350   f(x): -0.090513|grad f(p)|:0.002583282152137569
                      +# 360   f(x): -0.090513|grad f(p)|:0.0025832821498755487
                      +# 370   f(x): -0.090513|grad f(p)|:0.0025832821476135036
                      +# 380   f(x): -0.090513|grad f(p)|:0.0025832821453515035
                      +# 390   f(x): -0.090513|grad f(p)|:0.0025832821430894675
                      +# 400   f(x): -0.090513|grad f(p)|:0.0025832821408274405
                      +# 410   f(x): -0.090513|grad f(p)|:0.002583282138565445
                      +# 420   f(x): -0.090513|grad f(p)|:0.002583282136303441
                      +# 430   f(x): -0.090513|grad f(p)|:0.00258328213404143
                      +# 440   f(x): -0.090513|grad f(p)|:0.002583282131779385
                      +# 450   f(x): -0.090513|grad f(p)|:0.0025832821295174104
                      +# 460   f(x): -0.090513|grad f(p)|:0.002583282127255372
                      +# 470   f(x): -0.090513|grad f(p)|:0.002583282124993372
                      +# 480   f(x): -0.090513|grad f(p)|:0.0025832821227313313
                      +# 490   f(x): -0.090513|grad f(p)|:0.0025832821204693065
                      +# 500   f(x): -0.090513|grad f(p)|:0.002583282118207321
                      +# 510   f(x): -0.090513|grad f(p)|:0.0025832821159453034
                      +# 520   f(x): -0.090513|grad f(p)|:0.0025832821136832665
                      +# 530   f(x): -0.090513|grad f(p)|:0.0025832821114212673
                      +# 540   f(x): -0.090513|grad f(p)|:0.002583282109159243
                      +# 550   f(x): -0.090513|grad f(p)|:0.002583282106897217
                      +# 560   f(x): -0.090513|grad f(p)|:0.002583282104635213
                      +# 570   f(x): -0.090513|grad f(p)|:0.0025832821023731955
                      +# 580   f(x): -0.090513|grad f(p)|:0.0025832821001112094
                      +# 590   f(x): -0.090513|grad f(p)|:0.002583282097849167
                      +# 600   f(x): -0.090513|grad f(p)|:0.0025832820955871503
                      +# 610   f(x): -0.090513|grad f(p)|:0.0025832820933251325
                      +# 620   f(x): -0.090513|grad f(p)|:0.002583282091063122
                      +# 630   f(x): -0.090513|grad f(p)|:0.0025832820888010873
                      +# 640   f(x): -0.090513|grad f(p)|:0.0025832820865390785
                      +# 650   f(x): -0.090513|grad f(p)|:0.0025832820842770442
                      +# 660   f(x): -0.090513|grad f(p)|:0.0025832820820150576
                      +# 670   f(x): -0.090513|grad f(p)|:0.0025832820797530767
                      +# 680   f(x): -0.090513|grad f(p)|:0.0025832820774910523
                      +# 690   f(x): -0.090513|grad f(p)|:0.0025832820752290362
                      +# 700   f(x): -0.090513|grad f(p)|:0.002583282072966992
                      +# 710   f(x): -0.090513|grad f(p)|:0.002583282070704973
                      +# 720   f(x): -0.090513|grad f(p)|:0.0025832820684429532
                      +# 730   f(x): -0.090513|grad f(p)|:0.002583282066180946
                      +# 740   f(x): -0.090513|grad f(p)|:0.0025832820639189306
                      +# 750   f(x): -0.090513|grad f(p)|:0.0025832820616569214
                      +# 760   f(x): -0.090513|grad f(p)|:0.00258328205939488
                      +# 770   f(x): -0.090513|grad f(p)|:0.002583282057132884
                      +# 780   f(x): -0.090513|grad f(p)|:0.0025832820548708406
                      +# 790   f(x): -0.090513|grad f(p)|:0.002583282052608873
                      +# 800   f(x): -0.090513|grad f(p)|:0.002583282050346837
                      +# 810   f(x): -0.090513|grad f(p)|:0.0025832820480848214
                      +# 820   f(x): -0.090513|grad f(p)|:0.0025832820458228205
                      +# 830   f(x): -0.090513|grad f(p)|:0.0025832820435608087
                      +# 840   f(x): -0.090513|grad f(p)|:0.0025832820412987944
                      +# 850   f(x): -0.090513|grad f(p)|:0.0025832820390367726
                      +# 860   f(x): -0.090513|grad f(p)|:0.002583282036774768
                      +# 870   f(x): -0.090513|grad f(p)|:0.002583282034512706
                      +# 880   f(x): -0.090513|grad f(p)|:0.002583282032250709
                      +# 890   f(x): -0.090513|grad f(p)|:0.0025832820299886896
                      +# 900   f(x): -0.090513|grad f(p)|:0.002583282027726701
                      +# 910   f(x): -0.090513|grad f(p)|:0.002583282025464682
                      +# 920   f(x): -0.090513|grad f(p)|:0.0025832820232026517
                      +# 930   f(x): -0.090513|grad f(p)|:0.002583282020940619
                      +# 940   f(x): -0.090513|grad f(p)|:0.0025832820186786334
                      +# 950   f(x): -0.090513|grad f(p)|:0.002583282016416595
                      +# 960   f(x): -0.090513|grad f(p)|:0.0025832820141545986
                      +# 970   f(x): -0.090513|grad f(p)|:0.0025832820118925717
                      +# 980   f(x): -0.090513|grad f(p)|:0.0025832820096305525
                      +# 990   f(x): -0.090513|grad f(p)|:0.002583282007368543
                      +# 1000  f(x): -0.090513|grad f(p)|:0.0025832820051065217

                      To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.

                      q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.089673|grad f(p)|:0.0033633987039373655
                      q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;
                      +    evaluation=InplaceEvaluation(),
                      +    debug = [:Iteration, :Cost, :GradientNorm, 10, "\n"],
                      +);
                      Initial f(x): -0.000727
                      +# 10    f(x): -0.089673|grad f(p)|:0.00336339870393737

                      Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.

                      @benchmark trust_regions($M, $f, $grad_f, $p0;
                      +  objective_type=:Euclidean,
                      +  evaluation=InplaceEvaluation(),
                      +)
                      BenchmarkTools.Trial: 10 samples with 1 evaluation.
                      + Range (min … max):  488.560 ms … 542.951 ms  ┊ GC (min … max): 3.26% … 3.55%
                      + Time  (median):     498.677 ms               ┊ GC (median):    3.22%
                      + Time  (mean ± σ):   503.851 ms ±  17.951 ms  ┊ GC (mean ± σ):  3.27% ± 0.11%
                      +
                      +  █ ▁ ▁▁           ▁▁▁                      ▁                 ▁  
                      +  █▁█▁██▁▁▁▁▁▁▁▁▁▁▁███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
                      +  489 ms           Histogram: frequency by time          543 ms <
                      +
                      + Memory estimate: 1.97 GiB, allocs estimate: 40408.
                      @benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;
                      +  evaluation=InplaceEvaluation(),
                      +  objective_type=:Euclidean
                      +)
                      BenchmarkTools.Trial: 294 samples with 1 evaluation.
                      + Range (min … max):  12.991 ms … 148.108 ms  ┊ GC (min … max): 0.00% … 87.36%
                      + Time  (median):     15.369 ms               ┊ GC (median):    3.17%
                      + Time  (mean ± σ):   17.014 ms ±   8.238 ms  ┊ GC (mean ± σ):  7.16% ±  7.03%
                      +
                      +       ▁  █  ▂                                                  
                      +  ▆▁▁▇▅█▃▆█▇▅█▄▁▆▃▂▂▁▁▂▅▂▃▅▂▁▃▃▄▂▃▅▃▁▁▁▁▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▃▁▂▃ ▃
                      +  13 ms           Histogram: frequency by time         28.6 ms <
                      +
                      + Memory estimate: 37.43 MiB, allocs estimate: 2920.
                      @benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;
                      +    evaluation=InplaceEvaluation(),
                      +)
                      BenchmarkTools.Trial: 506 samples with 1 evaluation.
                      + Range (min … max):  8.717 ms … 152.718 ms  ┊ GC (min … max): 0.00% … 90.61%
                      + Time  (median):     8.884 ms               ┊ GC (median):    0.00%
                      + Time  (mean ± σ):   9.881 ms ±   6.537 ms  ┊ GC (mean ± σ):  4.94% ±  5.90%
                      +
                      +  ▆█▂     ▂▃    ▁                                              
                      +  ███▄▁▁▆▆██▇▄▆██▆▇▄▅▇▄▄▁▁▆▄▇▄▆▁▅▅▆▁▅▅▄▁▁▄▅▅▁▆▇▇▇▄▄▄▄▁▁▁▁▁▁▄▄ ▇
                      +  8.72 ms      Histogram: log(frequency) by time      14.7 ms <
                      +
                      + Memory estimate: 10.77 MiB, allocs estimate: 2899.

                      We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.

                      Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.

                      [distance(M, q1, q) for q ∈ [q2,q3] ]
                      2-element Vector{Float64}:
                      + 4.471485799821605e-15
                      + 0.048047538209352994
                      [distance(M, q3, q) for q ∈ [q4,q5] ]
                      2-element Vector{Float64}:
                      + 0.08269488012454579
                      + 0.08269488012454579

                      Which we can also see in the final cost, comparing it to the Eigenvalue

                      [f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]
                      5-element Vector{Float64}:
                      +  2.76900562450888e-5
                      +  2.769005624428389e-5
                      + -0.000836208332542443
                      +  3.191891195797325e-16
                      +  3.191891195797325e-16

                      Summary

                      We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.

                      Literature

                      diff --git a/v0.1.8/examples/Riemannian-mean/index.html b/v0.1.8/examples/Riemannian-mean/index.html new file mode 100644 index 0000000..3350f4e --- /dev/null +++ b/v0.1.8/examples/Riemannian-mean/index.html @@ -0,0 +1,33 @@ + +Riemannian Mean · ManoptExamples.jl

                      The Riemannian Center of Mass (mean)

                      Ronny Bergmann 2023-07-02

                      Preliminary Notes

                      Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.

                      For this first example, the objective is a very common one, for example also used in the Get started: optimize! tutorial of Manopt.jl.

                      The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.

                      There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.

                      For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,

                      Loading packages and defining data

                      Loading the necessary packages and defining a data set on a manifold

                      using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random
                      +Random.seed!(42)
                      +M = Sphere(2)
                      +n = 100
                      +σ = π / 8
                      +p = 1 / sqrt(2) * [1.0, 0.0, 1.0]
                      +data = [exp(M, p,  σ * rand(M; vector_at=p)) for i in 1:n];

                      Variant 1: Using the functions

                      We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get started: optimize!.

                      f = ManoptExamples.RiemannianMeanCost(data)
                      +grad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)

                      Then we can for example directly call a gradient descent as

                      x1 = gradient_descent(M, f, grad_f, first(data))
                      3-element Vector{Float64}:
                      + 0.6868392794567202
                      + 0.006531600696673591
                      + 0.7267799821044285

                      Variant 2: Using the objective

                      A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do in-place-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as

                      rmo = ManoptExamples.Riemannian_mean_objective(
                      +    M, data,
                      +    evaluation=InplaceEvaluation(),
                      +)

                      Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.

                      rmp = DefaultManoptProblem(M, rmo)

                      This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface

                      s1 = GradientDescentState(M, copy(M, first(data)))
                      +solve!(rmp, s1)
                      +x2 = get_solver_result(s1)
                      3-element Vector{Float64}:
                      + 0.6868392794567202
                      + 0.006531600696673591
                      + 0.7267799821044285

                      but we can easily use a conjugate gradient instead

                      s2 = ConjugateGradientDescentState(
                      +    M,
                      +    copy(M, first(data)),
                      +    StopAfterIteration(100),
                      +    ArmijoLinesearch(M),
                      +    FletcherReevesCoefficient(),
                      +)
                      +solve!(rmp, s2)
                      +x3 = get_solver_result(s2)
                      3-element Vector{Float64}:
                      + 0.6868393613136017
                      + 0.006531541407458413
                      + 0.7267799052788726
                      diff --git a/v0.1.8/examples/Robust-PCA/index.html b/v0.1.8/examples/Robust-PCA/index.html new file mode 100644 index 0000000..753c8ab --- /dev/null +++ b/v0.1.8/examples/Robust-PCA/index.html @@ -0,0 +1,64 @@ + +Robust PCA · ManoptExamples.jl

                      The Robust PCA computed on the Grassmann manifold

                      Ronny BergmannLaura Weigl 2023-07-02

                      For this example we first load the necessary packages.

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using LinearAlgebra, Random, Statistics
                      +using Manifolds, Manopt, ManoptExamples
                      +using Plots
                      +Random.seed!(42)

                      Computing a Robust PCA

                      For a given matrix $D ∈ ℝ^{d×n}$ whose columns represent points in $ℝ^d$, a matrix $p ∈ ℝ^{d×m}$ is computed for a given dimension $m < n$: $p$ represents an ONB of $ℝ^{d×m}$ such that the column space of $p$ approximates the points (columns of $D$), i.e. the vectors $D_i$ as well as possible.

                      We compute $p$ as a minimizer over the Grassmann manifold of the cost function:

                      \[\begin{split} +f(p) +& = \frac{1}{n}\sum_{i=1}^{n}{\operatorname{dist}(D_i, \operatorname{span}(p))} +\\ +& = \frac{1}{n} \sum_{i=1}^{n}\lVert pp^TD_i - D_i\rVert +\end{split}\]

                      The output cost represents the average distance achieved with the returned $p$, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that $f$ is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter $ε$.

                      \[f_ϵ(p) = \frac{1}{n} \sum_{i=1}^n{ℓ_ϵ(\lVert pp^{\mathrm{T}}D_i - D_i\rVert)},\]

                      where $ℓ_ϵ(x) = \sqrt{x^2 + ϵ^2} - ϵ$.

                      The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).

                      First, we generate random data. For illustration purposes we take points in $\mathbb R^2$ and $m=1$, that is we aim to find a robust regression line.

                      n = 40
                      +d = 2
                      +outliers = 15
                      +data = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'
                      +# Outliers:
                      +permute = shuffle(1:size(data, 2))'
                      +data[:, permute[1:outliers]] = 30 * randn(2, outliers)
                      +# We are looking for a line here so we set
                      +m = 1

                      We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.

                      M = Grassmann(d,m);

                      For the initial matrix $p_0$ we use classical PCA via singular value decomposition. Thus, we use the first $d$ left singular vectors.

                      Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.

                      Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection $pp^T - I$, which converts the Euclidean to the Riemannian gradient.

                      The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.

                      We run the procedure several times, where the smoothing parameter $ε$ is reduced iteratively.

                      ε = 1.0
                      +iterations = 6
                      +reduction = 0.5
                      +U, S, V = svd(data);
                      +p0 = U[:, 1:m]
                      2×1 Matrix{Float64}:
                      + -0.7494248652139397
                      +  0.6620893983436593

                      Let’s generate the cost and gradient we aim to use here

                      f = ManoptExamples.RobustPCACost(M, data, ε)
                      +grad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)
                      ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])

                      and check the initial cost

                      f(M, p0)
                      9.430690947905521

                      Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.

                      q = copy(M, p0)
                      +εi = ε
                      +for i in 1:iterations
                      +    f.ε = εi
                      +    grad_f.ε = εi
                      +    global q = trust_regions(
                      +        M,
                      +        f,
                      +        grad_f,
                      +        ApproxHessianFiniteDifference(
                      +            M, q, f;
                      +            vector_transport_method=ProjectionTransport(),
                      +            retraction_method=PolarRetraction(),
                      +        ),
                      +        q;
                      +        (project!)=project!,
                      +    )
                      +    global εi *= reduction
                      +end

                      When finally setting ε we can investigate the final cost

                      f.ε = 0.0
                      +f(M, q)
                      9.412961981726742

                      Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.

                      fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label="Data points");
                      +plot!(
                      +    fig,
                      +    q[1] * [-1, 1] * 100,
                      +    q[2] * [-1, 1] * 100;
                      +    linecolor=:red,
                      +    linewidth=2,
                      +    label="Robust PCA",
                      +);
                      +plot!(
                      +    fig,
                      +    p0[1] * [-1, 1] * 100,
                      +    p0[2] * [-1, 1] * 100;
                      +    xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],
                      +    ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],
                      +    linewidth=2,
                      +    linecolor=:black,
                      +    label="Standard SVD",
                      +)

                      Figure 1: The result of the robust PCA vs. SVD

                      diff --git a/v0.1.8/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.8/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..e695072 --- /dev/null +++ b/v0.1.8/examples/Robust-PCA_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/Rosenbrock/index.html b/v0.1.8/examples/Rosenbrock/index.html new file mode 100644 index 0000000..a1eb69e --- /dev/null +++ b/v0.1.8/examples/Rosenbrock/index.html @@ -0,0 +1,59 @@ + +Rosenbrock · ManoptExamples.jl

                      The Rosenbrock Function

                      Ronny Bergmann 2023-01-03

                      After loading the necessary packages

                      using Pkg;
                      +cd(@__DIR__)
                      +Pkg.activate("."); # use the example environment,
                      using Manifolds, Manopt, ManoptExamples
                      +using Plots

                      We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).

                      a = 100.0
                      +b = 1.0
                      +p0 = [1/10, 2/10]

                      which is defined on $\mathbb R^2$, so we need

                      M = ℝ^2
                      Euclidean(2; field=ℝ)

                      and can then generate both the cost and the gradient

                      f = ManoptExamples.RosenbrockCost(M; a=a, b=b)
                      +grad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)
                      ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)

                      For comparison, we look at the initial cost

                      f(M, p0)
                      4.42

                      And to illustrate, we run two small solvers with their default settings as a comparison.

                      Gradient Descent

                      We start with the gradient descent solver.

                      Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.

                      gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)
                      # Solver state for `Manopt.jl`s Gradient Descent
                      +After 200 iterations
                      +
                      +## Parameters
                      +* retraction method: ExponentialRetraction()
                      +
                      +## Stepsize
                      +ArmijoLinesearch() with keyword parameters
                      +  * initial_stepsize    = 1.0
                      +  * retraction_method   = ExponentialRetraction()
                      +  * contraction_factor  = 0.95
                      +  * sufficient_decrease = 0.1
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 200:  reached
                      +    |grad f| < 1.0e-8: not reached
                      +Overall: reached
                      +This indicates convergence: No
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost

                      gd_x = get_record(gd_state, :Iteration, :Iteration)
                      +gd_y =  get_record(gd_state, :Iteration, :Cost)
                      +f(M, get_solver_result(gd_state))
                      0.10562873187751265

                      Quasi Newton

                      We can improve this using the quasi Newton algorithm

                      qn_state = quasi_Newton(M, f, grad_f, p0;
                      +    record = [:Iteration, :Cost], return_state=true
                      +)
                      # Solver state for `Manopt.jl`s Quasi Newton Method
                      +After 26 iterations
                      +
                      +## Parameters
                      +* direction update:        limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.
                      +* retraction method:       ExponentialRetraction()
                      +* vector transport method: ParallelTransport()
                      +
                      +## Stepsize
                      +WolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments
                      +  * retraction_method = ExponentialRetraction()
                      +  * vector_transport_method = ParallelTransport()
                      +
                      +## Stopping criterion
                      +
                      +Stop When _one_ of the following are fulfilled:
                      +    Max Iteration 1000: not reached
                      +    |grad f| < 1.0e-6: reached
                      +Overall: reached
                      +This indicates convergence: Yes
                      +
                      +## Record
                      +(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)

                      And we see it stops far earlier, after 45 Iterations. We again collect the recorded values

                      qn_x = get_record(qn_state, :Iteration, :Iteration)
                      +qn_y =  get_record(qn_state, :Iteration, :Cost)
                      +f(M, get_solver_result(qn_state))
                      1.4404666436813376e-18

                      and see that the final value is close to the one of the minimizer

                      f(M, ManoptExamples.minimizer(f))
                      0.0

                      which we also see if we plot the recorded cost.

                      fig = plot(gd_x, gd_y; linewidth=1, label="Gradient Descent");
                      +plot!(fig, qn_x, qn_y; linewidth=1, label="Quasi Newton")

                      Figure 1: The result of the robust PCA vs. SVD

                      diff --git a/v0.1.8/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg b/v0.1.8/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg new file mode 100644 index 0000000..67f8e6f --- /dev/null +++ b/v0.1.8/examples/Rosenbrock_files/figure-commonmark/fig-pca-output-1.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/Total-Variation/index.html b/v0.1.8/examples/Total-Variation/index.html new file mode 100644 index 0000000..139730e --- /dev/null +++ b/v0.1.8/examples/Total-Variation/index.html @@ -0,0 +1,107 @@ + +Total Variation · ManoptExamples.jl

                      Total Variation Minimization

                      Ronny Bergmann 2023-06-06

                      Introduction

                      Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].

                      This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.

                      The manifold-valued ROF model

                      Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold $s = (s_i)_{i=1}^N \in \mathbb M^n$ of length $n \in \mathbb N$, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term $D(p,s)$ to “stay close to” $s$ and a regularizer $R(p)$. For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain

                      \[\operatorname*{arg\,min}_{p\in\mathcal M^n} +f(p), +\qquad +f(p) = D(p,s) + α R(p) = \sum_{i=1}^n d_{\mathcal M}^2(s_i,p_i) + α\sum_{i=1}^{n-1} d_{\mathcal M}(p_i,p_{i+1}),\]

                      where $α > 0$ is a weight parameter.

                      The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost $f(p)$ to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any $p_i=p_{i+1}$. So we have to use another technique.

                      The Cyclic Proximal Point algorithm

                      If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the Cyclic Proximal Point Algorithm [Bac14].

                      Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.

                      The Optimsation

                      using Manifolds, Manopt, ManoptExamples, ManifoldDiff
                      +using ManifoldDiff: prox_distance
                      +using ManoptExamples: prox_Total_Variation
                      +n = 500 #Signal length
                      +σ = 0.2 # amount of noise
                      +α = 0.5# in the TV model

                      We define a few colors

                      using Colors, NamedColors, ColorSchemes, Plots, Random
                      +data_color = RGBA{Float64}(colorant"black")
                      +light_color = RGBA{Float64}(colorant"brightgrey")
                      +recon_color = RGBA{Float64}(colorant"vibrantorange")
                      +noisy_color = RGBA{Float64}(colorant"vibrantteal")

                      And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.

                      Random.seed!(23)
                      +M = Circle()
                      +N = PowerManifold(M, n)
                      +data = ManoptExamples.artificial_S1_signal(n)
                      +s = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]
                      +t = range(0.0, 1.0; length=n)
                      +scene = scatter(
                      +    t,
                      +    data;
                      +    markercolor=data_color,
                      +    markerstrokecolor=data_color,
                      +    markersize=2,
                      +    lab="original",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    s;
                      +    markersize=2,
                      +    markercolor=noisy_color,
                      +    markerstrokecolor=noisy_color,
                      +    lab="noisy",
                      +)
                      +yticks!(
                      +    [-π, -π / 2, 0, π / 2, π],
                      +    [raw"$-\pi$", raw"$-\frac{\pi}{2}$", raw"$0$", raw"$\frac{\pi}{2}$", raw"$\pi$"],
                      +)

                      As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.

                      Defining cost and the proximal maps, which are actually 3 proxes to be precise.

                      f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)
                      +proxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_Total_Variation(N, α * λ, p))

                      We run the algorithm

                      o = cyclic_proximal_point(
                      +    N,
                      +    f,
                      +    proxes_f,
                      +    s;
                      +    λ=i -> π / (2 * i),
                      +    debug=[
                      +        :Iteration,
                      +        " | ",
                      +        DebugProximalParameter(),
                      +        " | ",
                      +        :Cost,
                      +        " | ",
                      +        :Change,
                      +        "\n",
                      +        1000,
                      +        :Stop,
                      +    ],
                      +    record=[:Iteration, :Cost, :Change, :Iterate],
                      +    return_state=true,
                      +);
                      Initial  |  | f(x): 59.187445 | 
                      +# 1000   | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283
                      +# 2000   | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678
                      +# 3000   | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907
                      +# 4000   | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957
                      +# 5000   | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175
                      +The algorithm reached its maximal number of iterations (5000).

                      We can see that the cost reduces nicely. Let’s extract the result an the recorded values

                      recon = get_solver_result(o)
                      +record = get_record(o)

                      We get

                      scene = scatter(
                      +    t,
                      +    data;
                      +    markercolor=data_color,
                      +    markerstrokecolor=data_color,
                      +    markersize=2,
                      +    lab="original",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    s;
                      +    markersize=2,
                      +    markercolor=light_color,
                      +    markerstrokecolor=light_color,
                      +    lab="noisy",
                      +)
                      +scatter!(
                      +    scene,
                      +    t,
                      +    recon;
                      +    markersize=2,
                      +    markercolor=recon_color,
                      +    markerstrokecolor=recon_color,
                      +    lab="reconstruction",
                      +)

                      Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”

                      Outlook

                      We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the $\operatorname{TV}_2$ yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.

                      Another extension for both first and second order TV is to apply this for manifold-valued images $S = (S_{i,j})_{i,j=1}^{m,n} \in \mathcal M^{m,n}$, where the distances in the regularizer are then used in both the first dimension $i$ and the second dimension $j$ in the data.

                      Technical details

                      This version of the example was generated with the following package versions.

                      Pkg.status()
                      Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`
                      +  [6e4b80f9] BenchmarkTools v1.5.0
                      +  [35d6a980] ColorSchemes v3.25.0
                      +  [5ae59095] Colors v0.12.11
                      +  [7073ff75] IJulia v1.24.2
                      +  [8ac3fa9e] LRUCache v1.6.1
                      +  [d3d80556] LineSearches v7.2.0
                      +  [af67fdf4] ManifoldDiff v0.3.10
                      +  [1cead3c2] Manifolds v0.9.18
                      +  [3362f125] ManifoldsBase v0.15.10
                      +  [0fc0a36d] Manopt v0.4.63
                      +  [5b8d5e80] ManoptExamples v0.1.7 `..`
                      +  [51fcb6bd] NamedColors v0.2.2
                      +  [91a5bcdd] Plots v1.40.4
                      +  [6099a3de] PythonCall v0.9.20

                      Literature

                      [Bac14]
                      M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [ROF92]
                      L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.8/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg b/v0.1.8/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg new file mode 100644 index 0000000..f5c90b3 --- /dev/null +++ b/v0.1.8/examples/Total-Variation_files/figure-commonmark/cell-10-output-1.svg @@ -0,0 +1,1551 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg b/v0.1.8/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg new file mode 100644 index 0000000..414a9ca --- /dev/null +++ b/v0.1.8/examples/Total-Variation_files/figure-commonmark/cell-6-output-1.svg @@ -0,0 +1,1048 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.1.8/examples/img/bezier/Casteljau-illustr.png b/v0.1.8/examples/img/bezier/Casteljau-illustr.png new file mode 100644 index 0000000000000000000000000000000000000000..ecddd4acc643c22a65dc416fa64eb3341011fbd5 GIT binary patch literal 131251 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≪`$_g5pU!0dqVCc7+?{w6;c^8V_2)Et z{_#$a2w)A%r$7B^JLsT;?ABXv4ayz&q9G$}{rfYl+ngEpN4@{?Mh(SZcb#!(d-Mb} zXd}Nd0Qv0i?uJdA*uC|AsOH?E{Y)*g`@EF{9s@RW5efppZJw+&CIu(4(ek4bz|o)_MJ!aoU|d&q!o7*I`2_GJj;!e`Z?_;O`#R@nM4# zo<)Iok1P62Z;*GwvC<#B_``U-9*%d92i#PO4!HA<9|xX2-}p{EzE{}&B(k9)Y7+Tz zH}~i7*u;h5n*;Cl0e&cV-b0T1hX;-~>dteNpV4oQ&*O$3((inBzkH9<3g4WMe1nI) zbLb4c^vf>0%pQLD;hIzDa`OtUr?R4a+Xnmo_rD+feeG*sGfth;Nn3$FS0K@NJbrAa z5gQ|k2#e+5;1C^1Gf}6`{chPj%h76f0CzZwjnUM-9@2Ga%?CS6lEo#TZ3-^mO(B9j z!GH_idVTGA<@`((2Yvz1<3xVigBx_R2=2`{-?VeiImdeT=w_?8DWi9+u`VZm#TN7# zZTsu;o)Ztq4{Ih|9-MaP0p-c-25`p71;H{Y6Y}#=b=c&Uq9c#9Kd6b~KGgRr;vP_M z=xnue)12V?!Zh?dLP5e2mbS`t(nj1)3z+~tahZ`)(g^2D1Dw&GV0}C!J`DVTmVFIU z<)`xrUM7Ml9(YUv!Y{lgtTzM*8};jWarb9z`0Wt?j(b#zdH&!A@J`$)uPCt6m7!p# zDf%t?9IXJHrs#KnCO%{Wr6;U3{{0_rw|_qRcMX|lihOYQgAmd-O9f2QS+|EO)%Roh?x$N=lzCELn&a3IqMxeia^2R1wbR}wx~ zvbtSU+3#rW$Sc+9OI*p-k@yBH^vRPahZ;^q{#yqdtkr7wJY}MGf>gDLmWc{p9qDM% zPhQmP9Q z;c+?$$FsJigj1pz4z7zXzD2_(i`V_d`%OfPSG>t^;SRr$vt(%n2Qru_zC>|)T#3HL zlT&x_2$(ncvycCF`tY$S`eFvv4uY`RAX{ zd}KIQ_TYmLHdf5jV2a_0HI}1s#Xl1#2h9xAg)cV_8EfC3{jv?|+Dq%|W0iNgPMhg! zJ8iwTz8x~~aOVfJ)+D>2RJbB8F};5;S!XE zs_Mq=gM<_R>b?6MfALVewu=9n;9Z0$uCRq|lTLSax@^Et4Dq;$y0uk(o=Q4M1GFL+zxmB??12X!2$u`Z zp8c+k9AH*-@eTHLm9|Q5EVZkT8fe`*YW4fh#JzLUNy8EF#!eg!imr;QQsGnRoxk?l zYmJhc1}k(3nKo@2O|9J$gheRZR4bmiM5O%cLeZ82K;_2#h6`&V;=O_)^AKRb1=#)9 z72f^SWrGj=ZOMze=xdMP$QLRuc-P#}(8`c}OH!!!AkAe3+hxl=MdKxH4FL}u#q0Rp z<{NmUeu%@vrV^j~bvuu)=kY__Wo>S^POy47635{)1J zl4ge4xkL*cLixunfqZpfBtX+~3&5f0MrBH)6uNI;Q-WWE2o(m=*+G2Zl;h?H7z-0% z5DaNeh*cP|)>?fuplH1%7T+UpE}C5s+JYC&m4?>D1HUk>RdF;h4*&o_07*naRCzTd zZJw9)g>ipw$NNv_9`7&y-NVJ(_=|V*_jnxb;XPIXn~fRNMJ?#{TCB9w7H{opU-|gQ zZ2$2G+fz?Ht!-~#Fr9K4$mJSW%CakV7CK#g@x?ZF?AUN=2AveIbmP;_J4zihLMO=7&4^9O1E=1Lb=^}*PS*mbA-J#YlRLl$g=Yf>7#>%bi}Jh zfTGhYK~5xN=qsLSEOH@BBG7k5Ta_l6+a={+mdH=4ZjI88-g=N?pUEb8Wem5mK~$>o zHrO8wc4gV%z|9bV_&t-bJ+1zXa6%u7oW(vqYT^ExfrJ_q&_adtA=J+S`0sht5_wTS z1$&FuSwy00NBSIZXJw}h+6+Ap`OYnTANB!V~ z5872%T@_9y%+!vBh4bgyZMXi$`V2q9zB^Or5oomL7l-t+Vf}O>9EZrn(GD)^X!HO! zye7@KCrD=%qjp+bGi$_%5ewnL zKd9VF<#3p4$*b0;+w^rA;Tl%y{x*lG+(n;TnlN|=z^f>r=zLuXy!JXa>Zc{2$wTts9*%`t&I2`1w~3djf_e}aEd7F z^%e?^803OcZ-8d?mTwEH4LrDjQGDGD`eZ|mwRI&5^_SbamZ)xdE@d z7ukGR>&8Ug=~IzWpI*N*!ii#sr{q&SZ=+$F>zO!^3zY5s_up@)pMJX0$SW)?4DxW* z7p}Hz|KFEv;p#H`+_M^L&q=pWjp%GgjOZCIU*W9&cyPYD0;iEe+M;seVdPdJ9nwL= z?K5?K@O1H_Lqm^ybzInuR_N7{ri~vz{xQv|KPSd8kIt!aQT)yR43k>BmmW@D#|^RTUHh88N3_6W$cSFmj<+YRN7RJP{PcUzzCId(=Lo#Lj7 z_HQe;+lH;$g`){O%mMi@cqO$0-FFQg~0zxVxr``-0(a&!AVx4eX%oOjOMXYaMwT6>k<500G`%Q$u) zF-(;$Z2X>{Iy-7iul;07kKHS$K3{R4&?31F9rgGG9aK{&h4H5MI(DZMFZ6w(!5{1t z_f%d*Q-Tw9gKg!GQ|BUN%NK=F$TQ9y`l&~aIESr_e9eyw8ThDr<{!QC3Z4E}Z`UkZ zt*IPAmn>a+;v{R)It@mJ(s?^*1ui&K1|ts8lun|#nq6I?*Tk23$EEa>wgw=x%(H+bg-Li1wC&H*69va&iLPg zi{leN^mriF0-p+@L@W*S=)>hLkDop)c+72@M}L0(ZXGVO|HvWycc+14_c?a${~cI7 zM~{8Uk|oA=w>fj>gjMnG*l)l6c4L^71^|nw;8#=+!KYI__0uNw+ULjg*~3!NwQ>kw zl~doXdy~wVH!=#LGmf;-jyxS3$U7i?&{-g%}xbeen-89m&%J8|ISqXE}k zb4^$PH+}l_aNrPAFs!5apgssR@{nP6&y(xz`_E~pU9GUIwGi&`w)6|(pv7eXhfaXc z$cC2{)q6d2eoNDuHEX(+@0X@YJt$YTRm&lYr2UDQiG5s1O)c z&H(&mLnR0!t@28gTL?`E4miCSa&rJ>a)ryCx;!b6DU4`TvCC6ZX;5n&zjV}L4(Kr* zF;(;EbdzP>o>;jn(Uamunm}D}q32P@&f+-?J@cq+cU!!8u|C;)cvu;K&pr3pJKph* zFg$zPZMWI__3MMdb_Wz>OvqrJ!08=RyY0Qh5<~6Z*TnkIR_hpI{ln>(*MjX&F!D#; zx}(9CmeY<>7WS!7nRh(lDb5{yx#9@mgDu~_eY<_>OJB09uDU8rvCuH1uKD=N2R`u6 z*4oryYc}t)ul#XyDE9bCEq3-X6Gcz@o;itVc(^l%c4P|tiA%%hFruwdh#%@hLQ6D% z-+116=app4OLFK!xKBeB&6-c&DO$doY(hyraAkCyf3wP4vdlah`Fo?UaU?OOUizPZ=FAgBJc%;HIM z>KCkSv`4pAZ;>1}4!cp#x&}6#Jos5kIbLsWkAdlP>-owl_8UB?lLsGs&|dkr>YyTd$qyen(vF!kN~Z$S5K6Bf)VVuz z=ygAWLx+Ya50thC-=errY2;_EhWVRI?VZDmk{!Ab3ZGQfDN9?$=wBue2`KyGI2RHs zH_E7dD>z*`Djh)qp7+XKm;$pT5R_YM4jr5b-a-sNUi_1h1JOFon5c{|kT1s}F4>I} zUDvHRVO9zj3zeGGyEopqM|>}Nj< z$AP}-O>eU2o_j8Ad7Ct8Qs|}A^IN!Zp`Cp4$zd4xfd?MYj+ibRHni3H8k%kH2rZJE z+-3KvKX9C!`bTu=%<4UIGU};UdXbzvpQtRRWkd;)*dyfJJ4Gdc3R!_gonV`J_T5Ig zbO>4*x(AzgzyE><;Z#6))1$>v}=9`Pwg+}3!kxllGCr%E| zGBJ^|KP66U)S)9c(9Y%h&RuDGbZ=h1eEFZ%2>ezOmssW#N_OZV<3j}+7WtxvoqDwd zpSg4<{P(9k#uyj{Be_ZqR630VVA2vy4bXz%P+=%}ITazb?0kNMSFJTP^1-{3X{a+U z6P$?m z*qKv*^PAsn-}=_K!nfGzy)%4Eube|j=<(_Emv-HC*BMU#J@0vs-G2KW_JVqWz4a~j z#%WDEnjzy!L&Mca4_mzQf}v8;9=0?ffQyJG#$zK{Q(MZQ_`=R(zqNN!I;BLgM#}E-Zp2 z|3au5%y zkF?>fbO11_g_n$eaiRM-cj}Lo?+X?z2#3(%G&q!G}Tf0xtnjk*=|+O zu%WR@PJg66uR6lU=xgeK(x*4?Q%`VMXM-I(I&tC{R=o)H@+QdX(2?C?UK$yMCgS4^ zz~m}tqXB!2oKj9yW_c!#o;+#pzyJR5>0EX&Fik?;u^xg37w5GzZG!Vt%L=*t6u%uKN%qpfV^3lQr zM{v#uR|J%@$XjaxUbt}88g8|Mk2|Vr)E{LcW5`fGvQ{fR8%%hJyh?WLBdAb%O zNll;J(rqg?wad8ELoZElsW+D$wtZp5Wti>LpZ;`MK(|ms?)29D^f{abL%XZhL;RPI zf6R{6CtJVt*-zP&rN6hsdv@FLLt5<%TkGuCYxTKW4ZVY2X&C0NEu5YAD4mwvxe80+ z@C(aTSZZ)bpV23tX=p(kadfz}^UA*d^{%Wl^8VJOJ8#ocirG``=GBbJd z&93-Z3{UTzbhAjiT}OHTBS+S-mSPYAO|H_`&7%ha53#hfL99=OCK5yyY$7 z$k=au;~QZpo-&E2H@tKER{Ou-kuBGC_=2;n?jJShKJ#$9Y*V+jwe;HY1ADM@%zselcqTmtr)g>N6yK5`s5yl0g>jV!`Xe)1DL?X=Uv zv)7$YF4w|Iofh|}b#}`Neeg`{9IiWgg3Z*9i9H?re&;-7)Sq;;5(j^A=rk(4{*V`) zTOiZi3)9zX-Nj8wIO*pLypRI#u{m@h-lv0RnzUkXr_M?K+U(i0zpUY>Ud^x9Pna+v z2vC8z<((YC;i4kFwU#ZjJ9E;Kj|#{YyrR6t1&m4xY%cu#J%Uqckvx1xGaoYReS;CbrQsm3<9Q%*T0ICO^G zfBfSg4}d?CmDSox_w1tEbTrs))_v9W_NwF0w13(>(rz5G+YUcO4!4d@N_QxajL|X& z02T4zG*FlM+P*@HL4LT((O5`_2Xt^T!pgS(m<~=JlIeK6GM7C^s6A5iVBL^B#M{ z6o>p_pBBM2$k~5iFn0=Xdgrz2&>={tCj~1h!T#yGb?d&MBlMbd=t93*CUtz>2nLiZ zz%+~yWn`)V%7(#Q2ps7UhI|8QX$hhT4DV23h2+n-oKn(36Bjh*JMvIUd4n;p%LjGm z&&AT=`J-~+&)lQWl)-P5okJ~{cl9(;I6V9BC|(}tcYha$u?G)_iwj7s$7&U5Cn7cjp*kkSDi!TmedRwR=`6slpnlSSvFSTxcdUfgN{?R6$ z`uEm*#yjoO|7o{(_C9T|UhoE+J!`gld5JAg*fw;U0Pe-&501bgzvEjBtbj9`f;mukzmFCl^z#}hp5~USb{AR%$cW>0d6P&pg<29-5F3qj~6c~#Z zE#ekyD5jyB6#-4~H?W^hLmod?Fa1IZPq$XSH(|V3AP|SbWOl3I#TyCRxp8X=fzjIg) z+hGt-ov`AT2H~t(vvM{-$(st-;m3Watf&s9mYWNg)b##4)7|lR{zUK5XHQqiJ@mS? z2<~PLpciP9AuR?O>rC+usHZ z`ovi_W5crW-E_H>fxt1dZ+OES!peEh7xx8h-~cQFd~#k5WX$m3xbTq~wrVkd9A|(( z;8lu!&4mwTKrdy$SDk$lj^yQZH+sP|qTm&0@uOo4v}lp_4eUMuH`jYF2c9(RM7SI7 zU1L`)+89=~|McuOJ9GX-+bub1$gt-;lPrK63nN*DkH4clcr9FeG$qrhdHw$uerMt* zwN0*1>GSVVI?`G0>6@BaGUR$CC(gu4uMqvYS|S%}9-&?>lYSYoIx3)?P7wH18dqxX z6vl?ilVTMc$WK5y5f%a!Sc?H?;(Vw@{Hl!;{GmRh_2>1=-Jen1=x?6Mlj(x4C`_l5 zIPxN+sd+t3y1V0%?p@q*sdT2o&xK1W-KoD*;qg1QO#dA%D+(tQ?}(4)VNAVWL#cC_ zM^}%F@0vcbYL_i|*|@NMEgdeo;?O6rzkSNekkN5PhP+qEmMMCQuYdjP!#?)A?z+pq z_O-9siX@EbhaGM$n(y7VeTUt6!umfewIM zTmd{Xjb4;e26S?PFLUAGjFY56bou3%hv9SJ`)YOHj>Z}W=E^yzpAL@0a9k2Y?Tz-( zl5KXyy&7tl^S*4}a645)?VVjZKqiZAhgM`E8sIUdj z&Rogkb>_g0-5ZH%1Bj}Z{%5rUk5xpk7}`M31cy#5Do#Oy5D&nGsnJ$6zlo2=dHO=` z2n3bLb_9l1wBWCh>=jRo5Q8s@@M75OXsJgoL2lU#X)-e1{zxq|!-bR_)MQ=meX4tTi zqpf}W3$|g+Do4dGyzs&>l#c_`YU%LpZeD^P_2;(L`QaHU8+)*I>(;Qfj>ZM)ir-)(I3@-pdt<1Fcw6Ry1SO1t2K3&IEld9c;+8v74i z0;|@W^~JO;ySwe2A3twTX?vq-eZ^xJ&#`G?&v|->4nEH3RDZ%dMn5QzGYME_&s4J- zUp;DwG-_AGW2&#CgoBdC@64eq_8vNja*UmXtxGMGYb9Jb^ganv14AKv$N(XNP-iZP z#1$~mT&{dnI_0D?zu58|7ET?-sby!0^1|y{#c_9$(7cVU_};9C^XZdF0RKD5nsZ;E{=6UMG&T*RjLb8Im?sC$^kAt=0atzQg{w zxy#n+7}#;s4@vAR_Jn!dT~6{ynl*{j13YXLy2(K_(>45k>T4I+B_FuL&c6K#8@b{c z+j#RewrS0Z0B_E`BScGsEm^iKEcjxjHi2F{y->Esu@DbO!f-D<@iLrG&PU?oa=hRG z-?>V)v0jhh=}sKD45f3T+nsmbY2W*vb_gT`pSNY}Anyo#Fb7A@v99FD$-`fI$n=)I z4lx0ti=%RWdfz&GYExp(!_VI|E$gaw%5c7B;vWqN7DuuWj}9LrDWajDkp1Gt0TB^nh~1%sn?4jD#(=am|2DNgH_DMuP$jYdj^X#<)R|{sCUj8^A|*hOA6&JDTRM8cli+txi13Ry6sEj+? z7WbYpo{MH+#;HS;=VkgLx`w7^J7xY6_R}e^unSi7+iTu(sXcf9Z*AD^-?qhnO>DVR zC(>T3o;jlnbSn7T8yA7acN{x=7oniFMC&Z>0DOkYMvNE{TEyU9s{tW{7bx(75L|Jf1=`@f z-<>{WEUL`pA^4s21oGn4E5#eiMb>G|(tDt1=C}leYT%FSq4TN+P%0V)s<}ly^yQoO z*!&wb9IFqJzfUKBee&$YR7aHe(CfA-N;}WUNG0SXh^3Am)plt6!O9l<_|73VzpmHj z?Ac`J_Ws2l|MLU(xqttG*>)}7N`{#;XNJ*Eda9g$77c8h(`PxuIrGRGXU=1@=<(8H zWa<+e2_K*@$`6MF{ZW2+JokKflg>8c{K?B5o>MORzz{V<>hc|7p_{fp4;04;1Zmxg z^TK=N^whEQ&;lK<`vaMi58%St`iBf})dzbz?Ug^2Ovr)1?2snA=^b-y?C_?6BZ5=& z@*6z8G2}cUj%Uimk>eNGwum#w?kc`p4G%6UH9P_71 zjal`?#~q^YSdVM5Tjexq(SPIMHZ6FU#eJ zp0V@N-_d&}9}b-DW;8@_;w%D;1`dQ_cNC2kU+BhrzHE2;>8FPUg6_y^5O{q>VML#) z%a-OQ+qS#YzHztq6SOCG3Vij9sWwqEvZoUVoUk|1eEy8R2ZqxIKd?LS8)r^KiBS=E z=1SME_f4vc%^G_DCU7Et(ZR-gFPlTx)-}GB-k@QihjfXXY2iPPlyJZ-K!`M4+pScT@#1wY$+$2nV?YP^F7@b*9m@VHki-G{X{*oiZS*{wPO zY{NE=f!$+MMz>g3pmqNqC_LaoF0fPFfkhnma`FdvLOWxa#@7G$%wAjay!J@ zr13vEZ|#x_d}hd<^d2}AhTQ?+%0fW=1~Bt+^OmD!m?6SNWBP7ud4i{PLMJ`kV*+LL_f)|!T9IrN|CzS-B7g@k4Llesw(LxK8O zLE~#*``Vs+@4fdZIqXL?XHMgDpiCI-PM0Bg7=%!9M{tS>I4+n;g-4ar8D0#`XdcJe zhlmiaWaUMZ)!Z}ubY-k1es>2>S}u=|gAVV3RASg2ype5WoyK4-4!L8v z&`GbCICxx57;H@%s{QDH{@WHi{pTwXD#M7s^OUKYFO?COJY@>-0DD4!C$2;Mc3DI= z%fTz5Z9^M%WbKXyJ7Gza9j`Xlz4hP6&ODi(NA&dixJ!wPbG+Q5Q0%y-kcphpg$_{KQ* zU;p~o8DTRj04#d6>81?MIO7cCqOmbcbJEELX8Uwb^5wnD!JigywKHy99&mc=jG^|8 z^K}4?c&mXN)nj^8;V--@oJtSR4l!91PFoPeZG~J$vCGv z`J#!5WCS-_!>j?IqQSG)1AIXFoZr>P7oNdKuV?U~uA?~eyWG5mFBqnL<*Zn~L5DkZ z3?qi1+_V*nYo&NmC|<>;M=ezE%a_Ya^*l6dhZnR@Gw?0ZAaQW6@-8Qya^TFx_GeD2!L1&OH zaKH}IYoy`0TyxS4SO4{|f8{fs0oUjsY%LePaPmVB`JtPO{G|k(HFEB_fgf;j;44TXuZK81OOpR=E;Z&Fruxf)P%hA z3Q2ue%y00aQfc+346_sit|EEh5yBYPXhptAd)-k!b?HWs-(2p%NykN8B|}mHgRGUa zTmhWLLbBrV={(`AwIhkF83Wtku*KLo4?KG(#^nV2%7y$8Sn!N3r<_cIee}m4 ze|+eHGxYB(*eQ|oi1-E!UxJ8|wP+p()djhRGw zsqmqV^0~l?-_VHjrlG-nIf2F#J@tq_5A@EJcb*zFf0JBP#G#jM4&9j}CiIFJocd!A zJ@n8`8j@fxeV<-Bj3U4|T8gyjFnTylhTv)SM3u#1NAKiyhmBID2Hue-4rc~@lm$hn zf(J{0&nSlTs#17Up4XrA&W(-Nz1NxFD}@{7fCKmyYcvYM)#-D(3&~rlw6%;|F+8A$ zHbmb?KW_Rk`@u7E=zIEX$;Lf4eY`%enkC=}u^YJp{Ni%?aal+13I2}vJi83!gsTKt zvYx&=JFl(BmUh(JfA6WYZ|$nL*=ri@qG_D(F58(fp9AFsm$KctQYLl}hY3Bb7-xPR zhkMmkR|RL!&^wJx=DeBXrU5_?pF>=5Rtzr}8<_iMxSU09^t$N;amTJRI)EJoNB9li zludBH6F;NH%fq~qai(nxKDD2D@c9>5RayFw5T@2MZ|{PueCdo_6nPRLy)g7e5_wi0FLTLyLEm*bgl-daz` z!1TN}^)j2Kr``Sb#L8VV>SJYq((5htLqIkP4W7sCQ951lG`V1doxU?;tr}{7|BP;X zYH^c|k`uptbA!zs(r*jK_vmx0(ytUUsK00(f&-lodg(r*h%KO3NjiGS+;LLgNuig` zYI*WvGkA~l(ziMGL7RB=2dBpQ@W>GK;i%yO=Z%nt-&`(Zz;#CnK+O4*NX2_xu`nx{589&wTx!`~AMh1k zP&WuY7iIC@(@<8l?n*5?uKeKV3LF>Aba0>@qedgO7K7JSE#g)zPB`sedBurZ*?#=E zX1jk~r#-T+-F9o65+})}n@2|$^06toaDtz1Yp8qRqI+Dtb3NfXlV0GgJLJSCw)WW< zruWzhOPlOCnXk*$OaF!9W)Igl+4VlvsYh{h_>|#?VeyPJi-st^*jj8Z0X(st++X#o zS4Fez^BkqYpRo%BXvX<@pe!z6#vO3xt(qra^+LN{c*knZTc`y6{=^y6ZP-3vQA;#5 zT=&5le7K{dG-wz#rcr{u_xf|(>2$(RbQ<~;y0yQbx%2O8(d%NtsmM^f^Dll*I^+y@ zG2-(K--!6EjR_c*WKig>!%&!qW2cqq3`JOY&Q~ZRjL(2!e$iAou%Z>5U(V{Mf>+L8 z?!^Sp2mL6zw{nSxFBn5F2l()-mIHW0i_=w3Tq&axrX``V~sO?HY- zi6h*xsms=H?F^sJr1u^T@PI2{n-a~N?U_2qxx0Sw8=1q&ab@GZ*7aGtdgAj&_S#Jv ze*d$4$4C|SSCr;iL!`;#^~iZkq+C6UZdZ1To{ccjv?_( z7is(=9~ZE=oTpwMWtAgfY8u6`-CFJT#XDEp*4=7Qs2y?hnNw_*KA+pJ_~`Bi>cnxx zZc!JjR;>!ooZ)pwF`|CM@rIxHA{su)y5m$hwyCjj;1kfMH40g3C4TBF=Fq*De#|k) zJSO3|NldI$#qMpcrJ>CkhY-H_}IaA7?Gz3y4FW(`bFcsj=snrPH; z$2Vb175b8^^1q`-z-HxX;#16g-Oz`lAMX|7oDL;-p2r)(^-#}V#b(4quIPjT@RRTz4Hb!`C^UUb8!Vq$O$skYBD!^1=Cz9$}j( z-<`Y5BWZ%Al6tX7?p*cK-#<*l=c=r$chuXh>-6@blmShyk>IpWWWRs&J*Z@$JjL-G{fw49JvVDd<1Ff zohN-ypX!ezUN@;x_Vpy6D(cKBv!V`Nz4TsAk7F)f%%hi%pycIIT$o@mfyD_dM4&Pl zhG*ddl>|&eE`ddHypa$x6#0kN8H(bHS0tFKWOFCxJdGmZ{DzMxG&GV9{`#CzG)*+` zV0?xa_yLVh*I=Zh6r8E+TzXRq{A%XK9dZoplrgRL=J7h!OLqOfH8S9Pv`tSvcj%_x z(PP((YTyeFICd^{4Sakw3>=v!r!PpG`Kj>x9U@=tfTN25B4A4;x{;c z7W>8sgs; zx|~J!@gK)Dd3OdQCs#ZSu1Rbv6 z&R=MPH_$~K!Vay@S5IFpyyGqxdQy22cNq>3e$pF&$Ifqm_u{=g9KbF!k3Lie|L7_D zV3Tb7A7ALQm7Ckce5(dXUms%bs;h}_1j zgA&KwOd#qqs!=FZosVQ?+< zYinTfj->U=gdZt?;01i7A;55ZGEW_K zqwo>UyLU*Bd|P%(?(+YvxI>4e1q&9SPW1Xd$Kf$zP+oKCh5DS$IHz(e0tk8nbh^LH@OQ!1{= zL%HhE<%2Su=cVEsXZ~{09Vd>Zz=HqC`OJx07&k(_Ua9JnYxh{E_9QcujUlIAYB_)( z`k9c^KHJ^VW2cVow9k+3wI@Z-ZJl*?J&WW-L|7!3G)K@){pKUz@ClnqS+&j&%q=U{ zSp;{T7Qx;4{4RYGwa>0Td7Qm@{zT22CwkO4Yp--Z>*KQ-B|= zZ0Al7T|DiPV{g!W`tNmE&(HOn^V;*8M$S}5De+a2UJ=~O={ZLob<`8uiuTzgBl8}j zaKnS(5x8?vDL7^X9;Z&l!FX208V8W7aD*;#d-_RVHXOg(&@nyn(2+h zGn_ZPf)@v)BX|D81M1Xe!{g(;!+S2us5N=1HGJaaJM-o}8jBt?qS^joqK2O34DMgw zVLRHfztp*$gX(`U1nQ}o(KB64C7eI8-7aqJwL?YY=eO6}Z`U_!+qGyCF{E|dhJI(0 zJJMng2sr;*575%0edYiC=mz`rA2$o>I(yH{N7;p^OtU@hojOQohZat6w_V!u%(^R1 ztK&QHQF{-)&2dm^+~w1|ZGgEOVRx&odoyJJM`Jup*r4oY>U13#4+~5hIO`n!$#G2Z|I4S zmJ`R3L%TOv@CiN=;e0{&x!^-IkdO47g+gGsU3}`6f2k9U>(qIC+&@GX%~$E?syTG_ z=dlv-@WT(^sUeIHBSd1_zFf?}4VVpcvk9hG3YAA?;n&8Pm0XEKkj@cWHjwqsA?1hJ%fDFkHAq?O2OJ6oNdKC#z6Gpf)2 zCM)`*_ImqIZD-rPYkOikAt~EYq>)E&z@z)M7F;f|$8~kuwWOW++jn=^XKq_zk8aUv zp<2;?{ppkJ^kZjO%a9SFVTS$keCg=nJ+!(mrlyJJbz4C1oMC%~UM;9&o7z&1`hJ0k zYHd@a>}aUELuVTs3*_`&+-J2?@N*z129~X*;}wVib5W`E+L>o(UW8sY&YjD9+_cU- zU$ml=xCX(&p#!g093ic3@CV=M(0a7;Gd+7N9a^03Olc3)c<6Q`7blI>2ZjkAdxIfW zrs6EGP*?|gedF}>J!fmxp5<3^uDkjNOLz3xYR#i-2W?g-P$(}eot^;(-+zAL)NVVs zwclPU3xD#?OD-!j@rUXed22cqV%Pf;Uf{5I&9=k#et3&4LO}XND-qS%8>n1{Zg@{`n0qw><>Dm36`UAW$C(q)??M9f1FIZPtq?q_ zkrrOzaJd)Cw`$-UN10A@wPZIA8uErARiLLnmt$bVezkskZe3zOdZHVfH>8?N2s!d= zHcBJOAJu%iI_x%G3;w>`H`&(Ijn>!Yv?Wb*&D|QgbJ@<-TdgFKE{E73bdXL7Bd5z( ztkl%#W^2+=`|VHdvadd^`jUOR?B$2pKQ5RWrcp3)+2ogZ*fYuiex{HLgY=QP^KPAY zQm>KE8#HzMTfM93*VHoM?C~|>&=)RT*q7|3w~JAiC5MRdK>K+in48LQC#KlD!=tis zVmN0GsiD`-&^*J|YZ2J-KF2I8BU$XK)OIIpEYg)I~Z}pH=<( z)E;|O4!%tUeNOw+xArvHuoi7y)6g}#jm@BwlBu^^Za!c;Js^MJfepjnE?>Ufw6-ez z9y4aF%{g?2>Z#v8a^E&BXf!)>>JaLx*kK%>h($===90 z;w-)*uo8>p>g>2NJ@)V8y6sW99lp%=gO%F1uIH8}76c|dppV2=N)BDlC=VUuP8=O4 zK3lqE$&&Dq6c(Lv0L+vrZ8mBAD7){kTkY?EwL-|(*(BB7)&FajjnOA@J2fN`{Tym0 z24g4bndd_%`1pmL2N&h*!58TMS#|hU*2+S-D7`h~(8Z*F?c)op&~z-{dl+Vsv)u0p zy{Irm35omJE1f$|8=+@)BSZ4ubLYe$oV$PZjg}wyRkBwHZj|T4>v8kJ8wZr*Jc+xE zT7`$xCB)f4a~^Vc__aX4>s2k_QVAToyL)U{Ym*%}L&w0XclW&J(bv4tk@&P`P4&4- z7Dnm5Kbcpk7%ga5D_nL9&Aj1N=Yp=bw>2)-B3_(7|~h^E~mAGQ#o)!j_HN7@BFZd z>Y=yD3~F)Jb8B~nzPYOAfC$jhqwaX;o?Z5#sU7xGePr%s`o!v`I&|itEe$q8pKN0h z9kv4-N5H1QpHgK3Id^-66ZM`kHWWL_Q2IK3<%~`dWiz^o1LxD&JcC15SGNuUs<$N@ z_t+^nF4HKxkk$X+{QY#B*QN!`a^{>VkSow|fF5wjCpg}urFSk{-!C53V*_>jXX2G+ zzs@G{)ebe~&|$`9mt7XD+;PVp_c0B>Jf)~6F>%21Q87`5SBilcc7%+JK;?2FBn-!} zx1HWQ&%OnYQ3hI{2r;3M7GlVd;Scb9_$c2NX9iGtMY}STs|BAI5>-kh*^9ko_z7H> zrPvE75TNT6dd2gB9?)ByIX%?L`kd+!BQ>WgvhQEH+xBSBHp90ELMNTNR_C$9rl5nm#bx>kLV!#qRU=R? zLg4~Og%bx}?%a9LK1F)W^xP3zoFEP!fu?0j?;U|9ufu>Ir!O0Au(-fV$1 zTm;IBUf3xdIP>9rfD2g6KTn@N-KI{R8V>fti93uaoG=xjq4h0V)9~J3EVBponOhwC zb!Sbn*S&mPLC&1|_R)uIw4}a+7N!AY!+T|GIT3D+WadN3bd_Bsm5N-J-<9(SS&&G5 z#R+npi+k#+r`{t+_)}E~C&(qbxyi&X0I7M)`I}1i7A%6|!37z|jxz8L$4_q^$4*N$ zxtJmh;m~vUMRl$;7?`Moj?xEwU^;vn4AltGPJlLWI#>d)?s=g?I3gi$Fu49xe0W*fu&aq{a5lo;};9 zO`8_%AvVNqnZpVIl7ILVYO|dAP8}BW`P*06|7?=k@949CJ8_)--7%A7d$79^WTTmr z&)|lwq^_Z((BO2FpOx*&Db3Gl1a?<)A>3Z$UnuZ0r_XOvq0C661HWLwg1|H}@%{Rc z%WKrKn=OaeBVh4W;K?&XO9(T0X~A;Q3Iryw z=yfAJz$XrPTsVF5kp@`ARV$z%;Df?|}QyN0qNKc#C*6r zQ_^#h*JaG_QTE}?8BN&L*=wKs^>X{+Vtoo#;d3XAvv-`_W2r76fAgE)yiG## zXPv*!+(o~xa8i#GQR%z4N?p*S;M z`4770qfAb3uNIB9jcv6#nnz!(V?-ZWy~p07gIDs|232NsO9D?_BC}32&l>0qht7;> z?6(i=(3$g|Z?^ezQCFy!e$$XXn>9>RdK!YSr^l{dFffw6)6hY|iDUC{~+AGMC@JYn5I1?9MRlam7)i?6TKQ3v&W&w@aGSl-&FN z1V`%GaoP86=3h<|&Rn$hOE;U69j=chb4e_!_pS5HnD2d4(_Jiv-f`-upMLs-GJao9 zwz#^fCeSzAJ2{%B^NO&>RQ7)IG2;ILHT~TJ;#^CwLvm0bPU7QC{n3IFMx2ux2}z zd33ShZtX|kx=Z_&HIGh@aj*vHgk~;e%^NcGz;W8MhW6Pv)Kh;%jppMzt74}RE2u0jLlW6yEu>X~yQ9KXMyX@ftD9#*vv zEY2)ZAXz<}89;eQN zJ|AXBSfasylOE?yAkLMK#*2Ty7sJnmpplkF0PwjempoB;z$EzH--XDS{-7|x$H{@K zmlYHEngav9(CYjz6+!BRdaRWIedUmoTA`16Lr+oz&SZ!-I=^bFhTWgqVat=}x=$K~ zgO^_JtG21xYw|a`=$#Gfm61N;xPsh?rcR9>pD>}{u2GxveVgj+Z#t@cuAKVC6Smo| zJ=#U1)$tq;OTe))LWsS=VFSl?p5IZqi9YAU9AJfgh=d~hKzohRAUZgsHObN;l3+CP!ZTl3BwJolIId?>GQ znnjBiVfp&R;CD$lpB*=DT#E!&r#JFR+QM66aiWi4yHj@|M@Ufs9T6B5AeWH)d+sO* zf{9R~l*9p-Rxm~hr{WHt1t^q7I?|xH+&wSx1k!ND9ViFd!HMT`lo2=1#loW=kTqz< zupMZ$9%%GXGkLE)Muun`8VsA3> zG#@Tul9<{6#(*=|T81;GwAv@+%ty$Xhg0C96Z>fZlOH=ofZk#PFyNOuVSRGqP3k<+ znmHd>;$=;p*Pe~OLE+FjaOTcC?`%2aj5C(&%=ar~Q2$*OsK#}F)g3y_MTih`go*MI zqnqq;ZC!g@=enP*1z0#64qhojEz%WLwm4`^tvebqT+ofo;()nx5l^Vs0=YwmG}}jJ zblVlH)w>g%fA1J$$F_9ap~HH^{&l`yrsxp73>vi9HDK{vOaLa$aoZ}3|q z3i~+bbj2c&w9% zqEw|QR2J|x^~#MQ{Bxcaf*^U24;D?bD30wsafW>B%yB0@^@q~~uLCW3ePyBzsSm?{ zx-YzCnSJ-E?KW?Gv;Fd-IX3=~=5XeFzC0}_@4UV!!|_SIlZLuP_o+|h3n%4zj_$Kw z$8A91i9XWOQr~9}Z>h64EN`-x2>wf&`s|x8>9*k#2fo~v&Zkl~wuN#Eb?TTJjCr%Z zoOa7Y>+RD2UKhrSj~UZ!KRo|Xn>@P3+O^U>UuW*N$N2$|@(u6|{xF>>UUko%JGV)V zpW8HV{ຽ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%0DsP~>N- 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 IM6N<$g5?279{>OV literal 0 HcmV?d00001 diff --git a/v0.1.8/examples/img/bezier/bezier-acceleration-orig.png b/v0.1.8/examples/img/bezier/bezier-acceleration-orig.png new file mode 100644 index 0000000000000000000000000000000000000000..43dd0a9538f7a91b1c9525e778129e281ac92141 GIT binary patch literal 263498 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

                      Wz=y!s&Ilef=5@ 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%0DvTS*zqB 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 z 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%0A99j5Ri7_ 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�P67bnj_~_@Fnjh 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 literal 0 HcmV?d00001 diff --git a/v0.1.8/examples/index.html b/v0.1.8/examples/index.html new file mode 100644 index 0000000..cfd4a07 --- /dev/null +++ b/v0.1.8/examples/index.html @@ -0,0 +1,2 @@ + +Overview · ManoptExamples.jl

                      List of Examples

                      NameprovidesDocumentationComment
                      A Benchmark for Difference of Convexcontains a few simple functions
                      Bézier Curves and Minimizing their Accelerationtools Bézier curves and their acceleration📚
                      Solving Rosenbrock with Difference of ConvexDoC split of Rosenbrock📚uses a Rosenbrock based metric
                      Difference of Convex vs. Frank-Wolfeclosed-form sub solver
                      Riemannian Mean$f$, $\operatorname{grad}f$ (A/I), objective📚
                      Robust PCA$f$, $\operatorname{grad}f$ (A/I), objective📚
                      Rosenbrock$f$, $\operatorname{grad}f$ (A/I), objective, minimizer📚
                      The Rayleigh Quotient$f$, $\operatorname{grad}f$ (A/I), $\operatorname{Hess}f$ (A/I), objective📚
                      Total Variation Minimization$f$, $\operatorname{prox}f$ (A/I), objective📚

                      Symbols:

                      • A Allocating variant
                      • I In-place variant
                      • 📚 link to documented functions in the documentation
                      diff --git a/v0.1.8/helpers/error_measures/index.html b/v0.1.8/helpers/error_measures/index.html new file mode 100644 index 0000000..08010e2 --- /dev/null +++ b/v0.1.8/helpers/error_measures/index.html @@ -0,0 +1,2 @@ + +Error measures · ManoptExamples.jl
                      diff --git a/v0.1.8/index.html b/v0.1.8/index.html new file mode 100644 index 0000000..3744d21 --- /dev/null +++ b/v0.1.8/index.html @@ -0,0 +1,2 @@ + +Home · ManoptExamples.jl

                      Welcome to ManoptExample.jl

                      This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.

                      Each example usually consists of

                      • a cost function and additional objects, like the gradient or proximal maps, see objectives
                      • an example explaining how to use these, see examples

                      Helping functions that are used in one or more examples can be found in the section of functions in the menu.

                      diff --git a/v0.1.8/objectives/index.html b/v0.1.8/objectives/index.html new file mode 100644 index 0000000..4fa4bb7 --- /dev/null +++ b/v0.1.8/objectives/index.html @@ -0,0 +1,187 @@ + +Objectives · ManoptExamples.jl

                      List of Objectives defined for the Examples

                      Rayleigh Quotient on the Sphere

                      See the Rayleigh example (TODO) to see these in use.

                      ManoptExamples.RayleighQuotientCostType
                      RayleighQuotientCost

                      A functor representing the Rayleigh Quotient cost function.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either

                      \[f(p) = p^{\mathrm{T}}Ap,\qquad p ∈ 𝕊^{n-1},\]

                      or extended into the embedding as

                      \[f(x) = x^{\mathrm{T}}Ax, \qquad x ∈ ℝ^n,\]

                      which is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of $𝕊^{n-1}$.

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientCost(A)

                      Create the Rayleigh cost function.

                      See also

                      RayleighQuotientGrad!!, RayleighQuotientHess!!

                      source
                      ManoptExamples.RayleighQuotientGrad!!Type
                      RayleighQuotientGrad!!

                      A functor representing the Rayleigh Quotient gradient function.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either

                      \[\operatorname{grad} f(p) = 2 Ap - 2 (p^{\mathrm{T}}Ap)*p,\qquad p ∈ 𝕊^{n-1},\]

                      or taking the Euclidean gradient of the Rayleigh quotient on the sphere as

                      \[∇f(x) = 2Ax, \qquad x ∈ ℝ^n.\]

                      For details, see Example 3.62 of [Bou23].

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientGrad!!(A)

                      Create the Rayleigh quotient gradient function.

                      See also

                      RayleighQuotientCost, RayleighQuotientHess!!

                      source
                      ManoptExamples.RayleighQuotientHess!!Type
                      RayleighQuotientHess!!

                      A functor representing the Rayleigh Quotient Hessian.

                      Let $A ∈ ℝ^{n×n}$ be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either

                      \[\operatorname{Hess} f(p)[X] = 2 \bigl(AX - (p^{mathrm{T}}AX)p - (p^{\mathrm{T}}Ap)X\bigr),\qquad p ∈ 𝕊^{n-1}, X \in T_p𝕊^{n-1}\]

                      or taking the Euclidean Hessian of the Rayleigh quotient on the sphere as

                      \[∇^2f(x)[V] = 2AV, \qquad x, V ∈ ℝ^n.\]

                      For details, see Example 5.27 of [Bou23].

                      Fields

                      • A – storing the matrix internally

                      Constructor

                      RayleighQuotientHess!!(A)

                      Create the Rayleigh quotient Hessian function.

                      See also

                      RayleighQuotientCost, RayleighQuotientGrad!!

                      source

                      Bézier Curves

                      See the Bezier Curves example to see these in use.

                      ManoptExamples.BezierSegmentType
                      BezierSegment

                      A type to capture a Bezier segment. With $n$ points, a Bézier segment of degree $n-1$ is stored. On the Euclidean manifold, this yields a polynomial of degree $n-1$.

                      This type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.

                      Not that this can also be used to represent tangent vectors on the control points of a segment.

                      See also: de_Casteljau.

                      Constructor

                      BezierSegment(pts::AbstractVector)

                      Given an abstract vector of pts generate the corresponding Bézier segment.

                      source
                      ManoptExamples.L2_acceleration_BezierMethod
                      L2_acceleration_Bezier(M,B,pts,λ,d)

                      compute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.

                      \[\frac{λ}{2}\sum_{i=0}^{N} d_{\mathcal M}(d_i, c_B(i))^2+ +\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

                      where for this formula the pts along the curve are equispaced and denoted by $t_i$ and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by $p_i$, and to each $p_i$ corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      See also

                      grad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier

                      source
                      ManoptExamples.acceleration_BezierMethod
                      acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{P},
                      +    degrees::AbstractVector{<:Integer},
                      +    T::AbstractVector{<:AbstractFloat},
                      +) where {P}

                      compute the value of the discrete Acceleration of the composite Bezier curve

                      \[\sum_{i=1}^{N-1}\frac{d^2_2 [ B(t_{i-1}), B(t_{i}), B(t_{i+1})]}{\Delta_t^3}\]

                      where for this formula the pts along the curve are equispaced and denoted by $t_i$, $i=1,…,N$, and $d_2$ refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      This acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      See also

                      grad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    T::AbstractVector,
                      +    X::AbstractVector,
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector,
                      +    X::AbstractVector,
                      +)

                      Evaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment},
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X
                      +)

                      evaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    b::BezierSegment,
                      +    t::AbstractVector,
                      +    X::AbstractVector,
                      +)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::BezierSegment,
                      +    b::BezierSegment,
                      +    t::AbstractVector,
                      +    X::AbstractVector,
                      +)

                      evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T$=(t_i)_{i=1}^n$ that are pointwise in $t_i∈[0,1]$ on the curve and given corresponding tangential vectors $X = (η_i)_{i=1}^n$, $η_i∈T_{β(t_i)}\mathcal M$ This can be computed in place of Y.

                      See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018

                      source
                      ManoptExamples.adjoint_differential_Bezier_control_pointsMethod
                      adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)
                      +adjoint_differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::BezierSegment,
                      +    b::BezierSegment,
                      +    t,
                      +    η,
                      +)

                      evaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t$∈[0,1]$ on the curve and a tangent vector $η∈T_{β(t)}\mathcal M$. This can be computed in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.de_CasteljauMethod
                      de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function

                      return the Bézier curve $β(⋅;b_0,…,b_n): [0,1] → \mathcal M$ defined by the control points $b_0,…,b_n∈\mathcal M$, $n∈\mathbb N$, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let $γ_{a,b}(t)$ denote the shortest geodesic connecting $a,b∈\mathcal M$. Then the curve is defined by the recursion

                      \[\begin{aligned} + β(t;b_0,b_1) &= \gamma_{b_0,b_1}(t)\\ + β(t;b_0,…,b_n) &= \gamma_{β(t;b_0,…,b_{n-1}), β(t;b_1,…,b_n)}(t), +\end{aligned}\]

                      and P is the type of a point on the Manifold M.

                      de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function

                      Given a vector of Bézier segments, i.e. a vector of control points $B=\bigl( (b_{0,0},…,b_{n_0,0}),…,(b_{0,m},… b_{n_m,m}) \bigr)$, where the different segments might be of different degree(s) $n_0,…,n_m$. The resulting composite Bézier curve $c_B:[0,m] → \mathcal M$ consists of $m$ segments which are Bézier curves.

                      \[c_B(t) := + \begin{cases} + β(t; b_{0,0},…,b_{n_0,0}) & \text{ if } t ∈[0,1]\\ + β(t-i; b_{0,i},…,b_{n_i,i}) & \text{ if } + t∈(i,i+1], \quad i∈\{1,…,m-1\}. + \end{cases}\]

                      de_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)
                      +de_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)
                      +de_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector
                      +de_Casteljau(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +) -> AbstractVector

                      Evaluate the Bézier curve at time t or at times t in T.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +    Ξ::AbstractVector{<:BezierSegment}
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Θ::AbstractVector{<:BezierSegment}
                      +    B::AbstractVector{<:BezierSegment},
                      +    T::AbstractVector
                      +    Ξ::AbstractVector{<:BezierSegment}
                      +)

                      evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in $[0,N]$, and each depending the corresponding segment(s). Here, $N$ is the length of B. For the mutating variant the result is computed in Θ.

                      See de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X::AbstractVector{<:BezierSegment}
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y::AbstractVector{<:BezierSegment}
                      +    B::AbstractVector{<:BezierSegment},
                      +    t,
                      +    X::AbstractVector{<:BezierSegment}
                      +)

                      evaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,N]$, which depends only on the corresponding segment. Here, $N$ is the length of B. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(
                      +    M::AbstractManifold,
                      +    b::BezierSegment,
                      +    T::AbstractVector,
                      +    X::BezierSegment,
                      +)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y,
                      +    b::BezierSegment,
                      +    T::AbstractVector,
                      +    X::BezierSegment,
                      +)

                      evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in $t∈[0,1]$. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.differential_Bezier_control_pointsMethod
                      differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)
                      +differential_Bezier_control_points!(
                      +    M::AbstractManifold,
                      +    Y,
                      +    b::BezierSegment,
                      +    t,
                      +    X::BezierSegment
                      +)

                      evaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t$∈[0,1]$. The computation can be done in place of Y.

                      See de_Casteljau for more details on the curve.

                      source
                      ManoptExamples.get_Bezier_degreeMethod
                      get_Bezier_degree(M::AbstractManifold, b::BezierSegment)

                      return the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.

                      source
                      ManoptExamples.get_Bezier_degreesMethod
                      get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})

                      return the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.

                      source
                      ManoptExamples.get_Bezier_inner_pointsMethod
                      get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )
                      +get_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)

                      returns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned

                      source
                      ManoptExamples.get_Bezier_junction_tangent_vectorsMethod
                      get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
                      +get_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)

                      returns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.

                      source
                      ManoptExamples.get_Bezier_junctionsFunction
                      get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})
                      +get_Bezier_junctions(M::AbstractManifold, b::BezierSegment)

                      returns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.

                      source
                      ManoptExamples.get_Bezier_pointsFunction
                      get_Bezier_points(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{<:BezierSegment},
                      +    reduce::Symbol=:default
                      +)
                      +get_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)

                      returns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.

                      This method reduces the points depending on the optional reduce symbol

                      • :default: no reduction is performed
                      • :continuous: for a continuous function, the junction points are doubled at $b_{0,i}=b_{n_{i-1},i-1}$, so only $b_{0,i}$ is in the vector.
                      • :differentiable: for a differentiable function additionally $\log_{b_{0,i}}b_{1,i} = -\log_{b_{n_{i-1},i-1}}b_{n_{i-1}-1,i-1}$ holds. hence $b_{n_{i-1}-1,i-1}$ is omitted.

                      If only one segment is given, all points of b, b.pts, is returned.

                      source
                      ManoptExamples.get_Bezier_segmentsMethod
                      get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])

                      returns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.

                      There are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let $c=(c_1,…,c_k)$ and $d=(d_1,…,d_m)$, where $m$ denotes the number of components the composite Bézier curve consists of. Then

                      • :default: $k = m + \sum_{i=1}^m d_i$ since each component requires one point more than its degree. The points are then ordered in tuples, i.e.

                        \[B = \bigl[ [c_1,…,c_{d_1+1}], (c_{d_1+2},…,c_{d_1+d_2+2}],…, [c_{k-m+1+d_m},…,c_{k}] \bigr]\]

                      • :continuous: $k = 1+ \sum_{i=1}{m} d_i$, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.

                        \[B = \bigl[ [c_1,…,c_{d_1+1}], [c_{d_1+1},…,c_{d_1+d_2+1}],…, [c_{k-1+d_m},…,b_{k}) \bigr]\]

                      • :differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence $k = 2 - m + \sum_{i=1}{m} d_i$ and at a junction point $b_n$ with its given prior point $c_{n-1}$, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as $b = \exp_{c_n}(-\log_{c_n} c_{n-1})$ such that the assumed differentiability holds
                      source
                      ManoptExamples.grad_L2_acceleration_BezierMethod
                      grad_L2_acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector{P},
                      +    degrees::AbstractVector{<:Integer},
                      +    T::AbstractVector,
                      +    λ,
                      +    d::AbstractVector{P}
                      +) where {P}

                      compute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight $λ$ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in $[0,N]$), where $N$ is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting $λ=0$ yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.

                      Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.

                      See also

                      grad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.

                      source
                      ManoptExamples.grad_acceleration_BezierMethod
                      grad_acceleration_Bezier(
                      +    M::AbstractManifold,
                      +    B::AbstractVector,
                      +    degrees::AbstractVector{<:Integer}
                      +    T::AbstractVector
                      +)

                      compute the gradient of the discretized acceleration of a (composite) Bézier curve $c_B(t)$ on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in $[0,N]$, where $N$ is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set $λ=0$ therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.

                      See also

                      acceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.

                      source

                      Riemannian Mean

                      See the Riemannian mean example to see these in use.

                      ManoptExamples.RiemannianMeanCostType
                      RiemannianMeanCost{P}

                      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                      \[f(p) = \sum_{j=i}^N d_{mathcal M}^2(d_i, p),\]

                      where $d_{\mathcal M}$ is the distance on a Riemannian manifold.

                      Constructor

                      RiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}

                      Initialize the cost function to a data set data of points on a manfiold M, where each point is of type P.

                      See also

                      RiemannianMeanGradient!!, Riemannian_mean_objective

                      source
                      ManoptExamples.RiemannianMeanGradient!!Type
                      RiemannianMeanGradient!!{P} where P

                      A functor representing the Riemannian center of mass (or Riemannian mean) cost function.

                      For a given set of points $d_1,\ldots,d_N$ this cost function is defined as

                      \[\operatorname{grad}f(p) = \sum_{j=i}^N \log_p d_i\]

                      where $d_{\mathcal M}$ is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.

                      This functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.

                      Constructors

                      RiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}

                      Generate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.

                      RiemannianMeanGradient!!(
                      +    M::AbstractManifold,
                      +    data::AbstractVector{P};
                      +    initial_vector::T=zero_vector(M, first(data)),
                      +) where {P,T}

                      Initialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.

                      See also

                      RiemannianMeanCost, Riemannian_mean_objective

                      source
                      ManoptExamples.Riemannian_mean_objectiveFunction
                      Riemannian_mean_objective(data, initial_vector=nothing, evaluation=Manopt.AllocatingEvaluation())
                      +Riemannian_mean_objective(M, data;
                      +initial_vector=zero_vector(M, first(data)),
                      +evaluation=AllocatingEvaluton()
                      +)

                      Generate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.

                      See also

                      RiemannianMeanCost, RiemannianMeanGradient!!

                      Note

                      The first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.

                      Note

                      The objective is available when Manopt.jl is loaded.

                      source

                      Robust PCA

                      See the Robust PCA example to see these in use.

                      ManoptExamples.RobustPCACostType
                      RobustPCACost{D,F}

                      A functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data $D∈\mathbb R^{d\times n}$ the cost function is defined on some $\operatorname{Gr}(d,m)$, $m<n$ as the sum of the distances of the columns $D_i$ to the subspace spanned by $p\in\operatorname{Gr}(d,m)$ (represented as a point on the Stiefel manifold). The function reads

                      \[f(U) = \frac{1}{n}\sum_{i=1}^n \lVert pp^{\mathrm{T}}D_i - D_i\rVert\]

                      This cost additionally provides a Huber regularisation of the cost, that is for some $ε>0$ one use $ℓ_ε(x) = \sqrt{x^2+ε^2} - ε$ in

                      \[f_{ε}(p) = \frac{1}{n}\sum_{i=1}^n ℓ_ε\bigl(\lVert pp^{\mathrm{T}}D_i - D_i\rVert\bigr)\]

                      Note that this is a mutable struct so you can adapt the $ε$ later on.

                      Constructor

                      RobustPCACost(data::AbstractMatrix, ε=1.0)
                      +RobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)

                      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.

                      source
                      ManoptExamples.RobustPCAGrad!!Type
                      RobustPCAGrad!!{D,F}

                      A functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data $X∈\mathbb R^{p\times n}$ the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.

                      Note that this is a mutable struct so you can adapt the $ε$ later on.

                      Constructor

                      RobustPCAGrad!!(data, ε=1.0)
                      +RobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())

                      Initialize the robust PCA cost to some data $D$, and some regularization $ε$. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.

                      source
                      ManoptExamples.robust_PCA_objectiveFunction
                      robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())
                      +robust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())

                      Generate the objective for the robust PCA task for some given data $D$ and Huber regularization parameter $ε$.

                      See also

                      RobustPCACost, RobustPCAGrad!!

                      Note

                      Since the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the in-place variant to be used, though that keyword is used to setup the objective.

                      Note

                      The objective is available when Manopt.jl is loaded.

                      source

                      Rosenbrock Function

                      See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.

                      ManoptExamples.RosenbrockCostType
                      RosenbrockCost

                      Provide the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                      \[f(\mathcal M, p) = a(p_1^2-p_2)^2 + (p_1-b)^2\]

                      which means that for the 2D case, the manifold $\mathcal M$ is ignored.

                      See also 📖 Rosenbrock (with slightly different parameter naming).

                      Constructor

                      f = Rosenbrock(a,b)

                      generates the struct/function of the Rosenbrock cost.

                      source
                      ManoptExamples.RosenbrockGradient!!Type
                      RosenbrockGradient

                      Provide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some $a,b ∈ ℝ$

                      \[\nabla f(\mathcal M, p) = \begin{pmatrix} + 4a(p_1^2-p_2)p_1 + 2(p_1-b) \\ + -2a(p_1^2-p_2) +\end{pmatrix}\]

                      i.e. also here the manifold is ignored.

                      Constructor

                      RosenbrockGradient(a,b)

                      Functors

                      grad_f!!(M,p)
                      +grad_f!!(M, X, p)

                      evaluate the gradient at $p$ the manifold$\mathcal M$ is ignored.

                      source
                      ManoptExamples.RosenbrockMetricType
                      RosenbrockMetric <: AbstractMetric

                      A metric related to the Rosenbrock problem, where the metric at a point $p∈\mathbb R^2$ is given by

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_{1}^2 & -2p_{1} \\ + -2p_{1} & 1 +\end{pmatrix},\]

                      where the $\mathrm{Rb}$ stands for Rosenbrock

                      source
                      Base.expMethod
                      q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)
                      +exp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)

                      Compute the exponential map with respect to the RosenbrockMetric.

                      \[ q = \begin{pmatrix} p_1 + X_1 \\ p_2+X_2+X_1^2\end{pmatrix}\]

                      source
                      Base.logMethod
                      X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)
                      +log!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)

                      Compute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any $j ∈ \{1,…,m\}$

                      \[X = \begin{pmatrix} + q_1 - p_1 \\ + q_2 - p_2 + (q_1 - p_1)^2 +\end{pmatrix}\]

                      source
                      Manifolds.inverse_local_metricMethod
                      inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                      Return the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                      \[G^{-1}_p = +\begin{pmatrix} + 1 & 2p_1\\ + 2p_1 & 1+4p_1^2 \\ +\end{pmatrix}.\]

                      source
                      Manifolds.local_metricMethod
                      local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)

                      Return the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space $T_p\mathbb R^2$ given as

                      \[G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1 \\ + -2p_1 & 1 +\end{pmatrix}\]

                      source
                      ManifoldsBase.change_representerMethod
                      Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)
                      +change_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)

                      Given the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.

                      this function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.

                      source
                      ManifoldsBase.innerMethod
                      inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)

                      Compute the inner product on $\mathbb R^2$ with respect to the RosenbrockMetric, i.e. for $X,Y \in T_p\mathcal M$ we have

                      \[⟨X,Y⟩_{\mathrm{Rb},p} = X^\mathrm{T}G_pY, \qquad +G_p = \begin{pmatrix} + 1+4p_1^2 & -2p_1\\ + -2p_1 & 1 +\end{pmatrix},\]

                      source

                      Total Variation

                      See the Total Variation example to see these in use.

                      ManoptExamples.Intrinsic_infimal_convolution_TV12Method
                      Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

                      Compute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads

                      \[E(u,v) = + \frac{1}{2}\sum_{i ∈ \mathcal G} + d_{\mathcal M}\bigl(g(\frac{1}{2},v_i,w_i),f_i\bigr) + +\alpha\bigl( β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) \bigr).\]

                      for more details see [BFPS17, BFPS18].

                      See also

                      Total_Variation, second_order_Total_Variation

                      source
                      ManoptExamples.Total_VariationFunction
                      Total_Variation(M,x [,p=2,q=1])

                      Compute the $\operatorname{TV}^p$ functional for data xon the PowerManifold manifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i$ denote the forward neighbors, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I_i = \{i+e_j, j=1,…,k\}\cap \mathcal G$. The formula reads

                      \[E^q(x) = \sum_{i ∈ \mathcal G} + \bigl( \sum_{j ∈ \mathcal I_i} d^p_{\mathcal M}(x_i,x_j) \bigr)^{q/p},\]

                      see [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.

                      See also

                      grad_Total_Variation, prox_Total_Variation, second_order_Total_Variation

                      source
                      ManoptExamples.adjoint_differential_forward_logsMethod
                      Y = adjoint_differential_forward_logs(M, p, X)
                      +adjoint_differential_forward_logs!(M, Y, p, X)

                      Compute the adjoint differential of forward_logs $F$ occurring, in the power manifold array p, the differential of the function

                      $F_i(p) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j$

                      where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$ Let $n$ be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold $\mathcal M' = \mathcal M^n$. The adjoint differential can be computed in place of Y.

                      Input

                      • M – a PowerManifold manifold
                      • p – an array of points on a manifold
                      • X – a tangent vector to from the n-fold power of p, where n is the ndims of p

                      Output

                      Y – resulting tangent vector in $T_p\mathcal M$ representing the adjoint differentials of the logs.

                      source
                      ManoptExamples.differential_forward_logsMethod
                      Y = differential_forward_logs(M, p, X)
                      +differential_forward_logs!(M, Y, p, X)

                      compute the differential of forward_logs $F$ on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function

                      \[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{p_i} p_j, \quad i ∈ \mathcal G,\]

                      where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

                      Input

                      • M – a PowerManifold manifold
                      • p – a point.
                      • X – a tangent vector.

                      Output

                      • Y – resulting tangent vector in $T_x\mathcal N$ representing the differentials of the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.
                      source
                      ManoptExamples.forward_logsMethod
                      Y = forward_logs(M,x)
                      +forward_logs!(M, Y, x)

                      compute the forward logs $F$ (generalizing forward differences) occurring, in the power manifold array, the function

                      \[F_i(x) = \sum_{j ∈ \mathcal I_i} \log_{x_i} x_j,\quad i ∈ \mathcal G,\]

                      where $\mathcal G$ is the set of indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$. This can also be done in place of ξ.

                      Input

                      • M – a PowerManifold manifold
                      • x – a point.

                      Output

                      • Y – resulting tangent vector in $T_x\mathcal M$ representing the logs, where $\mathcal N$ is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.
                      source
                      ManoptExamples.grad_Total_VariationFunction
                      X = grad_Total_Variation(M, λ, x[, p=1])
                      +grad_Total_Variation!(M, X, λ, x[, p=1])

                      Compute the (sub)gradient $∂f$ of all forward differences occurring, in the power manifold array, i.e. of the function

                      \[f(p) = \sum_{i}\sum_{j ∈ \mathcal I_i} d^p(x_i,x_j)\]

                      where $i$ runs over all indices of the PowerManifold manifold M and $\mathcal I_i$ denotes the forward neighbors of $i$.

                      Input

                      • M – a PowerManifold manifold
                      • x – a point.

                      Output

                      • X – resulting tangent vector in $T_x\mathcal M$. The computation can also be done in place.
                      source
                      ManoptExamples.grad_Total_VariationMethod
                      X = grad_Total_Variation(M, (x,y)[, p=1])
                      +grad_Total_Variation!(M, X, (x,y)[, p=1])

                      compute the (sub) gradient of $\frac{1}{p}d^p_{\mathcal M}(x,y)$ with respect to both $x$ and $y$ (in place of X and Y).

                      source
                      ManoptExamples.grad_intrinsic_infimal_convolution_TV12Method
                      grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)

                      compute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some $f ∈ \mathcal M$ on a PowerManifold manifold $\mathcal M$ this function computes the (sub)gradient of

                      \[E(u,v) = +\frac{1}{2}\sum_{i ∈ \mathcal G} d_{\mathcal M}(g(\frac{1}{2},v_i,w_i),f_i) ++ \alpha +\bigl( +β\mathrm{TV}(v) + (1-β)\mathrm{TV}_2(w) +\bigr),\]

                      where both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.

                      source
                      ManoptExamples.grad_second_order_Total_VariationFunction
                      Y = grad_second_order_Total_Variation(M, q[, p=1])
                      +grad_second_order_Total_Variation!(M, Y, q[, p=1])

                      computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1, q_2, q_3)$ with respect to all three components of $q∈\mathcal M^3$, where $d_2$ denotes the second order absolute difference using the mid point model, i.e. let

                      \[\mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};q_1,q_3) \text{ for some geodesic }g\bigr\}\]

                      denote the mid points between $q_1$ and $q_3$ on the manifold $\mathcal M$. Then the absolute second order difference is defined as

                      \[d_2(q_1,q_2,q_3) = \min_{c ∈ \mathcal C_{q_1,q_3}} d(c, q_2).\]

                      While the (sub)gradient with respect to $q_2$ is easy, the other two require the evaluation of an adjoint_Jacobi_field.

                      The derivation of this gradient can be found in [BBSW16].

                      source
                      ManoptExamples.grad_second_order_Total_VariationFunction
                      grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])

                      computes the (sub) gradient of $\frac{1}{p}d_2^p(q_1,q_2,q_3)$ with respect to all $q_1,q_2,q_3$ occurring along any array dimension in the point q, where M is the corresponding PowerManifold.

                      source
                      ManoptExamples.project_collaborative_TVFunction
                      project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])
                      +project_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])

                      compute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function

                      \[F^q(x) = \sum_{i∈\mathcal G} + \Bigl( \sum_{j∈\mathcal I_i} + \sum_{k=1}^d \lVert X_{i,j}\rVert_x^p\Bigr)^\frac{q}{p},\]

                      where $\mathcal G$ is the set of indices for $x∈\mathcal M$ and $\mathcal I_i$ is the set of its forward neighbors. The computation can also be done in place of Θ.

                      This is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.

                      source
                      ManoptExamples.prox_Total_VariationFunction
                      ξ = prox_Total_Variation(M,λ,x [,p=1])

                      compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all forward differences occurring in the power manifold array, i.e. $\varphi(xi,xj) = d_{\mathcal M}^p(xi,xj)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • x – a point.

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place
                      source
                      ManoptExamples.prox_Total_VariationMethod
                      [y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])
                      +prox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])

                      Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $φ(x,y) = d_{\mathcal M}^p(x,y)$ with parameter λ. A derivation of this closed form solution is given in see [WDS14].

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • (x1,x2) – a tuple of two points,

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • (y1,y2) – resulting tuple of points of the $\operatorname{prox}_{λφ}($(x1,x2)$)$. The result can also be computed in place.
                      source
                      ManoptExamples.prox_parallel_TVFunction
                      y = prox_parallel_TV(M, λ, x [,p=1])
                      +prox_parallel_TV!(M, y, λ, x [,p=1])

                      compute the proximal maps $\operatorname{prox}_{λφ}$ of all forward differences occurring in the power manifold array, i.e. $φ(x_i,x_j) = d_{\mathcal M}^p(x_i,x_j)$ with xi and xj are array elements of x and j = i+e_k, where e_k is the $k$th unit vector. The parameter λ is the prox parameter.

                      Input

                      • M – a PowerManifold manifold
                      • λ – a real value, parameter of the proximal map
                      • x – a point

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.

                      See also prox_Total_Variation

                      source
                      ManoptExamples.prox_second_order_Total_VariationFunction
                      (y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)
                      +prox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)

                      Compute the proximal map $\operatorname{prox}_{λ\varphi}$ of $\varphi(x_1,x_2,x_3) = d_{\mathcal M}^p(c(x_1,x_3),x_2)$ with parameter λ>0, where $c(x,z)$ denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.

                      Note that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.

                      Input

                      • M – a manifold

                      • λ – a real value, parameter of the proximal map

                      • (x1,x2,x3) – a tuple of three points

                      • p – (1) exponent of the distance of the TV term

                      Optional

                      kwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)

                      Output

                      • (y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.

                        Note

                        This function requires Manopt.jl to be loaded

                      source
                      ManoptExamples.prox_second_order_Total_VariationMethod
                      y = prox_second_order_Total_Variation(M, λ, x[, p=1])
                      +prox_second_order_Total_Variation!(M, y, λ, x[, p=1])

                      compute the proximal maps $\operatorname{prox}_{λ\varphi}$ of all centered second order differences occurring in the power manifold array, i.e. $\varphi(x_k,x_i,x_j) = d_2(x_k,x_i.x_j)$, where $k,j$ are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.

                      Input

                      • M – a manifold M
                      • λ – a real value, parameter of the proximal map
                      • x – a points.

                      Optional

                      (default is given in brackets)

                      • p – (1) exponent of the distance of the TV term

                      Output

                      • y – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.
                      Note

                      This function requires Manopt.jl to be loaded

                      source
                      ManoptExamples.second_order_Total_VariationFunction
                      second_order_Total_Variation(M,x [,p=1])

                      compute the $\operatorname{TV}_2^p$ functional for data x on the PowerManifold manifoldmanifold M, i.e. $\mathcal M = \mathcal N^n$, where $n ∈ \mathbb N^k$ denotes the dimensions of the data x. Let $\mathcal I_i^{\pm}$ denote the forward and backward neighbors, respectively, i.e. with $\mathcal G$ as all indices from $\mathbf{1} ∈ \mathbb N^k$ to $n$ we have $\mathcal I^\pm_i = \{i\pm e_j, j=1,…,k\}\cap \mathcal I$. The formula then reads

                      \[E(x) = \sum_{i ∈ \mathcal I,\ j_1 ∈ \mathcal I^+_i,\ j_2 ∈ \mathcal I^-_i} +d^p_{\mathcal M}(c_i(x_{j_1},x_{j_2}), x_i),\]

                      where $c_i(⋅,⋅)$ denotes the mid point between its two arguments that is nearest to $x_i$, see [BBSW16] for a derivation.

                      In long function names, this might be shortened to TV2.

                      See also

                      grad_second_order_Total_Variation, prox_second_order_Total_Variation

                      source
                      ManoptExamples.second_order_Total_VariationMethod
                      second_order_Total_Variation(M,(x1,x2,x3) [,p=1])

                      Compute the $\operatorname{TV}_2^p$ functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by

                      \[ \mathcal C = \bigl\{ c ∈ \mathcal M \ |\ g(\tfrac{1}{2};x_1,x_3) \text{ for some geodesic }g\bigr\}\]

                      the set of mid points between $x_1$ and $x_3$. Then the function reads

                      \[d_2^p(x_1,x_2,x_3) = \min_{c ∈ \mathcal C} d_{\mathcal M}(c,x_2),\]

                      see [BBSW16] for a derivation. In long function names, this might be shortened to TV2.

                      See also

                      grad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation

                      source

                      Literature

                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BFPS18]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
                      [BFPS17]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [Bou23]
                      [Cas59]
                      P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
                      [Cas63]
                      P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
                      [DMSC16]
                      J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.8/objects.inv b/v0.1.8/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..4db803861e86efd73fd06a5f18cfdd335ba9ae20 GIT binary patch literal 4016 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 +References · ManoptExamples.jl

                      Literature

                      [ASY+19]
                      T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.
                      [ABBR23]
                      S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.
                      [Bac14]
                      M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.
                      [BBSW16]
                      M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.
                      [BFSS23]
                      R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.
                      [BFPS18]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.
                      [BFPS17]
                      R. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.
                      [BG18]
                      R. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.
                      [BLSW14]
                      R. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.
                      [BPS16]
                      R. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.
                      [Bou23]
                      [Cas59]
                      P. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).
                      [Cas63]
                      P. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).
                      [DMSC16]
                      J. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.
                      [LNPS17]
                      F. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).
                      [PN07]
                      T. Popiel and L. Noakes. Bézier curves and $C^2$ interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).
                      [ROF92]
                      L. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).
                      [SO15]
                      J. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).
                      [WS22]
                      M. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).
                      [WDS14]
                      A. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).
                      diff --git a/v0.1.8/search_index.js b/v0.1.8/search_index.js new file mode 100644 index 0000000..b8c6710 --- /dev/null +++ b/v0.1.8/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/Difference-of-Convex-Frank-Wolfe/#A-comparison-of-the-Difference-of-Convex-and-Frank-Wolfe-Algorithm","page":"Frank Wolfe comparison","title":"A comparison of the Difference of Convex and Frank Wolfe Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Ronny Bergmann 2023-11-06","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Introduction","page":"Frank Wolfe comparison","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"In this example we compare the Difference of Convex Algprithm (DCA) [BFSS23] with the Frank-Wolfe Algorithm, which was introduced in [WS22]. This example reproduces the results from [BFSS23], Section 7.3.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing ManifoldsBase, Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We consider the collowing constraint maximimization problem of the Fréchet mean on the symmetric positive definite matrices mathcal P(n) with the affine invariant metric. Let q_1ldotsq_m in mathcal P(n) be a set of points and mu_1ldotsmu_m be a set of weights, such that they sum to one. We consider then","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmax_pinmathcal C h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"h(p) =\nsum_j=1^m mu_j d^2(pq_i)\nquad text where \nd^2(pq_i) = operatornametrbigl(\n log^2(p^-frac12q_jp^-frac12)\nbig)\nqquadtextandqquad\nmathcal C = pin mathcal M bar Lpreceq p preceq bar U ","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"for a lower bound L and an upper bound U for the matrices in the positive definite sense A preceq B Leftrightarrow (B-A) is positive semi-definite","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"When every one of the weights mu_1 ldots mu_m are equal, this function h is known as the of the set q_1 dots q_m.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And for our example we set","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Random.seed!(42)\nn = 20\nm = 100\nM = SymmetricPositiveDefinite(n)\nq = [rand(M) for _ in 1:m];\nw = rand(m)\nw ./=sum(w)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use as lower and upper bound the arithmetic and geometric mean L and U, respectively.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"L = inv( sum( wi * inv(qi) for (wi, qi) in zip(w,q) ) )\nU = sum( wi * qi for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As a starting point, the Frank-Wolfe algorithm requires a feasible point. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p0 = (L+U)/2","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can check that it is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Common-Functions","page":"Frank Wolfe comparison","title":"Common Functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Given p in mathcal M, X in T_pmathcal M on the symmetric positive definite matrices M, this method computes the closed form solution to","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_qin mathcal C langle X log_p qrangle\n = operatorname*argmin_qin mathcal C operatornametr(Slog(YqY))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"where mathcal C = q L preceq q preceq U , S = p^-12Xp^-12, and Y=p^-12.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The solution is given by Z=X^-1Qbigl( P^mathrmT-operatornamesgn(D)_+P+hatLbigr)Q^mathrmTX^-1,@ where S=QDQ^mathrmT is a diagonalization of S, hatU-hatL=P^mathrmTP with hatL=Q^mathrmTXLXQ and hatU=Q^mathrmTXUXQ, where -mboxsgn(D)_+ is the diagonal matrix","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatornamediagbigl(\n -operatornamesgn(d_11)_+ ldots -operatornamesgn(d_nn)_+\nbigr)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"and D=(d_ij).","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@doc raw\"\"\"\n closed_form_solution!(M, q, L, U, p X)\n\nCompute the closeed form solution of the constraint sub problem in place of ``q``.\n\"\"\"\nfunction closed_form_solution!(M::SymmetricPositiveDefinite, q, L, U, p, X)\n # extract p^1/2 and p^{-1/2}\n (p_sqrt_inv, p_sqrt) = Manifolds.spd_sqrt_and_sqrt_inv(p)\n # Compute D & Q\n e2 = eigen(p_sqrt_inv * X * p_sqrt_inv) # decompose Sk = QDQ'\n D = Diagonal(1.0 .* (e2.values .< 0))\n Q = e2.vectors\n #println(p)\n Uprime = Q' * p_sqrt_inv * U * p_sqrt_inv * Q\n Lprime = Q' * p_sqrt_inv * L * p_sqrt_inv * Q\n P = cholesky(Hermitian(Uprime - Lprime))\n z = P.U' * D * P.U + Lprime\n copyto!(M, q, p_sqrt * Q * z * Q' * p_sqrt)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-Difference-of-Convex-Formulation","page":"Frank Wolfe comparison","title":"The Difference of Convex Formulation","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We use g(p) = iota_mathcal C(p) as the indicator funtion of the set mathcal C. We use","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function is_pos_def(p; atol=5e-13)\n e = eigen(Symmetric(p))\n return all((e.values .+ atol) .> 0)\nend\nfunction g(p, L, U)\n return (is_pos_def(p-L) && is_pos_def(U-p)) ? 0.0 : Inf\nend\nh(M, p, w, q) = sum(wi * distance(M, p, qi)^2 for (wi, qi) in zip(w,q) )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"So we can first check that p0 is feasible","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"g(p0,L,U) == 0.0","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"true","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Now setting","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We look for a maximum of h, where g is minimal, i.e. g(p) is zero or in other words p in mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"The gradient of h can also be implemented in closed form as","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"grad_h(M, p, w, q) = -2.0 * sum(wi * log(M, p, qi) for (wi, qi) in zip(w, q))\nfunction grad_h!(M, X, p, w, q)\n Y = copy(M, p, X)\n zero_vector!(M, X, p)\n for (wi, qi) in zip(w,q)\n log!(M, Y, p, qi)\n Y .*= - 2.0*wi\n X .+= Y\n end\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we can further define the cost, which will just be +infty outside of mathcal C. We define","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_dc(M, p) = g(p, L, U) - h(M, p, w, q)\ngrad_h!(M, X, p) = grad_h!(M, X, p, w, q)\nfunction grad_f_dc!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Here we can omit the gradient of g in the definition of operatornamegrad f, since the gradient is zero at the points there it is defined, that is on any point that is not on the boundary of mathcal C.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As the last step, we can provide the closed form solver for the DC sub problem given at iteration k by","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"operatorname*argmin_pin mathcal C\n biglangle -operatornamegrad h(p^(k)) exp^-1_p^(k)pbigrangle","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Which we con compute","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution!(M, q, p, X)\n closed_form_solution!(M, q, L, U, p, -X)\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For safety, we might want to avoid ending up at the boundary of mathcal C. That is we reduce the distance we walk towards the solution q a bit.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"function dc_sub_solution_safe!(M, q, p, X)\n p_last = copy(M,p) # since p=q might be in place\n closed_form_solution!(M, q, L, U, p, -X)\n q_orig = copy(M,q) # since we do the following in place of q\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n s = 1.0\n d = distance(M, p_last, q_orig);\n # if we are close to zero, we reduce faster.\n α = d < 1/(n^2) ? 0.66 : 0.9995;\n i=0\n while (a < 0) || (b < 0)\n s *= α\n shortest_geodesic!(M, q, p_last, q_orig, s)\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n #println(\"$i a: $a, b = $b with s=$s\")\n i=i+1\n if (i>100) # safety fallback\n #@warn \" $i steps where not enough $s ($α)\\n$a $b\\n $(distance(M, p_last, q_orig)). Fixing by shifting EVs\"\n qe = eigen(q)\n if a < 0\n qe.values .+= min(1e-8, n*abs(min(a,b)))\n else\n qe.values .-= min(1e-8, n*abs(min(a,b)))\n end\n q .= qe.vectors * Diagonal(qe.values) * (qe.vectors)'\n a = minimum(real.(eigen(q-L).values))\n b = minimum(real.(eigen(U-q).values))\n return q\n end\n end\n return q\nend","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-DoC-solver-run","page":"Frank Wolfe comparison","title":"The DoC solver run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s compare both methods when they have the same stopping criteria","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_dc = difference_of_convex_algorithm(M, f_dc, g, grad_h!, p0;\n gradient=grad_f_dc!,\n sub_problem=dc_sub_solution_safe!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(300) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 30, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial F(p): -0.77661458292831\nAt iteration 23 the change of the gradient (3.192989916935325e-13) was less than 1.0e-9.\n 16.161776 seconds (17.17 M allocations: 1.670 GiB, 1.83% gc time, 93.45% compilation time)\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 23 iterations\n\n## Parameters\n* sub solver state:\n | InplaceEvaluation()\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 300: not reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(p): %0.14f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 30]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Let’s extract the final point and look at its cost","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_dc = get_solver_result(state1_dc);\nf_dc(M, p1_dc)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.784425242474807","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"As well as whether (and how well) it is feasible, that is the following values should all be larger than zero.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[ extrema(eigen(p1_dc-L).values), extrema(eigen(U-p1_dc).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (1.1886583723800445e-12, 0.06669240322431051)\n (1.3411042178831775e-5, 0.0671353506908023)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For the statistics we extract the recordings from the state","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Define-the-Frank-Wolfe-functions","page":"Frank Wolfe comparison","title":"Define the Frank-Wolfe functions","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"For Frank wolfe, the cost is just defined as -h(p) but the minimisation is constraint to mathcal C, which is enfored by the oracle.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"f_fw(M, p) = -h(M, p, w, q)\nfunction grad_f_fw!(M,X, p)\n grad_h!(M, X, p, w, q)\n X .*= -1.0\n return X\nend\noracle_fw!(M, q, p, X) = closed_form_solution!(M, q, L, U, p, X)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#The-FW-Solver-Run","page":"Frank Wolfe comparison","title":"The FW Solver Run","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Similarly we can run the Frank-Wolfe algorithm with","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"@time state1_fw = Frank_Wolfe_method(M, f_fw, grad_f_fw!, p0;\n sub_problem=oracle_fw!,\n evaluation=InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(10^4) |\n StopWhenChangeLess(1e-14) | StopWhenGradientChangeLess(M, 1e-9),\n debug = [\n (:Iteration, \"# %-8d \"), :Cost, (:Change, \" |Δp|: %0.14f \"),\n (:GradientNorm, \" |grad f(p)|: %0.8f \"),\n (:GradientChange, \" |Δgrad f(p)|: %0.8f\"),\n 2*10^3, :Stop, \"\\n\"],\n record = [:Iteration, :Iterate, :Cost, RecordGradientNorm(), :Change],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"Initial f(x): -0.776615\n# 2000 f(x): -0.784420 |Δp|: 0.04611942377596 |grad f(p)|: 0.17693408 |Δgrad f(p)|: 0.17555618\n# 4000 f(x): -0.784421 |Δp|: 0.00372201632005 |grad f(p)|: 0.17694619 |Δgrad f(p)|: 0.00749427\n# 6000 f(x): -0.784422 |Δp|: 0.00205683506784 |grad f(p)|: 0.17695204 |Δgrad f(p)|: 0.00414088\n# 8000 f(x): -0.784422 |Δp|: 0.00140675676260 |grad f(p)|: 0.17695565 |Δgrad f(p)|: 0.00283200\n# 10000 f(x): -0.784422 |Δp|: 0.00106177438611 |grad f(p)|: 0.17695815 |Δgrad f(p)|: 0.00213746\nThe algorithm reached its maximal number of iterations (10000).\n152.781466 seconds (55.53 M allocations: 94.006 GiB, 2.12% gc time, 0.57% compilation time)\n\n# Solver state for `Manopt.jl`s Frank Wolfe Method\nAfter 10000 iterations\n\n## Parameters\n* inverse retraction method: LogarithmicInverseRetraction()\n* retraction method: ExponentialRetraction()\n* sub solver state:\n | InplaceEvaluation()\n\n## Stepsize\nDecreasingStepsize(; length=2.0, factor=1.0, subtrahend=0.0, shift=2)\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 10000: reached\n |Δp| < 1.0e-14: not reached\n |Δgrad f| < 1.0e-9: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"f(x): %f\"), (:Change, \" |Δp|: %0.14f \"), (:GradientNorm, \" |grad f(p)|: %0.8f \"), (:GradientChange, \" |Δgrad f(p)|: %0.8f\"), \"\\n\", 2000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordIterate(Matrix{Float64}), RecordCost(), RecordGradientNorm(), RecordChange(; inverse_retraction_method=LogarithmicInverseRetraction())]),)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And we take a look at this result as well","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"p1_fw = get_solver_result(state1_fw);\nf_dc(M, p1_fw)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"-0.7844220281765162","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And its feasibility","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"[extrema(eigen(p1_fw-L).values), extrema(eigen(U-p1_fw).values)]","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"2-element Vector{Tuple{Float64, Float64}}:\n (4.904818928410655e-10, 0.06659173821656107)\n (3.245654983213335e-5, 0.06713970236096602)","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Statistics","page":"Frank Wolfe comparison","title":"Statistics","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"We extract the recorded values","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"# DoC\niter1_dc = get_record(state1_dc, :Iteration, :Iteration)\npk_dc = get_record(state1_dc,:Iteration,:Iterate)\ncosts1_dc = -h.(Ref(M), pk_dc, Ref(w), Ref(q))\ndc_min = minimum(costs1_dc)\n# FW\niter1_fw = get_record(state1_fw,:Iteration,:Iteration)[1:5:end]\npk_fw = get_record(state1_fw,:Iteration,:Iterate)[1:5:end]\ncosts1_fw = -h.(Ref(M), pk_fw, Ref(w), Ref(q))","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"And let’s plot the result, where we measure the cost versus the minimum the difference of convex algorithm attains.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x_k)-f^*$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-8, 10^-2),\n xaxis=:log,\n xlims=(1,10^4),\n)\nplot!(fig, iter1_dc, costs1_dc .- dc_min, color=indigo, label=\"Difference of Convex\")\nplot!(fig, iter1_fw, costs1_fw .- dc_min, color=teal, label=\"Frank-Wolfe\")","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"This indicates, that the difference off convex algorithm could even stop earlier with a proper stopping criterion, since after that the cost increases a bit again.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"On the other hand, Frank-Wolfe still has not reached this level function value after 10^4 iterations.","category":"page"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/#Literature","page":"Frank Wolfe comparison","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Frank-Wolfe/","page":"Frank Wolfe comparison","title":"Frank Wolfe comparison","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\n","category":"page"},{"location":"references/#Literature","page":"References","title":"Literature","text":"","category":"section"},{"location":"references/","page":"References","title":"References","text":"T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.\n\n\n\nS. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nM. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\nM. Weber and S. Sra. Riemannian Optimization via Frank-Wolfe Methods. Mathematical Programming 199, 525–556 (2022).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/CONTRIBUTING.md\"","category":"page"},{"location":"contributing/#Contributing-to-Manopt.jl","page":"Contributing to ManoptExamples.jl","title":"Contributing to Manopt.jl","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"First, thanks for taking the time to contribute. Any contribution is appreciated and welcome.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The following is a set of guidelines to ManoptExamples.jl.","category":"page"},{"location":"contributing/#Table-of-Contents","page":"Contributing to ManoptExamples.jl","title":"Table of Contents","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Contributing to Manopt.jl\nTable of Contents\nI just have a question\nHow can I file an issue?\nHow can I contribute?\nAdd an objective\nCode style","category":"page"},{"location":"contributing/#I-just-have-a-question","page":"Contributing to ManoptExamples.jl","title":"I just have a question","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The developer can most easily be reached in the Julia Slack channel #manifolds. You can apply for the Julia Slack workspace here if you haven't joined yet. You can also ask your question on our GitHub discussion.","category":"page"},{"location":"contributing/#How-can-I-file-an-issue?","page":"Contributing to ManoptExamples.jl","title":"How can I file an issue?","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you found a bug or want to propose a feature, we track our issues within the GitHub repository.","category":"page"},{"location":"contributing/#How-can-I-contribute?","page":"Contributing to ManoptExamples.jl","title":"How can I contribute?","text":"","category":"section"},{"location":"contributing/#Add-an-objective","page":"Contributing to ManoptExamples.jl","title":"Add an objective","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"The objective in Manopt.jl represents the task to be optimised, usually phrased on an arbitrary manifold. The manifold is later specified when wrapping the objective inside a Problem.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have a specific objective you would like to provide here, feel free to start a new file in the src/objectives/ folder in your own fork and propose it later as a Pull Request.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you objective works without reusing any other objective functions, then they can all just be placed in this one file. If you notice, that you are reusing for example another objectives gradient as part of your objective, please refactor the code, such that the gradient, or other function is in the corresponding file in src/functions/ and follows the naming scheme:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"cost functions are always of the form cost_ and a fitting name\ngradient functions are always of the gradient_ and a fitting name, followed by an !","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"for in-place gradients and by !! if it is a struct that can provide both.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"It would be great if you could also add a small test for the functions and the problem you defined in the test/ section.","category":"page"},{"location":"contributing/#Add-an-example","page":"Contributing to ManoptExamples.jl","title":"Add an example","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"If you have used one of the problems from here in an example or you are providing a problem together with an example, please add a corresponding Quarto Markdown file to the examples/ folder. The Markdown file should provide a short introduction to the problem and provide links to further details, maybe a paper or a preprint. Use the bib/literature.yaml file to add references (in CSL_YAML, which can for example be exported e.g. from Zotero).","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Add any packages you need to the examples/ environment (see the containting Project.toml). The examples will not be run on CI, but their rendered CommonMark outpout should be included in the list of examples in the documentation of this package.","category":"page"},{"location":"contributing/#Code-style","page":"Contributing to ManoptExamples.jl","title":"Code style","text":"","category":"section"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We try to follow the documentation guidelines from the Julia documentation as well as Blue Style. We run JuliaFormatter.jl on the repo in the way set in the .JuliaFormatter.toml file, which enforces a number of conventions consistent with the Blue Style.","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"We also follow a few internal conventions:","category":"page"},{"location":"contributing/","page":"Contributing to ManoptExamples.jl","title":"Contributing to ManoptExamples.jl","text":"Any implemented function should be accompanied by its mathematical formulae if a closed form exists.\nwithin a file the structs should come first and functions second. The only exception are constructors for the structs\nwithin both blocks an alphabetical order is preferable.\nThe above implies that the mutating variant of a function follows the non-mutating variant.\nThere should be no dangling = signs.\nAlways add a newline between things of different types (struct/method/const).\nAlways add a newline between methods for different functions (including in-place/non-mutating variants).\nPrefer to have no newline between methods for the same function; when reasonable, merge the docstrings into a generic function signature.\nAll import/using/include should be in the main module file.\nThere should only be a minimum of exports within this file, all problems should usually be later addressed as ManoptExamples.[...]\nthe Quarto Markdown files are excluded from this formatting.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-of-the-Difference-of-Convex-Algorithms","page":"A Benchmark","title":"Benchmark of the Difference of Convex Algorithms","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Introduction","page":"A Benchmark","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"In this Benchmark we compare the Difference of Convex Algprithm (DCA) [BFSS23] and the Difference of Convex Proximal Point Algorithm (DCPPA) [SO15] which solve Difference of Convex (DC) problems of the form. This Benchmark reproduces the results from [BFSS23], Section 7.1.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"operatorname*argmin_pinmathcal M g(p) - h(p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where ghcolon mathcal M to mathbb R are geodesically convex function on the Riemannian manifold mathcal M.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"using LinearAlgebra, Random, Statistics, BenchmarkTools\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and we load a few nice colors","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\nteal = paul_tol[\"mutedteal\"]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#The-DC-Problem","page":"A Benchmark","title":"The DC Problem","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We start with defining the two convex functions gh and their gradients as well as the DC problem f and its gradient for the problem","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":" operatorname*argmin_pinmathcal M bigl( logbigr(det(p)bigr)bigr)^4 - bigl(log det(p) bigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where the critical points obtain a functional value of -frac14.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where mathcal M is the manifold of symmetric positive definite (SPD) matrices with the affine invariant metric, which is the default.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We first define the corresponding functions","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"g(M, p) = log(det(p))^4\nh(M, p) = log(det(p))^2\nf(M, p) = g(M, p) - h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and their gradients","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"grad_g(M, p) = 4 * (log(det(p)))^3 * p\ngrad_h(M, p) = 2 * log(det(p)) * p\ngrad_f(M, p) = grad_g(M, p) - grad_h(M, p)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which we can use to verify that the gradients of g and h are correct. We use for that","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"n = 6\nM = SymmetricPositiveDefinite(n)\np0 = log(n) * Matrix{Float64}(I, n, n);\nX0 = 1 / n * Matrix{Float64}(I, n, n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"to tall both checks","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, g, grad_g, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"check_gradient(M, h, grad_h, p0, X0; plot=true)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"which both pass the test. We continue to define their inplace variants","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"function grad_g!(M, X, p)\n copyto!(M, X, p)\n X .*= 4 * (log(det(p)))^3\n return X\nend\nfunction grad_h!(M, X, p)\n copyto!(M, X, p)\n X .*= 2 * (log(det(p)))\n return X\nend\nfunction grad_f!(M, X, p)\n grad_g!(M, X, p)\n Y = copy(M, p, X)\n grad_h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And compare times for both algorithms, with a bit of debug output.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dca = difference_of_convex_algorithm(\n M,\n f,\n g,\n grad_h!,\n p0;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n (:GradientNorm, \" |grad_f(p)|: %1.9f\"),\n (:Change, \" |δp|: %1.9f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470\n# 5 f(p): -0.249956120 |grad_f(p)|: 0.046196628 |δp|: 0.201349127\n# 10 f(p): -0.249999999 |grad_f(p)|: 0.000187633 |δp|: 0.000626103\n# 15 f(p): -0.250000000 |grad_f(p)|: 0.000000772 |δp|: 0.000002574\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.000000005 |δp|: 0.000000011\nThe algorithm reached approximately critical point after 24 iterations; the gradient norm (7.619584706652929e-11) is less than 1.0e-10.\n 3.531235 seconds (8.71 M allocations: 628.709 MiB, 3.52% gc time, 67.16% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The cost is","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dca)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25000000000000006","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Similarly the DCPPA performs","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time p_min_dcppa = difference_of_convex_proximal_point(\n M,\n grad_h!,\n p0;\n g=g,\n grad_g=grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n debug=[\n :Iteration,\n (:Cost, \"f(p): %1.9f\"),\n \" \",\n (:GradientNorm, \"|grad_f(p)|: %1.10f\"),\n (:Change, \"|δp|: %1.10f\"),\n :Stop,\n 5,\n \"\\n\",\n ],\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n);","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Initial f(p): 137.679053470 \n# 5 f(p): -0.248491803 |grad_f(p)|: 0.2793140152|δp|: 0.2753827692\n# 10 f(p): -0.249998655 |grad_f(p)|: 0.0080437374|δp|: 0.0050891316\n# 15 f(p): -0.249999999 |grad_f(p)|: 0.0002507329|δp|: 0.0001567676\n# 20 f(p): -0.250000000 |grad_f(p)|: 0.0000078348|δp|: 0.0000048968\n# 25 f(p): -0.250000000 |grad_f(p)|: 0.0000002448|δp|: 0.0000001530\n# 30 f(p): -0.250000000 |grad_f(p)|: 0.0000000076|δp|: 0.0000000048\n# 35 f(p): -0.250000000 |grad_f(p)|: 0.0000000002|δp|: 0.0000000001\nThe algorithm reached approximately critical point after 37 iterations; the gradient norm (5.458071707233144e-11) is less than 1.0e-10.\n 1.341931 seconds (2.55 M allocations: 180.474 MiB, 2.46% gc time, 59.94% compilation time)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"It needs a few more iterations, but the single iterations are slightly faster. Both obtain the same cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"f(M, p_min_dcppa)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"-0.25","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-I:-Time-comparison","page":"A Benchmark","title":"Benchmark I: Time comparison","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"We compare both solvers first with respect to time. We initialise two vectors to collect the results and a range of natrix sizes to test","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dca_benchmarks = Dict{Int,BenchmarkTools.Trial}()\ndcppa_benchmarks = Dict{Int, BenchmarkTools.Trial}()\nN_max=14\nN = 2:N_max","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"and run a benchmark for both algorithms","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"for n in N\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I, n, n)\n bdca = @benchmark difference_of_convex_algorithm(\n $Mn,\n $f,\n $g,\n $grad_h!,\n $pn;\n grad_g=$grad_g!,\n gradient=$grad_f!,\n evaluation=InplaceEvaluation(),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dca_benchmarks[n] = bdca\n bdcppa = @benchmark difference_of_convex_proximal_point(\n $Mn,\n $grad_h!,\n $pn;\n g=$g,\n grad_g=$grad_g!,\n λ=i -> 1 / (2 * n),\n cost=f,\n gradient=grad_f!,\n evaluation=InplaceEvaluation(),\n stepsize=ConstantStepsize(1.0),\n stopping_criterion=StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion=StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n )\n dcppa_benchmarks[n] = bdcppa\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"Since we want to plot this versus the manifold dimension, we also create a vector for those and convert the times to seconds","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"dims = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N]\ndca_times = [mean(dca_benchmarks[n]).time / 1e9 for n in N]\ndcppa_times = [mean(dcppa_benchmarks[n]).time / 1e9 for n in N]","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Time (sec.)\")\nplot!(dims, dca_times; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims, dcppa_times; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Benchmark-II:-Iterations-and-cost.","page":"A Benchmark","title":"Benchmark II: Iterations and cost.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"As a second benchmark, let’s collect the number of iterations needed and the development of the cost over dimensions.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"N2 = [5,10,20,40,80]\ndims2 = [manifold_dimension(SymmetricPositiveDefinite(n)) for n in N2]\ndca_iterations = Dict{Int,Int}()\ndca_costs = Dict{Int,Vector{Float64}}()\ndcppa_iterations = Dict{Int,Int}()\ndcppa_costs = Dict{Int,Vector{Float64}}()","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"@time for n in N2\n println(n)\n Mn = SymmetricPositiveDefinite(n)\n pn = log(n) * Matrix{Float64}(I,n,n);\n @time dca_st = difference_of_convex_algorithm(\n Mn, f, g, grad_h!, pn;\n grad_g=grad_g!,\n gradient=grad_f!,\n evaluation = InplaceEvaluation(),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dca_costs[n] = get_record(dca_st, :Iteration, :Cost)\n dca_iterations[n] = length(dca_costs[n])\n @time dcppa_st = difference_of_convex_proximal_point(\n Mn, grad_h!, pn;\n g=g,\n grad_g=grad_g!,\n λ = i -> 1/(2*n),\n cost = f,\n gradient= grad_f!,\n evaluation = InplaceEvaluation(),\n stepsize = ConstantStepsize(1.0),\n stopping_criterion = StopAfterIteration(5000) | StopWhenGradientNormLess(1e-10),\n sub_stopping_criterion = StopAfterIteration(100) | StopWhenGradientNormLess(1e-10),\n record = [:Iteration, :Cost],\n return_state = true,\n );\n dcppa_costs[n] = get_record(dcppa_st, :Iteration, :Cost)\n dcppa_iterations[n] = length(dcppa_costs[n])\nend","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"The iterations are like","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"plot(; legend=:bottomright, xlabel=\"manifold dimension\", ylabel=\"Iterations\")\nplot!(dims2, [values(dca_iterations)...]; label=\"DCA\", color=indigo, linewidth=2)\nplot!(dims2, [values(dcppa_iterations)...]; label=\"DCPPA\", color=teal, linewidth=2)","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"And for the developtment of the cost","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"where we can see that the DCA needs less iterations than the DCPPA.","category":"page"},{"location":"examples/Difference-of-Convex-Benchmark/#Literature","page":"A Benchmark","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Benchmark/","page":"A Benchmark","title":"A Benchmark","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\nJ. C. Souza and P. R. Oliveira. A proximal point algorithm for DC fuctions on Hadamard manifolds. Journal of Global Optimization 63, 797–810 (2015).\n\n\n\n","category":"page"},{"location":"objectives/#List-of-Objectives-defined-for-the-Examples","page":"Objectives","title":"List of Objectives defined for the Examples","text":"","category":"section"},{"location":"objectives/#Rayleigh","page":"Objectives","title":"Rayleigh Quotient on the Sphere","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rayleigh example (TODO) to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RayleighQuotient.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RayleighQuotientCost","page":"Objectives","title":"ManoptExamples.RayleighQuotientCost","text":"RayleighQuotientCost\n\nA functor representing the Rayleigh Quotient cost function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Rayleigh Quotient in two forms. Either\n\nf(p) = p^mathrmTApqquad p 𝕊^n-1\n\nor extended into the embedding as\n\nf(x) = x^mathrmTAx qquad x ℝ^n\n\nwhich is not the orignal Rayleigh quotient for performance reasons, but useful if you want to use this as the Euclidean cost in the emedding of 𝕊^n-1.\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientCost(A)\n\nCreate the Rayleigh cost function.\n\nSee also\n\nRayleighQuotientGrad!!, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientGrad!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientGrad!!","text":"RayleighQuotientGrad!!\n\nA functor representing the Rayleigh Quotient gradient function.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the gradient of the Rayleigh Quotient in two forms. Either\n\noperatornamegrad f(p) = 2 Ap - 2 (p^mathrmTAp)*pqquad p 𝕊^n-1\n\nor taking the Euclidean gradient of the Rayleigh quotient on the sphere as\n\nf(x) = 2Ax qquad x ℝ^n\n\nFor details, see Example 3.62 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientGrad!!(A)\n\nCreate the Rayleigh quotient gradient function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientHess!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RayleighQuotientHess!!","page":"Objectives","title":"ManoptExamples.RayleighQuotientHess!!","text":"RayleighQuotientHess!!\n\nA functor representing the Rayleigh Quotient Hessian.\n\nLet A ℝ^nn be a symmetric matrix. Then we can specify the Hessian of the Rayleigh Quotient in two forms. Either\n\noperatornameHess f(p)X = 2 bigl(AX - (p^mathrmTAX)p - (p^mathrmTAp)Xbigr)qquad p 𝕊^n-1 X in T_p𝕊^n-1\n\nor taking the Euclidean Hessian of the Rayleigh quotient on the sphere as\n\n^2f(x)V = 2AV qquad x V ℝ^n\n\nFor details, see Example 5.27 of [Bou23].\n\nFields\n\nA – storing the matrix internally\n\nConstructor\n\nRayleighQuotientHess!!(A)\n\nCreate the Rayleigh quotient Hessian function.\n\nSee also\n\nRayleighQuotientCost, RayleighQuotientGrad!!\n\n\n\n\n\n","category":"type"},{"location":"objectives/#BezierCurves","page":"Objectives","title":"Bézier Curves","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Bezier Curves example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/BezierCurves.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.BezierSegment","page":"Objectives","title":"ManoptExamples.BezierSegment","text":"BezierSegment\n\nA type to capture a Bezier segment. With n points, a Bézier segment of degree n-1 is stored. On the Euclidean manifold, this yields a polynomial of degree n-1.\n\nThis type is mainly used to encapsulate the points within a composite Bezier curve, which consist of an AbstractVector of BezierSegments where each of the points might be a nested array on a PowerManifold already.\n\nNot that this can also be used to represent tangent vectors on the control points of a segment.\n\nSee also: de_Casteljau.\n\nConstructor\n\nBezierSegment(pts::AbstractVector)\n\nGiven an abstract vector of pts generate the corresponding Bézier segment.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}, AbstractFloat, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.L2_acceleration_Bezier","text":"L2_acceleration_Bezier(M,B,pts,λ,d)\n\ncompute the value of the discrete Acceleration of the composite Bezier curve together with a data term, i.e.\n\nfracλ2sum_i=0^N d_mathcal M(d_i c_B(i))^2+\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i and d_2 refers to the second order absolute difference second_order_Total_Variation (squared), the junction points are denoted by p_i, and to each p_i corresponds one data item in the manifold points given in d. For details on the acceleration approximation, see acceleration_Bezier. Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_L2_acceleration_Bezier, acceleration_Bezier, grad_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector{<:AbstractFloat}}} where P","page":"Objectives","title":"ManoptExamples.acceleration_Bezier","text":"acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector{<:AbstractFloat},\n) where {P}\n\ncompute the value of the discrete Acceleration of the composite Bezier curve\n\nsum_i=1^N-1fracd^2_2 B(t_i-1) B(t_i) B(t_i+1)Delta_t^3\n\nwhere for this formula the pts along the curve are equispaced and denoted by t_i, i=1N, and d_2 refers to the second order absolute difference second_order_Total_Variation (squared). Note that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nThis acceleration discretization was introduced in Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, grad_L2_acceleration_Bezier\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n T::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n T::AbstractVector,\n X::AbstractVector,\n)\n\nEvaluate the adjoint of the differential with respect to the controlpoints at several times T. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment},\n B::AbstractVector{<:BezierSegment},\n t,\n X\n)\n\nevaluate the adjoint of the differential of a composite Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, AbstractVector}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t::AbstractVector,\n X::AbstractVector,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a points T=(t_i)_i=1^n that are pointwise in t_i01 on the curve and given corresponding tangential vectors X = (η_i)_i=1^n, η_iT_β(t_i)mathcal M This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.adjoint_differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, Any}","page":"Objectives","title":"ManoptExamples.adjoint_differential_Bezier_control_points","text":"adjoint_differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t, η)\nadjoint_differential_Bezier_control_points!(\n M::AbstractManifold,\n Y::BezierSegment,\n b::BezierSegment,\n t,\n η,\n)\n\nevaluate the adjoint of the differential of a Bézier curve on the manifold M with respect to its control points b based on a point t01 on the curve and a tangent vector ηT_β(t)mathcal M. This can be computed in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.de_Casteljau-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any}}","page":"Objectives","title":"ManoptExamples.de_Casteljau","text":"de_Casteljau(M::AbstractManifold, b::BezierSegment NTuple{N,P}) -> Function\n\nreturn the Bézier curve β(b_0b_n) 01 mathcal M defined by the control points b_0b_nmathcal M, nmathbb N, as a BezierSegment. This function implements de Casteljau's algorithm Casteljau, 1959, Casteljau, 1963 generalized to manifolds by Popiel, Noakes, J Approx Theo, 2007: Let γ_ab(t) denote the shortest geodesic connecting abmathcal M. Then the curve is defined by the recursion\n\nbeginaligned\n β(tb_0b_1) = gamma_b_0b_1(t)\n β(tb_0b_n) = gamma_β(tb_0b_n-1) β(tb_1b_n)(t)\nendaligned\n\nand P is the type of a point on the Manifold M.\n\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}) -> Function\n\nGiven a vector of Bézier segments, i.e. a vector of control points B=bigl( (b_00b_n_00)(b_0m b_n_mm) bigr), where the different segments might be of different degree(s) n_0n_m. The resulting composite Bézier curve c_B0m mathcal M consists of m segments which are Bézier curves.\n\nc_B(t) =\n begincases\n β(t b_00b_n_00) text if t 01\n β(t-i b_0ib_n_ii) text if \n t(ii+1 quad i1m-1\n endcases\n\nde_Casteljau(M::AbstractManifold, b::BezierSegment, t::Real)\nde_Casteljau(M::AbstractManifold, B::AbstractVector{<:BezierSegment}, t::Real)\nde_Casteljau(M::AbstractManifold, b::BezierSegment, T::AbstractVector) -> AbstractVector\nde_Casteljau(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n) -> AbstractVector\n\nEvaluate the Bézier curve at time t or at times t in T.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, AbstractVector, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Θ::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n T::AbstractVector\n Ξ::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at the points in T, which are elementwise in 0N, and each depending the corresponding segment(s). Here, N is the length of B. For the mutating variant the result is computed in Θ.\n\nSee de_Casteljau for more details on the curve and Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}, Any, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y::AbstractVector{<:BezierSegment}\n B::AbstractVector{<:BezierSegment},\n t,\n X::AbstractVector{<:BezierSegment}\n)\n\nevaluate the differential of the composite Bézier curve with respect to its control points B and tangent vectors Ξ in the tangent spaces of the control points. The result is the “change” of the curve at t0N, which depends only on the corresponding segment. Here, N is the length of B. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, AbstractVector, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(\n M::AbstractManifold,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n T::AbstractVector,\n X::BezierSegment,\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X in the tangent spaces of the control points. The result is the “change” of the curve at the points T, elementwise in t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_Bezier_control_points-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment, Any, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.differential_Bezier_control_points","text":"differential_Bezier_control_points(M::AbstractManifold, b::BezierSegment, t::Float, X::BezierSegment)\ndifferential_Bezier_control_points!(\n M::AbstractManifold,\n Y,\n b::BezierSegment,\n t,\n X::BezierSegment\n)\n\nevaluate the differential of the Bézier curve with respect to its control points b and tangent vectors X given in the tangent spaces of the control points. The result is the “change” of the curve at t01. The computation can be done in place of Y.\n\nSee de_Casteljau for more details on the curve.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degree-Tuple{ManifoldsBase.AbstractManifold, ManoptExamples.BezierSegment}","page":"Objectives","title":"ManoptExamples.get_Bezier_degree","text":"get_Bezier_degree(M::AbstractManifold, b::BezierSegment)\n\nreturn the degree of the Bézier curve represented by the tuple b of control points on the manifold M, i.e. the number of points minus 1.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_degrees-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_degrees","text":"get_Bezier_degrees(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\n\nreturn the degrees of the components of a composite Bézier curve represented by tuples in B containing points on the manifold M.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_inner_points-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_inner_points","text":"get_Bezier_inner_points(M::AbstractManifold, B::AbstractVector{<:BezierSegment} )\nget_Bezier_inner_points(M::AbstractManifold, b::BezierSegment)\n\nreturns the inner (i.e. despite start and end) points of the segments of the composite Bézier curve specified by the control points B. For a single segment b, its inner points are returned\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junction_tangent_vectors-Tuple{ManifoldsBase.AbstractManifold, AbstractVector{<:ManoptExamples.BezierSegment}}","page":"Objectives","title":"ManoptExamples.get_Bezier_junction_tangent_vectors","text":"get_Bezier_junction_tangent_vectors(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junction_tangent_vectors(M::AbstractManifold, b::BezierSegment)\n\nreturns the tangent vectors at start and end points of the composite Bézier curve pointing from a junction point to the first and last inner control points for each segment of the composite Bezier curve specified by the control points B, either a vector of segments of controlpoints.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.get_Bezier_junctions","page":"Objectives","title":"ManoptExamples.get_Bezier_junctions","text":"get_Bezier_junctions(M::AbstractManifold, B::AbstractVector{<:BezierSegment})\nget_Bezier_junctions(M::AbstractManifold, b::BezierSegment)\n\nreturns the start and end point(s) of the segments of the composite Bézier curve specified by the control points B. For just one segment b, its start and end points are returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_points","page":"Objectives","title":"ManoptExamples.get_Bezier_points","text":"get_Bezier_points(\n M::AbstractManifold,\n B::AbstractVector{<:BezierSegment},\n reduce::Symbol=:default\n)\nget_Bezier_points(M::AbstractManifold, b::BezierSegment, reduce::Symbol=:default)\n\nreturns the control points of the segments of the composite Bézier curve specified by the control points B, either a vector of segments of controlpoints or a.\n\nThis method reduces the points depending on the optional reduce symbol\n\n:default: no reduction is performed\n:continuous: for a continuous function, the junction points are doubled at b_0i=b_n_i-1i-1, so only b_0i is in the vector.\n:differentiable: for a differentiable function additionally log_b_0ib_1i = -log_b_n_i-1i-1b_n_i-1-1i-1 holds. hence b_n_i-1-1i-1 is omitted.\n\nIf only one segment is given, all points of b, b.pts, is returned.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.get_Bezier_segments-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any}, Tuple{ManifoldsBase.AbstractManifold, Vector{P}, Any, Symbol}} where P","page":"Objectives","title":"ManoptExamples.get_Bezier_segments","text":"get_Bezier_segments(M::AbstractManifold, c::AbstractArray{P}, d[, s::Symbol=:default])\n\nreturns the array of BezierSegments B of a composite Bézier curve reconstructed from an array c of points on the manifold M and an array of degrees d.\n\nThere are a few (reduced) representations that can get extended; see also get_Bezier_points. For ease of the following, let c=(c_1c_k) and d=(d_1d_m), where m denotes the number of components the composite Bézier curve consists of. Then\n\n:default: k = m + sum_i=1^m d_i since each component requires one point more than its degree. The points are then ordered in tuples, i.e.\nB = bigl c_1c_d_1+1 (c_d_1+2c_d_1+d_2+2 c_k-m+1+d_mc_k bigr\n:continuous: k = 1+ sum_i=1m d_i, since for a continuous curve start and end point of successive components are the same, so the very first start point and the end points are stored.\nB = bigl c_1c_d_1+1 c_d_1+1c_d_1+d_2+1 c_k-1+d_mb_k) bigr\n:differentiable – for a differentiable function additionally to the last explanation, also the second point of any segment was not stored except for the first segment. Hence k = 2 - m + sum_i=1m d_i and at a junction point b_n with its given prior point c_n-1, i.e. this is the last inner point of a segment, the first inner point in the next segment the junction is computed as b = exp_c_n(-log_c_n c_n-1) such that the assumed differentiability holds\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_L2_acceleration_Bezier-Union{Tuple{P}, Tuple{ManifoldsBase.AbstractManifold, AbstractVector{P}, AbstractVector{<:Integer}, AbstractVector, Any, AbstractVector{P}}} where P","page":"Objectives","title":"ManoptExamples.grad_L2_acceleration_Bezier","text":"grad_L2_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector{P},\n degrees::AbstractVector{<:Integer},\n T::AbstractVector,\n λ,\n d::AbstractVector{P}\n) where {P}\n\ncompute the gradient of the discretized acceleration of a composite Bézier curve on the Manifold M with respect to its control points B together with a data term that relates the junction points p_i to the data d with a weight λ compared to the acceleration. The curve is evaluated at the points given in pts (elementwise in 0N), where N is the number of segments of the Bézier curve. The summands are grad_distance for the data term and grad_acceleration_Bezier for the acceleration with interpolation constrains. Here the get_Bezier_junctions are included in the optimization, i.e. setting λ=0 yields the unconstrained acceleration minimization. Note that this is ill-posed, since any Bézier curve identical to a geodesic is a minimizer.\n\nNote that the Bézier-curve is given in reduces form as a point on a PowerManifold, together with the degrees of the segments and assuming a differentiable curve, the segments can internally be reconstructed.\n\nSee also\n\ngrad_acceleration_Bezier, L2_acceleration_Bezier, acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_acceleration_Bezier-Tuple{ManifoldsBase.AbstractManifold, AbstractVector, AbstractVector{<:Integer}, AbstractVector}","page":"Objectives","title":"ManoptExamples.grad_acceleration_Bezier","text":"grad_acceleration_Bezier(\n M::AbstractManifold,\n B::AbstractVector,\n degrees::AbstractVector{<:Integer}\n T::AbstractVector\n)\n\ncompute the gradient of the discretized acceleration of a (composite) Bézier curve c_B(t) on the Manifold M with respect to its control points B given as a point on the PowerManifold assuming C1 conditions and known degrees. The curve is evaluated at the points given in T (elementwise in 0N, where N is the number of segments of the Bézier curve). The get_Bezier_junctions are fixed for this gradient (interpolation constraint). For the unconstrained gradient, see grad_L2_acceleration_Bezier and set λ=0 therein. This gradient is computed using adjoint_Jacobi_fields. For details, see Bergmann, Gousenbourger, Front. Appl. Math. Stat., 2018. See de_Casteljau for more details on the curve.\n\nSee also\n\nacceleration_Bezier, grad_L2_acceleration_Bezier, L2_acceleration_Bezier.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#RiemannianMean","page":"Objectives","title":"Riemannian Mean","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Riemannian mean example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RiemannianMean.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RiemannianMeanCost","page":"Objectives","title":"ManoptExamples.RiemannianMeanCost","text":"RiemannianMeanCost{P}\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\nf(p) = sum_j=i^N d_mathcal M^2(d_i p)\n\nwhere d_mathcal M is the distance on a Riemannian manifold.\n\nConstructor\n\nRiemannianMeanCost(M::AbstractManifold, data::AbstractVector{<:P}) where {P}\n\nInitialize the cost function to a data set data of points on a manfiold M, where each point is of type P.\n\nSee also\n\nRiemannianMeanGradient!!, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RiemannianMeanGradient!!","page":"Objectives","title":"ManoptExamples.RiemannianMeanGradient!!","text":"RiemannianMeanGradient!!{P} where P\n\nA functor representing the Riemannian center of mass (or Riemannian mean) cost function.\n\nFor a given set of points d_1ldotsd_N this cost function is defined as\n\noperatornamegradf(p) = sum_j=i^N log_p d_i\n\nwhere d_mathcal M is the distance on a Riemannian manifold and we employ grad_distance to compute the single summands.\n\nThis functor provides both the allocating variant grad_f(M,p) as well as the in-place variant grad_f!(M, X, p) which computes the gradient in-place of X.\n\nConstructors\n\nRiemannianMeanGradient!!(data::AbstractVector{P}, initial_vector::T=nothing) where {P,T}\n\nGenerate the Riemannian mean gradient based on some data points data an intial tangent vector initial_vector. If you do not provide an initial tangent vector to allocate the intermediate storage of a tangent vector, you can only use the allocating variant.\n\nRiemannianMeanGradient!!(\n M::AbstractManifold,\n data::AbstractVector{P};\n initial_vector::T=zero_vector(M, first(data)),\n) where {P,T}\n\nInitialize the Riemannian mean gradient, where the internal storage for tangent vectors can be created automatically, since the Riemannian manifold M is provideed.\n\nSee also\n\nRiemannianMeanCost, Riemannian_mean_objective\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.Riemannian_mean_objective","page":"Objectives","title":"ManoptExamples.Riemannian_mean_objective","text":"Riemannian_mean_objective(data, initial_vector=nothing, evaluation=Manopt.AllocatingEvaluation())\nRiemannian_mean_objective(M, data;\ninitial_vector=zero_vector(M, first(data)),\nevaluation=AllocatingEvaluton()\n)\n\nGenerate the objective for the Riemannian mean task for some given vector of data points on the Riemannian manifold M.\n\nSee also\n\nRiemannianMeanCost, RiemannianMeanGradient!!\n\nnote: Note\nThe first constructor should only be used if an additional storage of the vector is not feasible, since initialising the initial_vector to nothing disables the in-place variant. Hence the evaluation is a positional argument, since it only can be changed, if a vector is provided.\n\nnote: Note\n\n\nThe objective is available when Manopt.jl is loaded.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#RobustPCA","page":"Objectives","title":"Robust PCA","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Robust PCA example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/RobustPCA.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RobustPCACost","page":"Objectives","title":"ManoptExamples.RobustPCACost","text":"RobustPCACost{D,F}\n\nA functor representing the Riemannian robust PCA function on the Grassmann manifold. For some given (column) data Dmathbb R^dtimes n the cost function is defined on some operatornameGr(dm), mn as the sum of the distances of the columns D_i to the subspace spanned by pinoperatornameGr(dm) (represented as a point on the Stiefel manifold). The function reads\n\nf(U) = frac1nsum_i=1^n lVert pp^mathrmTD_i - D_irVert\n\nThis cost additionally provides a Huber regularisation of the cost, that is for some ε0 one use ℓ_ε(x) = sqrtx^2+ε^2 - ε in\n\nf_ε(p) = frac1nsum_i=1^n ℓ_εbigl(lVert pp^mathrmTD_i - D_irVertbigr)\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCACost(data::AbstractMatrix, ε=1.0)\nRobustPCACost(M::Grassmann, data::AbstractMatrix, ε=1.0)\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RobustPCAGrad!!","page":"Objectives","title":"ManoptExamples.RobustPCAGrad!!","text":"RobustPCAGrad!!{D,F}\n\nA functor representing the Riemannian robust PCA gradient on the Grassmann manifold. For some given (column) data Xmathbb R^ptimes n the gradient of the RobustPCACost can be computed by projecting the Euclidean gradient onto the corresponding tangent space.\n\nNote that this is a mutable struct so you can adapt the ε later on.\n\nConstructor\n\nRobustPCAGrad!!(data, ε=1.0)\nRobustPCAGrad!!(M::Grassmannian{d,m}, data, ε=1.0; evaluation=AllocatingEvaluation())\n\nInitialize the robust PCA cost to some data D, and some regularization ε. The manifold is optional to comply with all examples, but it is not needed here to construct the cost. Also the evaluation= keyword is present only for unification of the interfaces. Indeed, independent of that keyword the functor always works in both variants.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.robust_PCA_objective","page":"Objectives","title":"ManoptExamples.robust_PCA_objective","text":"robust_PCA_objective(data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluation())\nrobust_PCA_objective(M, data::AbstractMatrix, ε=1.0; evaluation=AllocatingEvaluton())\n\nGenerate the objective for the robust PCA task for some given data D and Huber regularization parameter ε.\n\nSee also\n\nRobustPCACost, RobustPCAGrad!!\n\nnote: Note\nSince the construction is independent of the manifold, that argument is optional and mainly provided to comply with other objectives. Similarly, independent of the evaluation, indeed the gradient always allows for both the allocating and the in-place variant to be used, though that keyword is used to setup the objective.\n\nnote: Note\n\n\nThe objective is available when Manopt.jl is loaded.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#Rosenbrock","page":"Objectives","title":"Rosenbrock Function","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Rosenbrock example and The Difference of Convex Rosenbrock Example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/Rosenbrock.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.RosenbrockCost","page":"Objectives","title":"ManoptExamples.RosenbrockCost","text":"RosenbrockCost\n\nProvide the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nf(mathcal M p) = a(p_1^2-p_2)^2 + (p_1-b)^2\n\nwhich means that for the 2D case, the manifold mathcal M is ignored.\n\nSee also 📖 Rosenbrock (with slightly different parameter naming).\n\nConstructor\n\nf = Rosenbrock(a,b)\n\ngenerates the struct/function of the Rosenbrock cost.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockGradient!!","page":"Objectives","title":"ManoptExamples.RosenbrockGradient!!","text":"RosenbrockGradient\n\nProvide Eclidean GRadient fo the Rosenbrock function in 2D, i.e. for some ab ℝ\n\nnabla f(mathcal M p) = beginpmatrix\n 4a(p_1^2-p_2)p_1 + 2(p_1-b) \n -2a(p_1^2-p_2)\nendpmatrix\n\ni.e. also here the manifold is ignored.\n\nConstructor\n\nRosenbrockGradient(a,b)\n\nFunctors\n\ngrad_f!!(M,p)\ngrad_f!!(M, X, p)\n\nevaluate the gradient at p the manifoldmathcal M is ignored.\n\n\n\n\n\n","category":"type"},{"location":"objectives/#ManoptExamples.RosenbrockMetric","page":"Objectives","title":"ManoptExamples.RosenbrockMetric","text":"RosenbrockMetric <: AbstractMetric\n\nA metric related to the Rosenbrock problem, where the metric at a point pmathbb R^2 is given by\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\nwhere the mathrmRb stands for Rosenbrock\n\n\n\n\n\n","category":"type"},{"location":"objectives/#Base.exp-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Number}","page":"Objectives","title":"Base.exp","text":"q = exp(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X)\nexp!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, q, p, X)\n\nCompute the exponential map with respect to the RosenbrockMetric.\n\n q = beginpmatrix p_1 + X_1 p_2+X_2+X_1^2endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Base.log-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any}","page":"Objectives","title":"Base.log","text":"X = log(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, q)\nlog!(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, X, p, q)\n\nCompute the logarithmic map with respect to the RosenbrockMetric. The formula reads for any j 1m\n\nX = beginpmatrix\n q_1 - p_1 \n q_2 - p_2 + (q_1 - p_1)^2\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.inverse_local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.inverse_local_metric","text":"inverse_local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the inverse of the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG^-1_p =\nbeginpmatrix\n 1 2p_1\n 2p_1 1+4p_1^2 \nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Manifolds.local_metric-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any}","page":"Objectives","title":"Manifolds.local_metric","text":"local_metric(::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p)\n\nReturn the local metric matrix of the RosenbrockMetric in the canonical unit vector basis of the tangent space T_pmathbb R^2 given as\n\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.change_representer-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s8\"} where var\"#s8\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, ManifoldsBase.EuclideanMetric, Any, Any}","page":"Objectives","title":"ManifoldsBase.change_representer","text":"Y = change_representer(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, ::EuclideanMetric, p, X)\nchange_representer!(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, Y, ::EuclideanMetric, p, X)\n\nGiven the Euclidan gradient X at p, this function computes the corresponting Riesz representer Ysuch that⟨X,Z⟩ = ⟨ Y, Z ⟩_{\\mathrm{Rb},p}holds for allZ, in other wordsY = G(p)^{-1}X`.\n\nthis function is used in riemannian_gradient to convert a Euclidean into a Riemannian gradient.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManifoldsBase.inner-Tuple{Manifolds.MetricManifold{ℝ, <:Manifolds.Euclidean{<:Union{ManifoldsBase.TypeParameter{Tuple{2}}, Tuple{var\"#s1\"} where var\"#s1\"<:Int64}, ℝ}, ManoptExamples.RosenbrockMetric}, Any, Any, Any}","page":"Objectives","title":"ManifoldsBase.inner","text":"inner(M::MetricManifold{ℝ,Euclidean{Tuple{2},ℝ},RosenbrockMetric}, p, X, Y)\n\nCompute the inner product on mathbb R^2 with respect to the RosenbrockMetric, i.e. for XY in T_pmathcal M we have\n\nXY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1\n -2p_1 1\nendpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Rosenbrock_objective","page":"Objectives","title":"ManoptExamples.Rosenbrock_objective","text":"Rosenbrock_objective(M::AbstractManifold=DefaultManifold(), a=100.0, b=1.0, evaluation=AllocatingEvaluation())\n\nReturn the gradient objective of the Rosenbrock example.\n\nSee also RosenbrockCost, RosenbrockGradient!!\n\nnote: Note\n\n\nThe objective is available when Manopt.jl is loaded.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.minimizer-Tuple{ManoptExamples.RosenbrockCost}","page":"Objectives","title":"ManoptExamples.minimizer","text":"minimizer(::RosenbrockCost)\n\nReturn the minimizer of the RosenbrockCost, which is given by\n\np^* = beginpmatrix bb^2 endpmatrix\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Total-Variation","page":"Objectives","title":"Total Variation","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"See the Total Variation example to see these in use.","category":"page"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"Modules = [ManoptExamples]\nPages = [\"objectives/TotalVariation.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"objectives/#ManoptExamples.Intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.Intrinsic_infimal_convolution_TV12","text":"Intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\nCompute the intrinsic infimal convolution model, where the addition is replaced by a mid point approach and the two functions involved are second_order_Total_Variation and Total_Variation. The model reads\n\nE(uv) =\n frac12sum_i mathcal G\n d_mathcal Mbigl(g(frac12v_iw_i)f_ibigr)\n +alphabigl( βmathrmTV(v) + (1-β)mathrmTV_2(w) bigr)\n\nfor more details see [BFPS17, BFPS18].\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation-NTuple{4, Any}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation","text":"L2_Total_Variation(M, p_data, α, p)\n\ncompute the ℓ^2-TV functional on the PowerManifold M for given (fixed) data p_data (on M), a nonnegative weight α, and evaluated at p (on M), i.e.\n\nE(p) = d_mathcal M^2(fp) + alpha operatornameTV(p)\n\nSee also\n\nTotal_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_Total_Variation_1_2-Tuple{ManifoldsBase.PowerManifold, Vararg{Any, 4}}","page":"Objectives","title":"ManoptExamples.L2_Total_Variation_1_2","text":"L2_Total_Variation_1_2(M, f, α, β, x)\n\ncompute the ℓ^2-TV-TV2 functional on the PowerManifold manifold M for given (fixed) data f (on M), nonnegative weight α, β, and evaluated at x (on M), i.e.\n\nE(x) = d_mathcal M^2(fx) + alphaoperatornameTV(x)\n + βoperatornameTV_2(x)\n\nSee also\n\nTotal_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.L2_second_order_Total_Variation-Tuple{ManifoldsBase.PowerManifold, Any, Any, Any}","page":"Objectives","title":"ManoptExamples.L2_second_order_Total_Variation","text":"L2_second_order_Total_Variation(M, f, β, x)\n\ncompute the ℓ^2-TV2 functional on the PowerManifold manifold M for given data f, nonnegative parameter β, and evaluated at x, i.e.\n\nE(x) = d_mathcal M^2(fx) + βoperatornameTV_2(x)\n\nas used in [BBSW16].\n\nSee also\n\nsecond_order_Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.Total_Variation","page":"Objectives","title":"ManoptExamples.Total_Variation","text":"Total_Variation(M,x [,p=2,q=1])\n\nCompute the operatornameTV^p functional for data xon the PowerManifold manifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i denote the forward neighbors, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I_i = i+e_j j=1kcap mathcal G. The formula reads\n\nE^q(x) = sum_i mathcal G\n bigl( sum_j mathcal I_i d^p_mathcal M(x_ix_j) bigr)^qp\n\nsee [WDS14] for more details. In long function names, this might be shortened to TV1 and the 1 might be ommitted if only total variation is present.\n\nSee also\n\ngrad_Total_Variation, prox_Total_Variation, second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.adjoint_differential_forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.adjoint_differential_forward_logs","text":"Y = adjoint_differential_forward_logs(M, p, X)\nadjoint_differential_forward_logs!(M, Y, p, X)\n\nCompute the adjoint differential of forward_logs F occurring, in the power manifold array p, the differential of the function\n\nF_i(p) = sum_j mathcal I_i log_p_i p_j\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i Let n be the number dimensions of the PowerManifold manifold (i.e. length(size(x))). Then the input tangent vector lies on the manifold mathcal M = mathcal M^n. The adjoint differential can be computed in place of Y.\n\nInput\n\nM – a PowerManifold manifold\np – an array of points on a manifold\nX – a tangent vector to from the n-fold power of p, where n is the ndims of p\n\nOutput\n\nY – resulting tangent vector in T_pmathcal M representing the adjoint differentials of the logs.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.differential_forward_logs-Tuple{ManifoldsBase.PowerManifold, Any, Any}","page":"Objectives","title":"ManoptExamples.differential_forward_logs","text":"Y = differential_forward_logs(M, p, X)\ndifferential_forward_logs!(M, Y, p, X)\n\ncompute the differential of forward_logs F on the PowerManifold manifold M at p and direction X , in the power manifold array, the differential of the function\n\nF_i(x) = sum_j mathcal I_i log_p_i p_j quad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\np – a point.\nX – a tangent vector.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal N representing the differentials of the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can also be done in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.forward_logs-Union{Tuple{TPR}, Tuple{TSize}, Tuple{TM}, Tuple{𝔽}, Tuple{ManifoldsBase.PowerManifold{𝔽, TM, TSize, TPR}, Any}} where {𝔽, TM, TSize, TPR}","page":"Objectives","title":"ManoptExamples.forward_logs","text":"Y = forward_logs(M,x)\nforward_logs!(M, Y, x)\n\ncompute the forward logs F (generalizing forward differences) occurring, in the power manifold array, the function\n\nF_i(x) = sum_j mathcal I_i log_x_i x_jquad i mathcal G\n\nwhere mathcal G is the set of indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i. This can also be done in place of ξ.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nY – resulting tangent vector in T_xmathcal M representing the logs, where mathcal N is the power manifold with the number of dimensions added to size(x). The computation can be done in place of Y.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, λ, x[, p=1])\ngrad_Total_Variation!(M, X, λ, x[, p=1])\n\nCompute the (sub)gradient f of all forward differences occurring, in the power manifold array, i.e. of the function\n\nf(p) = sum_isum_j mathcal I_i d^p(x_ix_j)\n\nwhere i runs over all indices of the PowerManifold manifold M and mathcal I_i denotes the forward neighbors of i.\n\nInput\n\nM – a PowerManifold manifold\nx – a point.\n\nOutput\n\nX – resulting tangent vector in T_xmathcal M. The computation can also be done in place.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Tuple{T, T}, Any}} where T","page":"Objectives","title":"ManoptExamples.grad_Total_Variation","text":"X = grad_Total_Variation(M, (x,y)[, p=1])\ngrad_Total_Variation!(M, X, (x,y)[, p=1])\n\ncompute the (sub) gradient of frac1pd^p_mathcal M(xy) with respect to both x and y (in place of X and Y).\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_intrinsic_infimal_convolution_TV12-Tuple{ManifoldsBase.AbstractManifold, Vararg{Any, 5}}","page":"Objectives","title":"ManoptExamples.grad_intrinsic_infimal_convolution_TV12","text":"grad_u, grad_v = grad_intrinsic_infimal_convolution_TV12(M, f, u, v, α, β)\n\ncompute (sub)gradient of the intrinsic infimal convolution model using the mid point model of second order differences, see second_order_Total_Variation, i.e. for some f mathcal M on a PowerManifold manifold mathcal M this function computes the (sub)gradient of\n\nE(uv) =\nfrac12sum_i mathcal G d_mathcal M(g(frac12v_iw_i)f_i)\n+ alpha\nbigl(\nβmathrmTV(v) + (1-β)mathrmTV_2(w)\nbigr)\n\nwhere both total variations refer to the intrinsic ones, grad_Total_Variation and grad_second_order_Total_Variation, respectively.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"Y = grad_second_order_Total_Variation(M, q[, p=1])\ngrad_second_order_Total_Variation!(M, Y, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1 q_2 q_3) with respect to all three components of qmathcal M^3, where d_2 denotes the second order absolute difference using the mid point model, i.e. let\n\nmathcal C = bigl c mathcal M g(tfrac12q_1q_3) text for some geodesic gbigr\n\ndenote the mid points between q_1 and q_3 on the manifold mathcal M. Then the absolute second order difference is defined as\n\nd_2(q_1q_2q_3) = min_c mathcal C_q_1q_3 d(c q_2)\n\nWhile the (sub)gradient with respect to q_2 is easy, the other two require the evaluation of an adjoint_Jacobi_field.\n\nThe derivation of this gradient can be found in [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.grad_second_order_Total_Variation-2","page":"Objectives","title":"ManoptExamples.grad_second_order_Total_Variation","text":"grad_second_order_Total_Variation(M::PowerManifold, q[, p=1])\n\ncomputes the (sub) gradient of frac1pd_2^p(q_1q_2q_3) with respect to all q_1q_2q_3 occurring along any array dimension in the point q, where M is the corresponding PowerManifold.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.project_collaborative_TV","page":"Objectives","title":"ManoptExamples.project_collaborative_TV","text":"project_collaborative_TV(M, λ, x, Ξ[, p=2,q=1])\nproject_collaborative_TV!(M, Θ, λ, x, Ξ[, p=2,q=1])\n\ncompute the projection onto collaborative Norm unit (or α-) ball, i.e. of the function\n\nF^q(x) = sum_imathcal G\n Bigl( sum_jmathcal I_i\n sum_k=1^d lVert X_ijrVert_x^pBigr)^fracqp\n\nwhere mathcal G is the set of indices for xmathcal M and mathcal I_i is the set of its forward neighbors. The computation can also be done in place of Θ.\n\nThis is adopted from the paper Duran, Möller, Sbert, Cremers, SIAM J Imag Sci, 2016, see their Example 3 for details.\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"ξ = prox_Total_Variation(M,λ,x [,p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all forward differences occurring in the power manifold array, i.e. varphi(xixj) = d_mathcal M^p(xixj) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a point.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point containing with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_Total_Variation-Union{Tuple{T}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}}, Tuple{ManifoldsBase.AbstractManifold, Number, Tuple{T, T}, Int64}} where T","page":"Objectives","title":"ManoptExamples.prox_Total_Variation","text":"[y1,y2] = prox_Total_Variation(M, λ, [x1,x2] [,p=1])\nprox_Total_Variation!(M, [y1,y2] λ, [x1,x2] [,p=1])\n\nCompute the proximal map operatornameprox_λvarphi of φ(xy) = d_mathcal M^p(xy) with parameter λ. A derivation of this closed form solution is given in see [WDS14].\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\n(x1,x2) – a tuple of two points,\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\n(y1,y2) – resulting tuple of points of the operatornameprox_λφ((x1,x2)). The result can also be computed in place.\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.prox_parallel_TV","page":"Objectives","title":"ManoptExamples.prox_parallel_TV","text":"y = prox_parallel_TV(M, λ, x [,p=1])\nprox_parallel_TV!(M, y, λ, x [,p=1])\n\ncompute the proximal maps operatornameprox_λφ of all forward differences occurring in the power manifold array, i.e. φ(x_ix_j) = d_mathcal M^p(x_ix_j) with xi and xj are array elements of x and j = i+e_k, where e_k is the kth unit vector. The parameter λ is the prox parameter.\n\nInput\n\nM – a PowerManifold manifold\nλ – a real value, parameter of the proximal map\nx – a point\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting Array of points with all mentioned proximal points evaluated (in a parallel within the arrays elements). The computation can also be done in place.\n\nSee also prox_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"(y1,y2,y3) = prox_second_order_Total_Variation(M,λ,(x1,x2,x3),[p=1], kwargs...)\nprox_second_order_Total_Variation!(M, y, λ,(x1,x2,x3),[p=1], kwargs...)\n\nCompute the proximal map operatornameprox_λvarphi of varphi(x_1x_2x_3) = d_mathcal M^p(c(x_1x_3)x_2) with parameter λ>0, where c(xz) denotes the mid point of a shortest geodesic from x1 to x3 that is closest to x2. The result can be computed in place of y.\n\nNote that this function does not have a closed form solution but is solbed by a few steps of the subgradient mehtod from manopt.jl by default. See [BBSW16] for a derivation.\n\nInput\n\nM – a manifold\nλ – a real value, parameter of the proximal map\n(x1,x2,x3) – a tuple of three points\np – (1) exponent of the distance of the TV term\n\nOptional\n\nkwargs... – parameters for the internal subgradient_method (if M is neither Euclidean nor Circle, since for these a closed form is given)\n\nOutput\n\n(y1,y2,y3) – resulting tuple of points of the proximal map. The computation can also be done in place.\nnote: Note\n\nThis function requires Manopt.jl to be loaded\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.prox_second_order_Total_Variation-Union{Tuple{T}, Tuple{N}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any}, Tuple{ManifoldsBase.PowerManifold{N, T}, Any, Any, Int64}} where {N, T}","page":"Objectives","title":"ManoptExamples.prox_second_order_Total_Variation","text":"y = prox_second_order_Total_Variation(M, λ, x[, p=1])\nprox_second_order_Total_Variation!(M, y, λ, x[, p=1])\n\ncompute the proximal maps operatornameprox_λvarphi of all centered second order differences occurring in the power manifold array, i.e. varphi(x_kx_ix_j) = d_2(x_kx_ix_j), where kj are backward and forward neighbors (along any dimension in the array of x). The parameter λ is the prox parameter.\n\nInput\n\nM – a manifold M\nλ – a real value, parameter of the proximal map\nx – a points.\n\nOptional\n\n(default is given in brackets)\n\np – (1) exponent of the distance of the TV term\n\nOutput\n\ny – resulting point with all mentioned proximal points evaluated (in a cyclic order). The computation can also be done in place.\n\nnote: Note\nThis function requires Manopt.jl to be loaded\n\n\n\n\n\n","category":"method"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,x [,p=1])\n\ncompute the operatornameTV_2^p functional for data x on the PowerManifold manifoldmanifold M, i.e. mathcal M = mathcal N^n, where n mathbb N^k denotes the dimensions of the data x. Let mathcal I_i^pm denote the forward and backward neighbors, respectively, i.e. with mathcal G as all indices from mathbf1 mathbb N^k to n we have mathcal I^pm_i = ipm e_j j=1kcap mathcal I. The formula then reads\n\nE(x) = sum_i mathcal I j_1 mathcal I^+_i j_2 mathcal I^-_i\nd^p_mathcal M(c_i(x_j_1x_j_2) x_i)\n\nwhere c_i() denotes the mid point between its two arguments that is nearest to x_i, see [BBSW16] for a derivation.\n\nIn long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation\n\n\n\n\n\n","category":"function"},{"location":"objectives/#ManoptExamples.second_order_Total_Variation-Union{Tuple{T}, Tuple{MT}, Tuple{MT, Tuple{T, T, T}}, Tuple{MT, Tuple{T, T, T}, Any}} where {MT<:ManifoldsBase.AbstractManifold, T}","page":"Objectives","title":"ManoptExamples.second_order_Total_Variation","text":"second_order_Total_Variation(M,(x1,x2,x3) [,p=1])\n\nCompute the operatornameTV_2^p functional for the 3-tuple of points (x1,x2,x3)on the manifold M. Denote by\n\n mathcal C = bigl c mathcal M g(tfrac12x_1x_3) text for some geodesic gbigr\n\nthe set of mid points between x_1 and x_3. Then the function reads\n\nd_2^p(x_1x_2x_3) = min_c mathcal C d_mathcal M(cx_2)\n\nsee [BBSW16] for a derivation. In long function names, this might be shortened to TV2.\n\nSee also\n\ngrad_second_order_Total_Variation, prox_second_order_Total_Variation, Total_Variation\n\n\n\n\n\n","category":"method"},{"location":"objectives/#Literature","page":"Objectives","title":"Literature","text":"","category":"section"},{"location":"objectives/","page":"Objectives","title":"Objectives","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Priors with coupled first and second order differences for manifold-valued image processing. Journal of Mathematical Imaging and Vision 60, 1459–1481 (2018), arXiv:1709.01343.\n\n\n\nR. Bergmann, J. H. Fitschen, J. Persch and G. Steidl. Infimal convolution coupling of first and second order differences on manifold-valued images. In: Scale Space and Variational Methods in Computer Vision: 6th International Conference, SSVM 2017, Kolding, Denmark, June 4–8, 2017, Proceedings, edited by F. Lauze, Y. Dong and A. B. Dahl (Springer International Publishing, 2017); pp. 447–459.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nN. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\nP. de Casteljau. Outillage methodes calcul (Enveloppe Soleau 40.040, Institute National de la Propriété Industrielle, Paris., 1959).\n\n\n\nP. de Casteljau. Courbes et surfaces à pôles (Microfiche P 4147-1, Institute National de la Propriété Industrielle, Paris., 1963).\n\n\n\nJ. Duran, M. Moeller, C. Sbert and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models. SIAM Journal on Imaging Sciences 9, 116–151 (2016), arXiv:1508.01308.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/HyperparameterOptimization/#Hyperparameter-optimization","page":"Hyperparameter optimziation","title":"Hyperparameter optimization","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Mateusz Baran 2024-08-03","category":"page"},{"location":"examples/HyperparameterOptimization/#Introduction","page":"Hyperparameter optimziation","title":"Introduction","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"This example shows how to automatically select the best values of hyperparameters of optimization procedures such as retraction, vector transport, size of memory in L-BFGS or line search coefficients. Hyperparameter optimization relies on the Optuna [ASY+19] Python library because it is much more advanced than similar Julia projects, offering Bayesian optimization with conditional hyperparameters and early stopping.","category":"page"},{"location":"examples/HyperparameterOptimization/#General-definitions","page":"Hyperparameter optimziation","title":"General definitions","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Here are some general definitions that you will most likely be able to directly use for your problem without any changes. Just remember to install optuna, for example using CondaPkg Julia library.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"using Manifolds, Manopt\nusing PythonCall\nusing BenchmarkTools\nusing LineSearches\n\n# This script requires optuna to be available through PythonCall\n# You can install it for example using\n# using CondaPkg\n# ]conda add optuna\n\noptuna = pyimport(\"optuna\")\n\nnorm_inf(M::AbstractManifold, p, X) = norm(X, Inf)\n\n# TTsuggest_ structs collect data from a calibrating optimization run\n# that is handled by compute_pruning_losses function\n\nstruct TTsuggest_int\n suggestions::Dict{String,Int}\nend\nfunction (s::TTsuggest_int)(name::String, a, b)\n return s.suggestions[name]\nend\nstruct TTsuggest_float\n suggestions::Dict{String,Float64}\nend\nfunction (s::TTsuggest_float)(name::String, a, b; log::Bool=false)\n return s.suggestions[name]\nend\nstruct TTsuggest_categorical\n suggestions::Dict{String,Any}\nend\nfunction (s::TTsuggest_categorical)(name::String, vals)\n return s.suggestions[name]\nend\nstruct TTreport\n reported_vals::Vector{Float64}\nend\nfunction (r::TTreport)(val, i)\n return push!(r.reported_vals, val)\nend\nstruct TTshould_prune end\n(::TTshould_prune)() = Py(false)\nstruct TracingTrial\n suggest_int::TTsuggest_int\n suggest_float::TTsuggest_float\n suggest_categorical::TTsuggest_categorical\n report::TTreport\n should_prune::TTshould_prune\nend\n\nfunction compute_pruning_losses(\n od,\n int_suggestions::Dict{String,Int},\n float_suggestions::Dict{String,Float64},\n categorical_suggestions::Dict{String,Int},\n)\n tt = TracingTrial(\n TTsuggest_int(int_suggestions),\n TTsuggest_float(float_suggestions),\n TTsuggest_categorical(categorical_suggestions),\n TTreport(Float64[]),\n TTshould_prune(),\n )\n od(tt)\n return tt.report.reported_vals\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"The next part is your hyperparameter optimization objective. The ObjectiveData struct contains all relevant information about the sequence of specific problems. The outermost key part is the N_range field. Early stopping requires a series of progressively more complex problems. They will be attempted from the most simple one to the most complex one, and are specified by the values of N in that vector.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"mutable struct ObjectiveData{TObj,TGrad}\n obj::TObj\n grad::TGrad\n N_range::Vector{Int}\n gtol::Float64\n vts::Vector{AbstractVectorTransportMethod}\n retrs::Vector{AbstractRetractionMethod}\n manifold_constructors::Vector{Tuple{String,Any}}\n pruning_losses::Vector{Float64}\n manopt_stepsize::Vector{Tuple{String,Any}}\n obj_loss_coeff::Float64\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"In the example below we optimize hyperparameters on a sequence of Rosenbrock-type problems restricted to spheres:","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"argmin_p in S^N-1 sum_i=1^N2 (1-p_2i)^2 + 100 (p_2i+1 - p_2i^2)^2","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"where N in 2 16 128 1024 8192 65536.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"obj and grad are the objective and gradient, here defined as below. Note that gradient works in-place and variants without manifolds are also provided for easier comparison with other libraries like Optim.jl. It is easiest when problems for different values N can be distinguished by being defined on successively larger manifolds but the script could be modified so that it’s not necessary.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"pruning_losses and compute_pruning_losses are related to early pruning used in Optuna and you shouldn’t have to modify them.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"function f_rosenbrock(x)\n result = 0.0\n for i in 1:2:length(x)\n result += (1.0 - x[i])^2 + 100.0 * (x[i + 1] - x[i]^2)^2\n end\n return result\nend\nfunction f_rosenbrock(::AbstractManifold, x)\n return f_rosenbrock(x)\nend\n\nfunction g_rosenbrock!(storage, x)\n for i in 1:2:length(x)\n storage[i] = -2.0 * (1.0 - x[i]) - 400.0 * (x[i + 1] - x[i]^2) * x[i]\n storage[i + 1] = 200.0 * (x[i + 1] - x[i]^2)\n end\n return storage\nend\nfunction g_rosenbrock!(M::AbstractManifold, storage, x)\n g_rosenbrock!(storage, x)\n riemannian_gradient!(M, storage, x, storage)\n return storage\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Next, gtol is the tolerance used for the stopping criterion in optimization. vts and retrs are, respectively, vector transports and retraction methods selected through hyperparameter optimization. Some items need to be different for different values of N, for example the manifold over which the problem is defined. This is handled by manifold_constructors which is then defined as Tuple{String,Any}[(\"Sphere\", N -> Manifolds.Sphere(N - 1))], where the string \"Sphere\" is used to identify the manifold family and the next element is a function that transforms the value of N to the manifold for the problem of size N.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Similarly, different stepsize selection methods may be considered. This is handled by the field manopt_stepsize. It will be easiest to see how it works by looking at how it is initialized:","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Tuple{String,Any}[\n (\"LS-HZ\", M -> Manopt.LineSearchesStepsize(ls_hz)),\n (\"Wolfe-Powell\", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),\n]","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"We have a string that identifies the line search method name and a constructor of the line search which takes relevant arguments like the manifold or a numerical parameter.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"The next part is the trial evaluation procedure. This is one of the more important places which need to be customized to your problem. This is the point where we tell Optuna about the relevant optimization hyperparameters and use them to define specific problems. The hyperparameter optimization is a multiobjective problem: we want as good problem objectives as possible and as low times as possible. As Optuna doesn’t currently support multicriteria pruning, which is important for obtaining a solution in a reasonable amount of time, we use a linear combination of sub-objectives to turn the problem into a single-criterion optimization. The hyperparameter optimization objective is a linear combination of achieved objectives the relative weight is controlled by objective.obj_loss_coeff.","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"function (objective::ObjectiveData)(trial)\n # Here we use optuna to select memory length for L-BFGS -- an integer in the range between 2 and 30, referenced by name \"mem_len\"\n mem_len = trial.suggest_int(\"mem_len\", 2, 30)\n\n # Here we select a vector transport and retraction methods, one of those specified in the `ObjectiveData`.\n vt = objective.vts[pyconvert(\n Int,\n trial.suggest_categorical(\n \"vector_transport_method\", Vector(eachindex(objective.vts))\n ),\n )]\n retr = objective.retrs[pyconvert(\n Int,\n trial.suggest_categorical(\"retraction_method\", Vector(eachindex(objective.retrs))),\n )]\n\n # Here we select the manifold constructor, in case we want to try different manifolds for our problem. For example one could try defining a problem with orthogonality constraints on Stiefel, Grassmann or flag manifold.\n manifold_name, manifold_constructor = objective.manifold_constructors[pyconvert(\n Int,\n trial.suggest_categorical(\n \"manifold\", Vector(eachindex(objective.manifold_constructors))\n ),\n )]\n\n # Here the stepsize selection method type is selected.\n manopt_stepsize_name, manopt_stepsize_constructor = objective.manopt_stepsize[pyconvert(\n Int,\n trial.suggest_categorical(\n \"manopt_stepsize\", Vector(eachindex(objective.manopt_stepsize))\n ),\n )]\n\n # This parametrizes stepsize selection methods with relevant numerical parameters.\n local c1_val, c2_val, hz_sigma\n if manopt_stepsize_name == \"Wolfe-Powell\"\n c1_val = pyconvert(\n Float64, trial.suggest_float(\"Wolfe-Powell c1\", 1e-5, 1e-2; log=true)\n )\n c2_val =\n 1.0 - pyconvert(\n Float64, trial.suggest_float(\"Wolfe-Powell 1-c2\", 1e-4, 1e-2; log=true)\n )\n elseif manopt_stepsize_name == \"Improved HZ\"\n hz_sigma = pyconvert(Float64, trial.suggest_float(\"Improved HZ sigma\", 0.1, 0.9))\n end\n\n # The current loss estimate, taking into account estimated loss values for larger, not-yet-evaluated values of `N`.\n loss = sum(objective.pruning_losses)\n\n # Here iterate over problems we want to optimize for\n # from smallest to largest; pruning should stop the iteration early\n # if the hyperparameter set is not promising\n cur_i = 0\n for N in objective.N_range\n # Here we define the initial point for the optimization procedure\n p0 = zeros(N)\n p0[1] = 1\n M = manifold_constructor(N)\n # Here we construct the specific line search to be used\n local ls\n if manopt_stepsize_name == \"Wolfe-Powell\"\n ls = manopt_stepsize_constructor(M, c1_val, c2_val)\n elseif manopt_stepsize_name == \"Improved HZ\"\n ls = manopt_stepsize_constructor(M, hz_sigma)\n else\n ls = manopt_stepsize_constructor(M)\n end\n manopt_time, manopt_iters, manopt_obj = benchmark_time_state(\n ManoptQN(),\n M,\n N,\n objective.obj,\n objective.grad,\n p0,\n ls,\n pyconvert(Int, mem_len),\n objective.gtol;\n vector_transport_method=vt,\n retraction_method=retr,\n )\n # TODO: turn this into multi-criteria optimization when Optuna starts supporting\n # pruning in such problems\n loss -= objective.pruning_losses[cur_i + 1]\n loss += manopt_time + objective.obj_loss_coeff * manopt_obj\n trial.report(loss, cur_i)\n if pyconvert(Bool, trial.should_prune().__bool__())\n throw(PyException(optuna.TrialPruned()))\n end\n cur_i += 1\n end\n return loss\nend","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"In the following benchmarking code you will most likely have to adapt solver parameters. This is designed around quasi_Newton but can be adapted to any solver as needed. The example below performs a small number of trials for quick rendering but in practice you should aim for at least a few thousand trials (the n_trials parameter).","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"# An abstract type in case we want to try different optimization packages.\nabstract type AbstractOptimConfig end\nstruct ManoptQN <: AbstractOptimConfig end\n\n# Benchmark that evaluates hyperparameters. Returns time to reach the solution, number of iterations and final value of the objective.\nfunction benchmark_time_state(\n ::ManoptQN,\n M::AbstractManifold,\n N,\n f,\n g!,\n p0,\n stepsize::Manopt.Stepsize,\n mem_len::Int,\n gtol::Real;\n kwargs...,\n)\n manopt_sc = StopWhenGradientNormLess(gtol; norm=norm_inf) | StopAfterIteration(1000)\n mem_len = min(mem_len, manifold_dimension(M))\n manopt_state = quasi_Newton(\n M,\n f,\n g!,\n p0;\n stepsize=stepsize,\n evaluation=InplaceEvaluation(),\n return_state=true,\n memory_size=mem_len,\n stopping_criterion=manopt_sc,\n debug=[],\n kwargs...,\n )\n bench_manopt = @benchmark quasi_Newton(\n $M,\n $f,\n $g!,\n $p0;\n stepsize=$(stepsize),\n evaluation=$(InplaceEvaluation()),\n memory_size=$mem_len,\n stopping_criterion=$(manopt_sc),\n debug=[],\n $kwargs...,\n )\n iters = get_count(manopt_state, :Iterations)\n final_val = f(M, manopt_state.p)\n return median(bench_manopt.times) / 1000, iters, final_val\nend\n\n\"\"\"\n lbfgs_study(; pruning_coeff::Float64=0.95)\n\nSet up the example hyperparameter optimization study.\n\"\"\"\nfunction lbfgs_study(; pruning_coeff::Float64=0.95)\n Ns = [2^n for n in 1:3:12]\n ls_hz = LineSearches.HagerZhang()\n od = ObjectiveData(\n f_rosenbrock,\n g_rosenbrock!,\n Ns,\n 1e-5,\n AbstractVectorTransportMethod[ParallelTransport(), ProjectionTransport()],\n [ExponentialRetraction(), ProjectionRetraction()],\n Tuple{String,Any}[(\"Sphere\", N -> Manifolds.Sphere(N - 1))],\n zeros(Float64, eachindex(Ns)),\n Tuple{String,Any}[\n (\"LS-HZ\", M -> Manopt.LineSearchesStepsize(ls_hz)),\n #(\"Improved HZ\", (M, sigma) -> HagerZhangLinesearch(M; sigma=sigma)),\n (\"Wolfe-Powell\", (M, c1, c2) -> Manopt.WolfePowellLinesearch(M, c1, c2)),\n ],\n 10.0,\n )\n\n # Here you need to define baseline values of all hyperparameters\n baseline_pruning_losses = compute_pruning_losses(\n od,\n Dict(\"mem_len\" => 4),\n Dict(\n \"Wolfe-Powell c1\" => 1e-4,\n \"Wolfe-Powell 1-c2\" => 1e-3,\n \"Improved HZ sigma\" => 0.9,\n ),\n Dict(\n \"vector_transport_method\" => 1,\n \"retraction_method\" => 1,\n \"manifold\" => 1,\n \"manopt_stepsize\" => 1,\n ),\n )\n od.pruning_losses = pruning_coeff * baseline_pruning_losses\n\n study = optuna.create_study(; study_name=\"L-BFGS\")\n # Here you can specify number of trials and timeout (in seconds).\n study.optimize(od; n_trials=1000, timeout=500)\n println(\"Best params is $(study.best_params) with value $(study.best_value)\")\n selected_manifold = od.manifold_constructors[pyconvert(Int, study.best_params[\"manifold\"])][1]\n selected_retraction_method = od.retrs[pyconvert(Int, study.best_params[\"retraction_method\"])]\n selected_vector_transport = od.vts[pyconvert(Int, study.best_params[\"vector_transport_method\"])]\n println(\"Selected manifold: $(selected_manifold)\")\n println(\"Selected retraction method: $(selected_retraction_method)\")\n println(\"Selected vector transport method: $(selected_vector_transport)\")\n return study\nend\n\nlbfgs_study()","category":"page"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"Best params is {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093} with value 5510.963227438757\nSelected manifold: Sphere\nSelected retraction method: ExponentialRetraction()\nSelected vector transport method: ProjectionTransport()\n\n[I 2024-03-16 18:04:17,965] A new study created in memory with name: L-BFGS\n[I 2024-03-16 18:04:45,996] Trial 0 finished with value: 5639.789870295856 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00027288064367948073, 'Wolfe-Powell 1-c2': 0.00026503788892114045}. Best is trial 0 with value: 5639.789870295856.\n[I 2024-03-16 18:05:11,860] Trial 1 finished with value: 5635.936370295855 and parameters: {'mem_len': 11, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.002743250060163298, 'Wolfe-Powell 1-c2': 0.00037986521186922096}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:05:39,386] Trial 2 finished with value: 5673.101441724422 and parameters: {'mem_len': 26, 'vector_transport_method': 2, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00043339485784312605, 'Wolfe-Powell 1-c2': 0.0027302649933974173}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:10,279] Trial 3 finished with value: 7410.818084581564 and parameters: {'mem_len': 26, 'vector_transport_method': 1, 'retraction_method': 2, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:37,995] Trial 4 finished with value: 5756.566226449636 and parameters: {'mem_len': 25, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 1}. Best is trial 1 with value: 5635.936370295855.\n[I 2024-03-16 18:06:42,755] Trial 5 pruned. \n[I 2024-03-16 18:06:58,577] Trial 6 pruned. \n[I 2024-03-16 18:07:15,366] Trial 7 pruned. \n[I 2024-03-16 18:07:40,605] Trial 8 finished with value: 5581.7437274386975 and parameters: {'mem_len': 7, 'vector_transport_method': 1, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0010567355712112379, 'Wolfe-Powell 1-c2': 0.003948002490203636}. Best is trial 8 with value: 5581.7437274386975.\n[I 2024-03-16 18:07:46,021] Trial 9 pruned. \n[I 2024-03-16 18:08:11,512] Trial 10 finished with value: 5510.963227438757 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006125542888545935, 'Wolfe-Powell 1-c2': 0.0010744467792321093}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:08:35,914] Trial 11 finished with value: 5521.388656010121 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0006738829952322474, 'Wolfe-Powell 1-c2': 0.0010639659137420014}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:00,317] Trial 12 finished with value: 5521.36958458155 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.00010975606104676191, 'Wolfe-Powell 1-c2': 0.0007663843095951679}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:24,680] Trial 13 finished with value: 5520.7020845815505 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 6.743450835567536e-05, 'Wolfe-Powell 1-c2': 0.0008779759729737719}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:09:50,268] Trial 14 pruned. \n[I 2024-03-16 18:10:15,494] Trial 15 finished with value: 5595.119584581556 and parameters: {'mem_len': 6, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 8.147444451747575e-05, 'Wolfe-Powell 1-c2': 0.00012268601197923553}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:10:25,264] Trial 16 pruned. \n[I 2024-03-16 18:10:50,209] Trial 17 finished with value: 5572.474513153012 and parameters: {'mem_len': 5, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.0015998473664092935, 'Wolfe-Powell 1-c2': 0.0005109172020536229}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:10:54,772] Trial 18 pruned. \n[I 2024-03-16 18:11:04,534] Trial 19 pruned. \n[I 2024-03-16 18:11:28,873] Trial 20 finished with value: 5512.3824417244705 and parameters: {'mem_len': 3, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.1581668103921961e-05, 'Wolfe-Powell 1-c2': 0.0002691056199427656}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:11:53,327] Trial 21 finished with value: 5529.088227438692 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.3645031886009879e-05, 'Wolfe-Powell 1-c2': 0.0001863385753491203}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:12:17,911] Trial 22 finished with value: 5522.041370295835 and parameters: {'mem_len': 2, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 1.0030173525937465e-05, 'Wolfe-Powell 1-c2': 0.000543991948003312}. Best is trial 10 with value: 5510.963227438757.\n[I 2024-03-16 18:12:27,645] Trial 23 pruned. \n[I 2024-03-16 18:12:52,163] Trial 24 finished with value: 5528.840941724406 and parameters: {'mem_len': 4, 'vector_transport_method': 2, 'retraction_method': 1, 'manifold': 1, 'manopt_stepsize': 2, 'Wolfe-Powell c1': 0.000245400433292576, 'Wolfe-Powell 1-c2': 0.000133639324295565}. Best is trial 10 with value: 5510.963227438757.\n\nPython: ","category":"page"},{"location":"examples/HyperparameterOptimization/#Summary","page":"Hyperparameter optimziation","title":"Summary","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"We’ve shown how to automatically select the best hyperparameter values for your optimization problem.","category":"page"},{"location":"examples/HyperparameterOptimization/#Literature","page":"Hyperparameter optimziation","title":"Literature","text":"","category":"section"},{"location":"examples/HyperparameterOptimization/","page":"Hyperparameter optimziation","title":"Hyperparameter optimziation","text":"T. Akiba, S. Sano, T. Yanase, T. Ohta and M. Koyama. Optuna: A Next-generation Hyperparameter Optimization Framework. In: Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2019), arXiv:1907.10902.\n\n\n\n","category":"page"},{"location":"examples/#List-of-Examples","page":"Overview","title":"List of Examples","text":"","category":"section"},{"location":"examples/","page":"Overview","title":"Overview","text":"Name provides Documentation Comment\nA Benchmark for Difference of Convex contains a few simple functions \nBézier Curves and Minimizing their Acceleration tools Bézier curves and their acceleration 📚 \nSolving Rosenbrock with Difference of Convex DoC split of Rosenbrock 📚 uses a Rosenbrock based metric\nDifference of Convex vs. Frank-Wolfe closed-form sub solver\nRiemannian Mean f, operatornamegradf (A/I), objective 📚 \nRobust PCA f, operatornamegradf (A/I), objective 📚 \nRosenbrock f, operatornamegradf (A/I), objective, minimizer 📚 \nThe Rayleigh Quotient f, operatornamegradf (A/I), operatornameHessf (A/I), objective 📚 \nTotal Variation Minimization f, operatornameproxf (A/I), objective 📚 ","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"Symbols:","category":"page"},{"location":"examples/","page":"Overview","title":"Overview","text":"A Allocating variant\nI In-place variant\n📚 link to documented functions in the documentation","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Solving-Rosenbrock-with-the-Difference-of-Convex-Algorithm","page":"Rosenbrock Metric","title":"Solving Rosenbrock with the Difference of Convex Algorithm","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Introduction","page":"Rosenbrock Metric","title":"Introduction","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"This example illustrates how the 📖 Rosenbrock problem can be rephrased as a difference of convex problem and with a new metric on Euclidean space. This example is the code that produces the results in [BFSS23], Section 7.2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Both the Rosenbrock problem","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":" operatorname*argmin_xin ℝ^2 abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where ab0 and usually b=1 and a gg b, we know the minimizer x^* = (bb^2)^mathrmT, and also the (Euclidean) gradient","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"nabla f(x) =\n beginpmatrix\n 4a(x_1^2-x_2) -2a(x_1^2-x_2)\n endpmatrix\n +\n beginpmatrix\n 2(x_1-b) 0\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"They are even available already here in ManifoldExamples.jl, see RosenbrockCost and RosenbrockGradient!!.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Furthermore, the RosenbrockMetric can be used on ℝ^2, that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"XY_mathrmRbp = X^mathrmTG_pY qquad\nG_p = beginpmatrix\n 1+4p_1^2 -2p_1 \n -2p_1 1\nendpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"In this example we want to explore four different approaches to minimizing the Rosenbrock example, that are all based on first-order methods, i.e. using a gradient but not a Hessian.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"The Euclidean Gradient\nThe Riemannian gradient descent with respect to the RosenbrockMetric\nThe Euclidean Difference of Convex Algorithm\nThe Riemannian Difference of Convex Algorithm respect to the RosenbrockMetric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Where we obtain a difference of convex problem by writing","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f(x) = abigl( x_1^2-x_2bigr)^2 + bigl(x_1-bbigr)^2\n = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 - bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"that is","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"g(x) = abigl( x_1^2-x_2bigr)^2 + 2bigl(x_1-bbigr)^2 quadtext and quad h(x) = bigl(x_1-bbigr)^2","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing NamedColors, Plots\nimport Manopt: set_manopt_parameter!\nRandom.seed!(42)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"paul_tol = load_paul_tol()\nindigo = paul_tol[\"mutedindigo\"]\ngreen = paul_tol[\"mutedgreen\"]\nsand = paul_tol[\"mutedsand\"]\nteal = paul_tol[\"mutedteal\"]\ngrey = paul_tol[\"mutedgrey\"]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"To emphasize the effect, we choose a quite large value of a.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"a = 2*10^5\nb = 1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and use the starting point and a direction to check gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"p0 = [0.1, 0.2]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Euclidean Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Euclidean gradient we can just use the same approach as in the Rosenbrock example","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M = ℝ^2\nf = ManoptExamples.RosenbrockCost(M; a=a, b=b)\n∇f!! = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"define a common debug vector","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"debug_vec = [\n (:Iteration, \"# %-8d \"),\n (:Cost, \"F(x): %1.4e\"),\n \" \",\n (:Change, \"|δp|: %1.4e | \"),\n (:GradientNorm, \"|grad f|: %1.6e\"),\n :Stop,\n \"\\n\",\n ]","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and call the gradient descent algorithm","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Eucl_GD_state = gradient_descent(M, f, ∇f!!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^7],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000000 F(x): 8.9937e-06 |δp|: 1.3835e+00 | |grad f|: 8.170355e-03\n# 20000000 F(x): 2.9474e-09 |δp|: 6.5764e-03 | |grad f|: 1.419191e-04\n# 30000000 F(x): 9.8376e-13 |δp|: 1.1918e-04 | |grad f|: 2.526295e-06\n# 40000000 F(x): 3.2830e-16 |δp|: 2.1773e-06 | |grad f|: 4.526313e-08\n# 50000000 F(x): 1.0154e-19 |δp|: 3.9803e-08 | |grad f|: 6.838240e-10\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 53073227 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Gradient-Descent.","page":"Rosenbrock Metric","title":"The Riemannian Gradient Descent.","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the Riemannian case, we define","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"M_rb = MetricManifold(M, ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"MetricManifold(Euclidean(2; field=ℝ), ManoptExamples.RosenbrockMetric())","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and the gradient is now adopted to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_f!(M, X, p)\n ∇f!!(M, X, p)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_f(M, p)\n X = zero_vector(M, p)\n return grad_f!(M, X, p)\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_GD_state = gradient_descent(M_rb, f, grad_f!, p0;\n evaluation=InplaceEvaluation(),\n debug=[debug_vec...,10^6],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n record=[:Iteration, :Cost],\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 1000000 F(x): 1.3571e-09 |δp|: 9.1006e-01 | |grad f|: 1.974939e-04\n# 2000000 F(x): 2.7921e-18 |δp|: 3.6836e-05 | |grad f|: 9.240792e-09\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 2443750 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Euclidean-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Euclidean Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"For the convex case, we have to first introduce the two parts of the cost.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"f1(M, p; a=100, b=1) = a * (p[1]^2 - p[2])^2;\nf2(M, p; a=100, b=1) = (p[1] - b[1])^2;\ng(M, p; a=100, b=1) = f1(M, p; a=a, b=b) + 2 * f2(M, p; a=a, b=b)\nh(M, p; a=100, b=1) = f2(M, p; a=a, b=b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and their (Euclidan) gradients","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function ∇h!(M, X, p; a=100, b=1)\n X[1] = 2*(p[1]-b)\n X[2] = 0\n return X\nend\nfunction ∇h(M, p; a=100, b=1)\n X = zero(p)\n ∇h!(M, X, p; a=a, b=b)\n return X\nend\nfunction ∇g!(M, X, p; a=100, b=1)\n X[1] = 4*a*(p[1]^2-p[2])*p[1] + 2*2*(p[1]-b)\n X[2] = -2*a*(p[1]^2-p[2])\n return X\nend\nfunction ∇g(M, p; a=100, b=1)\n X = zero(p)\n ∇g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"and we define for convenience","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docE_g(M, p) = g(M, p; a=a, b=b)\ndocE_f(M,p) = docE_g(M,p) - h(M, p; a=a, b=b)\ndocE_∇h!(M, X, p) = ∇h!(M, X, p; a=a, b=b)\ndocE_∇g!(M, X, p) = ∇g!(M, X, p; a=a, b=b)\nfunction docE_∇f!(M, X, p)\n Y = zero_vector(M, p)\n docE_∇g!(M, X, p)\n docE_∇h!(M, Y, p)\n X .-= Y\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we call the difference of convex algorithm on Eucldiean space ℝ^2.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"E_doc_state = difference_of_convex_algorithm(\n M, docE_f, docE_g, docE_∇h!, p0;\n gradient=docE_∇f!,\n grad_g = docE_∇g!,\n debug=[debug_vec..., 10^4],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_hess=nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \n# 10000 F(x): 2.9705e-09 |δp|: 1.3270e+00 | |grad f|: 1.388203e-04\n# 20000 F(x): 3.3302e-16 |δp|: 1.2173e-04 | |grad f|: 4.541087e-08\nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 26549 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping criterion\n | \n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 10000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#The-Riemannian-Difference-of-Convex","page":"Rosenbrock Metric","title":"The Riemannian Difference of Convex","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"We first have to again defined the gradients with respect to the new metric","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"function grad_h!(M, X, p; a=100, b=1)\n ∇h!(M, X, p; a=a, b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_h(M, p; a=100, b=1)\n X = zero(p)\n grad_h!(M, X, p; a=a, b=b)\n return X\nend\nfunction grad_g!(M, X, p; a=100, b=1)\n ∇g!(M, X, p; a=a,b=b)\n riemannian_gradient!(M, X, p, X)\n return X\nend\nfunction grad_g(M, p; a=100, b=1)\n X = zero(p)\n grad_g!(M, X, p; a=a, b=b)\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"While the cost of the subgradient can be infered automaticallty, we also have to provide the gradient of the sub problem. For X in h(p^(k)) the sunproblem top determine p^(k+1) reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatorname*argmin_pinmathcal M g(p) - langle X log_p^(k)prangle","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"for which usually the cost and gradient functions are computed automatically in the difference of convex algorithm. However, in our case first the closed form solution for the adjoint differential of the logaithmic map is complicated to compute and second the gradint can even be given in a nicer form. We can first simplify in our case with X = operatornamegrad h(p^(k)) that","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"phi(p) = g(p) - langle X log_p^(k)prangle\n= abigl( p_1^2-p_2bigr)^2\n + 2bigl(p_1-bbigr)^2 - 2(p^(k)_1-b)p_1 + 2(p^(k)_1-b)p^(k)_1","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"its Euclidean gradient reads","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"operatornamegradphi(p) =\n nabla varphi(p)\n = beginpmatrix\n 4a p_1(p_1^2-p_2) + 4(p_1-b) - 2(p^(k)_1-b)\n -2a(p_1^2-p_2)\n endpmatrix","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"where we can again employ the gradient conversion from before to obtain the Riemannian gradient.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"mutable struct SubGrad{P,T,V}\n pk::P\n Xk::T\n a::V\n b::V\nend\nfunction (ϕ::SubGrad)(M, p)\n X = zero_vector(M, p)\n ϕ(M, X, p)\n return X\nend\nfunction (ϕ::SubGrad)(M, X, p)\n X .= [\n 4 * ϕ.a * p[1] * (p[1]^2 - p[2]) + 4 * (p[1] - ϕ.b) - 2 * (ϕ.pk[1] - ϕ.b),\n -2 * ϕ.a * (p[1]^2 - p[2]),\n ]\n riemannian_gradient!(M, X, p, X) # convert\n return X\nend","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And in orer to update the subsolvers gradient correctly, we have to overwrite","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"set_manopt_parameter!(ϕ::SubGrad, ::Val{:p}, p) = (ϕ.pk .= p)\nset_manopt_parameter!(ϕ::SubGrad, ::Val{:X}, X) = (ϕ.Xk .= X)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we again introduce for ease of use","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"docR_g(M, p) = g(M, p; a=a, b=b)\ndocR_f(M, p) = docR_g(M, p) - h(M, p; a=a, b=b)\ndocR_grad_h!(M, X, p) = grad_h!(M, X, p; a=a, b=b)\ndocR_grad_g!(M, X, p) = grad_g!(M, X, p; a=a, b=b)\nfunction docR_grad_f!(M, X, p)\n Y = zero_vector(M, p)\n docR_grad_g!(M, X, p)\n docR_grad_h!(M, Y, p)\n X .-= Y\n return X\nend\ndocR_sub_grad = SubGrad(copy(M, p0), zero_vector(M, p0), a, b)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Then we can finally call the last of our four algorithms to compare, the difference of convex algorithm with the Riemannian metric.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R_doc_state = difference_of_convex_algorithm(\n M_rb, docR_f, docR_g, docR_grad_h!, p0;\n gradient=docR_grad_f!,\n grad_g = docR_grad_g!,\n debug=[debug_vec..., 10^6],\n evaluation=InplaceEvaluation(),\n record=[:Iteration, :Cost],\n stopping_criterion=StopAfterIteration(10^8) | StopWhenChangeLess(1e-16),\n sub_grad=docR_sub_grad,\n sub_hess = nothing, # Use gradient descent\n sub_stopping_criterion=StopAfterIteration(2000) | StopWhenGradientNormLess(1e-16),\n return_state=true,\n)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"Initial F(x): 7.2208e+03 \nThe algorithm performed a step with a change (0.0) less than 1.0e-16.\n\n# Solver state for `Manopt.jl`s Difference of Convex Algorithm\nAfter 1235 iterations\n\n## Parameters\n* sub solver state:\n | # Solver state for `Manopt.jl`s Gradient Descent\n | After 2000 iterations\n | \n | ## Parameters\n | * retraction method: ExponentialRetraction()\n | \n | ## Stepsize\n | ArmijoLinesearch() with keyword parameters\n | * initial_stepsize = 1.0\n | * retraction_method = ExponentialRetraction()\n | * contraction_factor = 0.95\n | * sufficient_decrease = 0.1\n | \n | ## Stopping criterion\n | \n | Stop When _one_ of the following are fulfilled:\n | Max Iteration 2000: reached\n | |grad f| < 1.0e-16: not reached\n | Overall: reached\n | This indicates convergence: No\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 100000000: not reached\n |Δp| < 1.0e-16: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Debug\n :Iteration = [(:Iteration, \"# %-8d \"), (:Cost, \"F(x): %1.4e\"), \" \", (:Change, \"|δp|: %1.4e | \"), (:GradientNorm, \"|grad f|: %1.6e\"), \"\\n\", 1000000]\n :Stop = :Stop\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Comparison-in-Iterations","page":"Rosenbrock Metric","title":"Comparison in Iterations","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"fig = plot(;\n legend=:topright,\n xlabel=raw\"Iterations $k$ (log. scale)\", ylabel=raw\"Cost $f(x)$ (log. scale)\",\n yaxis=:log,\n ylims=(1e-16, 5*1e5),\n xaxis=:log,\n xlims=(1,10^8),\n)\nscatter!(fig, [1,], [f(M,p0),], label=raw\"$f(p_0)$\", markercolor=grey)\negi = get_record(Eucl_GD_state, :Iteration, :Iteration)[1:10000:end] #5308 entries\negc = get_record(Eucl_GD_state, :Iteration, :Cost)[1:10000:end] #5308 entries\nplot!(fig, egi, egc, color=teal, label=\"Euclidean GD\")\n#\nrgi = get_record(R_GD_state, :Iteration, :Iteration)[1:1000:end] # 2444 entries\nrgc = get_record(R_GD_state, :Iteration, :Cost)[1:1000:end] # 2444 entries\nplot!(fig, rgi, rgc, color=indigo, label=\"Riemannian GD\")\n#\nedi = get_record(E_doc_state, :Iteration, :Iteration) #26549 entries\nedc = get_record(E_doc_state, :Iteration, :Cost) #26549 entries\nplot!(fig, edi, edc, color=sand, label=\"Euclidean DoC\")\n#\nrdi = get_record(R_doc_state, :Iteration, :Iteration) # 1235 entries\nrdc = get_record(R_doc_state, :Iteration, :Cost) # 1235 entries\nplot!(fig, rdi, rdc, color=green, label=\"Riemannian DoC\")","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"(Image: )","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"And we can see that using difference of convex outperforms gradient descent, and using the Riemannian approach required less iterations than their Euclidean counterparts.","category":"page"},{"location":"examples/Difference-of-Convex-Rosenbrock/#Literature","page":"Rosenbrock Metric","title":"Literature","text":"","category":"section"},{"location":"examples/Difference-of-Convex-Rosenbrock/","page":"Rosenbrock Metric","title":"Rosenbrock Metric","text":"R. Bergmann, O. P. Ferreira, E. M. Santos and J. C. Souza. The difference of convex algorithm on Hadamard manifolds. Preprint (2023), arXiv:2112.05250.\n\n\n\n","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"EditURL = \"https://github.com/JuliaManifolds/Manopt.jl/blob/master/Changelog.md\"","category":"page"},{"location":"changelog/#Changelog","page":"Changelog","title":"Changelog","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"All notable changes to this Julia package will be documented in this file.","category":"page"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.","category":"page"},{"location":"changelog/#[0.1.8]-–-12/06/2024","page":"Changelog","title":"[0.1.8] – 12/06/2024","text":"","category":"section"},{"location":"changelog/#Changed","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"use range compatible with Julia 1.6 and hence lower the compatibility entry for Julia again.","category":"page"},{"location":"changelog/#[0.1.7]-–-07/06/2024","page":"Changelog","title":"[0.1.7] – 07/06/2024","text":"","category":"section"},{"location":"changelog/#Changed-2","page":"Changelog","title":"Changed","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"make Manopt.jl a weak dependency and load functions that require parts of it only load as an extension. This makes it easier to use the examples in the tests of Manopt itself.","category":"page"},{"location":"changelog/#[0.1.6]-–-22/03/2024","page":"Changelog","title":"[0.1.6] – 22/03/2024","text":"","category":"section"},{"location":"changelog/#Added","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Hyperparameter optimization example.","category":"page"},{"location":"changelog/#[0.1.3]-–-11/12/2023","page":"Changelog","title":"[0.1.3] – 11/12/2023","text":"","category":"section"},{"location":"changelog/#Added-2","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Total variation Minimization cost, proxes, and an example\nBézier curve cost, gradients, and an example.","category":"page"},{"location":"changelog/#[0.1.3]-–-16/09/2023","page":"Changelog","title":"[0.1.3] – 16/09/2023","text":"","category":"section"},{"location":"changelog/#Added-3","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rayleigh Quotient functions added\nan example illustrating Euclidean gradient/HEssian conversion\nAdd Literature with DocumenterCitations","category":"page"},{"location":"changelog/#[0.1.2]-–-13/06/2023","page":"Changelog","title":"[0.1.2] – 13/06/2023","text":"","category":"section"},{"location":"changelog/#Added-4","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Update examples to use Quarto\nAdd DC examples","category":"page"},{"location":"changelog/#[0.1.1]-–-01/03/2023","page":"Changelog","title":"[0.1.1] – 01/03/2023","text":"","category":"section"},{"location":"changelog/#Added-5","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Rosenbrock function and examples","category":"page"},{"location":"changelog/#[0.1.0]-–-18/02/2023","page":"Changelog","title":"[0.1.0] – 18/02/2023","text":"","category":"section"},{"location":"changelog/#Added-6","page":"Changelog","title":"Added","text":"","category":"section"},{"location":"changelog/","page":"Changelog","title":"Changelog","text":"Setup the project to collect example objectives for Manopt.jl which are well-documented and well-tested\nSetup Documentation to provide one example Quarto file for every example objective to illustrate how to use them.","category":"page"},{"location":"examples/Bezier-curves/#Minimizing-the-Acceleration-of-Bézier-Curves-on-the-Sphere","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using Manifolds, Manopt, ManoptExamples","category":"page"},{"location":"examples/Bezier-curves/#Introduction","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Introduction","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Bézier Curves can be generalized to manifolds by generalizing the de Casteljau algorithm 📖 to work with geodesics instead of straight lines. An implementation in just a few lines as we demonstrated in [ABBR23] as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"function bezier(M::AbstractManifold, t, pts::NTuple)\n p = bezier(M, t, pts[1:(end - 1)])\n q = bezier(M, t, pts[2:end])\n return shortest_geodesic(M, p, q, t)\nend\nfunction bezier(M::AbstractManifold, t, pts::NTuple{2})\n return shortest_geodesic(M, pts[1], pts[2], t)\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"which is also available within this package as de_Casteljau using a simple BezierSegment struct to make it easier to also discuss the case where we compose a set of segments into a composite Bézier course.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"In the following we will need the following packages and functions. They are documented in the section on Bezier Curves and were derived in [BG18] based on [PN07].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"using ManoptExamples:\n artificial_S2_composite_Bezier_curve,\n BezierSegment,\n de_Casteljau,\n get_Bezier_degrees,\n get_Bezier_inner_points,\n get_Bezier_junctions,\n get_Bezier_junction_tangent_vectors,\n get_Bezier_points,\n get_Bezier_segments,\n grad_L2_acceleration_Bezier,\n L2_acceleration_Bezier","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"This notebook reproduces the example form Section 5.2 in [BG18].","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The following image illustrates how the de-Casteljau algorithm works for one segment.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: A Bezier segment and illustration of the de-Casteljau algorithm)","category":"page"},{"location":"examples/Bezier-curves/#Approximating-data-by-a-curve-with-minimal-accelartion","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Approximating data by a curve with minimal accelartion","text":"","category":"section"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We first load our example data","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"M = Sphere(2)\nB = artificial_S2_composite_Bezier_curve()\ndata_points = get_Bezier_junctions(M, B)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Which is the following cure, which clearly starts and ends slower than its speed in the middle, which can be seen by the increasing length of the gangent vectors in the middle.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The original curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We continue to recude the points, since we “know” sme points due to the C^1 property: the second to last control point of the first segment b_02, the joint junction point connecting both segments b_03=b_10 and the second control point b_11 of the second segment have to line in the tangent space of the joint junction point. Hence we only have to store one of the control points.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"We can use this reduced form as the variable to optimize and the one from the data as our initial point.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"pB = get_Bezier_points(M, B, :differentiable)\nN = PowerManifold(M, NestedPowerRepresentation(), length(pB))","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"PowerManifold(Sphere(2, ℝ), NestedPowerRepresentation(), 8)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we further define the acceleration of the curve as our cost function, where we discretize the acceleration at a certain set of points and set the λ=10","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"curve_samples = [range(0, 3; length=101)...] # sample curve for the gradient\nλ = 10.0\nfunction f(M, pB)\n return L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend\nfunction grad_f(M, pB)\n return grad_L2_acceleration_Bezier(\n M.manifold, pB, get_Bezier_degrees(M.manifold, B), curve_samples, λ, data_points\n )\nend","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"grad_f (generic function with 1 method)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Then we can optimize","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"x0 = pB\npB_opt = gradient_descent(\n N,\n f,\n grad_f,\n x0;\n stepsize=ArmijoLinesearch(N;\n initial_stepsize=1.0,\n retraction_method=ExponentialRetraction(),\n contraction_factor=0.5,\n sufficient_decrease=0.001,\n ),\n stopping_criterion=StopWhenChangeLess(1e-5) |\n StopWhenGradientNormLess(1e-7) |\n StopAfterIteration(300),\n debug=[\n :Iteration,\n \" | \",\n :Cost,\n \" | \",\n DebugGradientNorm(),\n \" | \",\n DebugStepsize(),\n \" | \",\n :Change,\n \"\\n\",\n 25,\n :Stop,\n ],\n);","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"Initial | f(x): 10.647244 | | | \n# 25 | f(x): 2.667564 | |grad f(p)|:0.890845571434862 | s:0.01326670131422904 | Last Change: 0.763281\n# 50 | f(x): 2.650064 | |grad f(p)|:0.05536989605165708 | s:0.05306680525691616 | Last Change: 0.081780\n# 75 | f(x): 2.649707 | |grad f(p)|:0.02135638585837997 | s:0.01326670131422904 | Last Change: 0.011590\n# 100 | f(x): 2.649700 | |grad f(p)|:0.0012887575647752057 | s:0.05306680525691616 | Last Change: 0.001745\nThe algorithm performed a step with a change (2.9063044690733034e-7) less than 1.0e-5.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"And we can again look at the result","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"The result looks as","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"(Image: The resulting curve)","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"where all control points are evenly spaced and we hence have less acceleration as the final cost compared to the initial one indicates. Note that the cost is not zero, since we always have a tradeoff between approximating the initial junctinons (data points) and minimizing the acceleration.","category":"page"},{"location":"examples/Bezier-curves/","page":"Minimizing the Acceleration of Bézier Curves on the Sphere","title":"Minimizing the Acceleration of Bézier Curves on the Sphere","text":"S. D. Axen, M. Baran, R. Bergmann and K. Rzecki. Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds. ACM Transactions on Mathematical Software (2023), arXiv:2021.08777.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nT. Popiel and L. Noakes. Bézier curves and C^2 interpolation in Riemannian manifolds. Journal of Approximation Theory 148, 111–127 (2007).\n\n\n\n","category":"page"},{"location":"data/#Data-sets","page":"Data","title":"Data sets","text":"","category":"section"},{"location":"data/#Signals-on-manifolds","page":"Data","title":"Signals on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_signals.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.Lemniscate-Tuple{Number}","page":"Data","title":"ManoptExamples.Lemniscate","text":"Lemniscate(t::Float; kwargs...)\nLemniscate(n::integer; interval=[0.0, 2π], kwargs...)\n\ngenerate the Lemniscate of Bernoulli as a curve on a manifold, by generating the curve emplying the keyword arguments below.\n\nTo be precise on the manifold M we use the tangent space at p and generate the curve\n\nγ(t) fracasin^2(t) + 1 beginpmatrix cos(t) cos(t)sin(t) endpmatrix\n\nin the plane spanned by X and Y in the tangent space. Note that this curve is 2π-periodic and a is the half-width of the curve.\n\nTo reproduce the first examples from [BBSW16] as a default, on the sphere p defaults to the North pole.\n\nTHe second variant generates n points equispaced in ìnterval` and calls the first variant.\n\nKeywords\n\nmanifold - (Sphere(2)) the manifold to build the lemniscate on\np - ([0.0, 0.0, 1.0] on the sphere, `rand(M) else) the center point of the Lemniscate\na – (π/2.0) half-width of the Lemniscate\nX – ([1.0, 0.0, 0.0] for the 2-sphere with default p, the first DefaultOrthonormalBasis() vector otherwise) first direction for the plane to define the Lemniscate in, unit vector recommended.\nY – ([0.0, 1.0, 0.0] if p is the default, the second DefaultOrthonormalBasis() vector otherwise) second direction for the plane to define the Lemniscate in, unit vector orthogonal to X recommended.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_signal","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal([pts=500])\n\ngenerate a real-valued signal having piecewise constant, linear and quadratic intervals with jumps in between. If the resulting manifold the data lives on, is the Circle the data is also wrapped to ``[BLSW14].\n\nOptional\n\npts: (500) number of points to sample the function\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S1_signal-Tuple{Real}","page":"Data","title":"ManoptExamples.artificial_S1_signal","text":"artificial_S1_signal(x)\n\nevaluate the example signal f(x) x 01, of phase-valued data introduces in Sec. 5.1 of [BLSW14] for values outside that interval, this Signal is missing.\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S1_slope_signal","page":"Data","title":"ManoptExamples.artificial_S1_slope_signal","text":"artificial_S1_slope_signal([pts=500, slope=4.])\n\nCreates a Signal of (phase-valued) data represented on the Circle with increasing slope.\n\nOptional\n\npts: (500) number of points to sample the function.\nslope: (4.0) initial slope that gets increased afterwards\n\nThis data set was introduced for the numerical examples in [BLSW14]\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_composite_Bezier_curve-Tuple{}","page":"Data","title":"ManoptExamples.artificial_S2_composite_Bezier_curve","text":"artificial_S2_composite_Bezier_curve()\n\nGenerate a composite Bézier curve on the [BG18].\n\nIt consists of 4 egments connecting the points\n\nmathbf d_0 = beginpmatrix 001endpmatrixquad\nmathbf d_1 = beginpmatrix 0-10endpmatrixquad\nmathbf d_2 = beginpmatrix -100endpmatrixtext and \nmathbf d_3 = beginpmatrix 00-1endpmatrix\n\nwhere instead of providing the two center control points explicitly we provide them as velocities from the corresponding points, such thtat we can directly define the curve to be C^1.\n\nWe define\n\nX_0 = fracπ8sqrt2beginpmatrix1-10endpmatrixquad\nX_1 = fracπ4sqrt2beginpmatrix101endpmatrixquad\nX_2 = fracπ4sqrt2beginpmatrix01-1endpmatrixtext and \nX_3 = fracπ8sqrt2beginpmatrix-110endpmatrix\n\nwhere we defined each X_i in T_d_imathbb S^2. We defined three BezierSegments\n\nof cubic Bézier curves as follows\n\nbeginalign*\nb_00 = d_0 quad b_10 = exp_d_0X_0 quad b_20 = exp_d_1X_1 quad b_30 = d_1\nb_01 = d_1 quad b_11 = exp_d_1(-X_1) quad b_21 = exp_d_2X_2 quad b_31 = d_2\nb_02 = d_2 quad b_11 = exp_d_2(-X_2) quad b_22 = exp_d_3X_3 quad b_32 = d_3\nendalign*\n\n\n\n\n\n","category":"method"},{"location":"data/#images-on-manifolds","page":"Data","title":"images on manifolds","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"Modules = [ManoptExamples]\nPages = [\"data/artificial_images.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"data/#ManoptExamples.artificialIn_SAR_image-Tuple{Integer}","page":"Data","title":"ManoptExamples.artificialIn_SAR_image","text":"artificialIn_SAR_image([pts=500])\n\ngenerate an artificial InSAR image, i.e. phase valued data, of size pts x pts points.\n\nThis data set was introduced for the numerical examples in [BLSW14].\n\n\n\n\n\n","category":"method"},{"location":"data/#ManoptExamples.artificial_S2_rotation_image","page":"Data","title":"ManoptExamples.artificial_S2_rotation_image","text":"artificial_S2_rotation_image([pts=64, rotations=(.5,.5)])\n\nCreate an image with a rotation on each axis as a parametrization.\n\nOptional Parameters\n\npts: (64) number of pixels along one dimension\nrotations: ((.5,.5)) number of total rotations performed on the axes.\n\nThis dataset was used in the numerical example of Section 5.1 of [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_image","page":"Data","title":"ManoptExamples.artificial_S2_whirl_image","text":"artificial_S2_whirl_image([pts::Int=64])\n\nGenerate an artificial image of data on the 2 sphere,\n\nArguments\n\npts: (64) size of the image in pts×pts pixel.\n\nThis example dataset was used in the numerical example in Section 5.5 of [LNPS17]\n\nIt is based on artificial_S2_rotation_image extended by small whirl patches.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_S2_whirl_patch","page":"Data","title":"ManoptExamples.artificial_S2_whirl_patch","text":"artificial_S2_whirl_patch([pts=5])\n\ncreate a whirl within the pts×pts patch of Sphere(@ref)(2)-valued image data.\n\nThese patches are used within artificial_S2_whirl_image.\n\nOptional Parameters\n\npts: (5) size of the patch. If the number is odd, the center is the north pole.\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image","page":"Data","title":"ManoptExamples.artificial_SPD_image","text":"artificial_SPD_image([pts=64, stepsize=1.5])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with a jump of size stepsize.\n\nThis dataset was used in the numerical example of Section 5.2 of [BBSW16].\n\n\n\n\n\n","category":"function"},{"location":"data/#ManoptExamples.artificial_SPD_image2","page":"Data","title":"ManoptExamples.artificial_SPD_image2","text":"artificial_SPD_image2([pts=64, fraction=.66])\n\ncreate an artificial image of symmetric positive definite matrices of size pts×pts pixel with right hand side fraction is moved upwards.\n\nThis data set was introduced in the numerical examples of Section of [BPS16]\n\n\n\n\n\n","category":"function"},{"location":"data/#Literature","page":"Data","title":"Literature","text":"","category":"section"},{"location":"data/","page":"Data","title":"Data","text":"M. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann and P.-Y. Gousenbourger. A variational model for data fitting on manifolds by minimizing the acceleration of a Bézier curve. Frontiers in Applied Mathematics and Statistics 4 (2018), arXiv:1807.10090.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nR. Bergmann, J. Persch and G. Steidl. A parallel Douglas Rachford algorithm for minimizing ROF-like functionals on images with values in symmetric Hadamard manifolds. SIAM Journal on Imaging Sciences 9, 901–937 (2016), arXiv:1512.02814.\n\n\n\nF. Laus, M. Nikolova, J. Persch and G. Steidl. A nonlocal denoising algorithm for manifold-valued images using second order statistics. SIAM Journal on Imaging Sciences 10, 416–448 (2017).\n\n\n\n","category":"page"},{"location":"examples/Robust-PCA/#The-Robust-PCA-computed-on-the-Grassmann-manifold","page":"Robust PCA","title":"The Robust PCA computed on the Grassmann manifold","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Ronny BergmannLaura Weigl 2023-07-02","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For this example we first load the necessary packages.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"using LinearAlgebra, Random, Statistics\nusing Manifolds, Manopt, ManoptExamples\nusing Plots\nRandom.seed!(42)","category":"page"},{"location":"examples/Robust-PCA/#Computing-a-Robust-PCA","page":"Robust PCA","title":"Computing a Robust PCA","text":"","category":"section"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For a given matrix D ℝ^dn whose columns represent points in ℝ^d, a matrix p ℝ^dm is computed for a given dimension m n: p represents an ONB of ℝ^dm such that the column space of p approximates the points (columns of D), i.e. the vectors D_i as well as possible.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We compute p as a minimizer over the Grassmann manifold of the cost function:","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"beginsplit\nf(p)\n = frac1nsum_i=1^noperatornamedist(D_i operatornamespan(p))\n\n = frac1n sum_i=1^nlVert pp^TD_i - D_irVert\nendsplit","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The output cost represents the average distance achieved with the returned p, an orthonormal basis (or a point on the Stiefel manifold) representing the subspace (a point on the Grassmann manifold). Notice that norms are not squared, so we have a robust cost function. This means that f is nonsmooth, therefore we regularize with a pseudo-Huber loss function of smoothing parameter ε.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f_ϵ(p) = frac1n sum_i=1^nℓ_ϵ(lVert pp^mathrmTD_i - D_irVert)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"where ℓ_ϵ(x) = sqrtx^2 + ϵ^2 - ϵ.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The smoothing parameter is iteratively reduced in the final optimisation runs(with warm starts).","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"First, we generate random data. For illustration purposes we take points in mathbb R^2 and m=1, that is we aim to find a robust regression line.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"n = 40\nd = 2\noutliers = 15\ndata = randn(d, 1) * (1:n)' + 0.05 * randn(2, n) .* [1:n 1:n]'\n# Outliers:\npermute = shuffle(1:size(data, 2))'\ndata[:, permute[1:outliers]] = 30 * randn(2, outliers)\n# We are looking for a line here so we set\nm = 1","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We use the Manopt toolbox to optimize the regularized cost function over the Grassmann manifold. To do this, we first need to define the problem structure.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"M = Grassmann(d,m);","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"For the initial matrix p_0 we use classical PCA via singular value decomposition. Thus, we use the first d left singular vectors.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Then, we compute an optimum of the cost function over the Grassmann manifold. We use a trust-region method which is implemented in Manopt.jl.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Furthermore the cost and gradient are implemented in ManoptExamples.jl. Since these are Huber regularized, both functors have the ϵ as a parameter. To compute the Riemannian gradient we first compute the Euclidian gradient. Afterwards it is projected onto the tangent space by using the orthogonal projection pp^T - I, which converts the Euclidean to the Riemannian gradient.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"The trust-region method also requires the Hessian Matrix. By using ApproxHessianFiniteDifference using a finite difference scheme we get an approximation of the Hessian Matrix.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"We run the procedure several times, where the smoothing parameter ε is reduced iteratively.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ε = 1.0\niterations = 6\nreduction = 0.5\nU, S, V = svd(data);\np0 = U[:, 1:m]","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"2×1 Matrix{Float64}:\n -0.7494248652139397\n 0.6620893983436593","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Let’s generate the cost and gradient we aim to use here","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f = ManoptExamples.RobustPCACost(M, data, ε)\ngrad_f = ManoptExamples.RobustPCAGrad!!(M, data, ε)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"ManoptExamples.RobustPCAGrad!!{Matrix{Float64}, Float64}([9.537606557855465 1.6583418797018163 … 30.833523701909474 30.512999245062304; -45.34339972619071 -1.7120433539256108 … -35.85943792458936 -32.93976007215313], 1.0, [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"and check the initial cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f(M, p0)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.430690947905521","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Now we iterate the opimization with reducing ε after every iteration, which we update in f and grad_f.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"q = copy(M, p0)\nεi = ε\nfor i in 1:iterations\n f.ε = εi\n grad_f.ε = εi\n global q = trust_regions(\n M,\n f,\n grad_f,\n ApproxHessianFiniteDifference(\n M, q, f;\n vector_transport_method=ProjectionTransport(),\n retraction_method=PolarRetraction(),\n ),\n q;\n (project!)=project!,\n )\n global εi *= reduction\nend","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"When finally setting ε we can investigate the final cost","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"f.ε = 0.0\nf(M, q)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"9.412961981726742","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"Finally, the results are presented visually. The data points are visualized in a scatter plot. The result of the robust PCA and (for comparison) the standard SVD solution are plotted as straight lines.","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"fig = plot(data[1, :], data[2, :]; seriestype=:scatter, label=\"Data points\");\nplot!(\n fig,\n q[1] * [-1, 1] * 100,\n q[2] * [-1, 1] * 100;\n linecolor=:red,\n linewidth=2,\n label=\"Robust PCA\",\n);\nplot!(\n fig,\n p0[1] * [-1, 1] * 100,\n p0[2] * [-1, 1] * 100;\n xlims=1.1 * [minimum(data[1, :]), maximum(data[1, :])],\n ylims=1.1 * [minimum(data[2, :]), maximum(data[2, :])],\n linewidth=2,\n linecolor=:black,\n label=\"Standard SVD\",\n)","category":"page"},{"location":"examples/Robust-PCA/","page":"Robust PCA","title":"Robust PCA","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Total-Variation/#Total-Variation-Minimization","page":"Total Variation","title":"Total Variation Minimization","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Ronny Bergmann 2023-06-06","category":"page"},{"location":"examples/Total-Variation/#Introduction","page":"Total Variation","title":"Introduction","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Total Variation denoising is an optimization problem used to denoise signals and images. The corresponding (Euclidean) objective is often called Rudin-Osher-Fatemi (ROF) model based on the paper [ROF92].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This was generalized to manifolds in [WDS14]. In this short example we will look at the ROF model for manifold-valued data, its generalizations, and how they can be solved using Manopt.jl.","category":"page"},{"location":"examples/Total-Variation/#The-manifold-valued-ROF-model","page":"Total Variation","title":"The manifold-valued ROF model","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Generalizing the ROF model to manifolds can be phrased as follows: Given a (discrete) signal on a manifold s = (s_i)_i=1^N in mathbb M^n of length n in mathbb N, we usually assume that this signal might be noisy. For the (Euclidean) ROF model we assume that the noise is Gaussian. Then variational models for denoising usually consist of a data term D(ps) to “stay close to” s and a regularizer R(p). For TV regularization the data term is the squared distance and the regularizer models that without noise, neighboring values are close. We obtain","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"operatorname*argmin_pinmathcal M^n\nf(p)\nqquad\nf(p) = D(ps) + α R(p) = sum_i=1^n d_mathcal M^2(s_ip_i) + αsum_i=1^n-1 d_mathcal M(p_ip_i+1)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"where α 0 is a weight parameter.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"The challenge here is that most classical algorithm, like gradient descent or Quasi Newton, assume the cost f(p) to be smooth such that the gradient exists at every point. In our setting that is not the case since the distacen is not differentiable for any p_i=p_i+1. So we have to use another technique.","category":"page"},{"location":"examples/Total-Variation/#The-Cyclic-Proximal-Point-algorithm","page":"Total Variation","title":"The Cyclic Proximal Point algorithm","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"If the cost consists of a sum of functions, where each of the proximal maps is “easy to evaluate”, for best of cases in closed form, we can “apply the proximal maps in a cyclic fashion” and optain the Cyclic Proximal Point Algorithm [Bac14].","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Both for the distance and the squared distance, we have generic implementations; since this happens in a cyclic manner, there is also always one of the arguments involved in the prox and never both. We can improve the performance slightly by computing all proes in parallel that do not interfer. To be precise we can compute first all proxes of distances in the regularizer that start with an odd index in parallel. Afterwards all that start with an even index.","category":"page"},{"location":"examples/Total-Variation/#The-Optimsation","page":"Total Variation","title":"The Optimsation","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Manifolds, Manopt, ManoptExamples, ManifoldDiff\nusing ManifoldDiff: prox_distance\nusing ManoptExamples: prox_Total_Variation\nn = 500 #Signal length\nσ = 0.2 # amount of noise\nα = 0.5# in the TV model","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We define a few colors","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"using Colors, NamedColors, ColorSchemes, Plots, Random\ndata_color = RGBA{Float64}(colorant\"black\")\nlight_color = RGBA{Float64}(colorant\"brightgrey\")\nrecon_color = RGBA{Float64}(colorant\"vibrantorange\")\nnoisy_color = RGBA{Float64}(colorant\"vibrantteal\")","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"And we generate our data on the Circle, since that is easy to plot and nice to compare to the Euclidean case of a real-valued signal.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Random.seed!(23)\nM = Circle()\nN = PowerManifold(M, n)\ndata = ManoptExamples.artificial_S1_signal(n)\ns = [exp(M, d, rand(M; vector_at=d, σ=0.2)) for d in data]\nt = range(0.0, 1.0; length=n)\nscene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=noisy_color,\n markerstrokecolor=noisy_color,\n lab=\"noisy\",\n)\nyticks!(\n [-π, -π / 2, 0, π / 2, π],\n [raw\"$-\\pi$\", raw\"$-\\frac{\\pi}{2}$\", raw\"$0$\", raw\"$\\frac{\\pi}{2}$\", raw\"$\\pi$\"],\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"As mentioned above, total variation now minimized different neighbors – while keeping jumps if the are large enough. One notable difference between Euclidean and Cyclic data is, that the y-axis is in our case periodic, hence the first jump is actually not a jump but a “linear increase” that “wraps around” and the second large jump –or third overall– is actually only as small as the second jump.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Defining cost and the proximal maps, which are actually 3 proxes to be precise.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"f(N, p) = ManoptExamples.L2_Total_Variation(N, s, α, p)\nproxes_f = ((N, λ, p) -> prox_distance(N, λ, s, p, 2), (N, λ, p) -> prox_Total_Variation(N, α * λ, p))","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We run the algorithm","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"o = cyclic_proximal_point(\n N,\n f,\n proxes_f,\n s;\n λ=i -> π / (2 * i),\n debug=[\n :Iteration,\n \" | \",\n DebugProximalParameter(),\n \" | \",\n :Cost,\n \" | \",\n :Change,\n \"\\n\",\n 1000,\n :Stop,\n ],\n record=[:Iteration, :Cost, :Change, :Iterate],\n return_state=true,\n);","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Initial | | f(x): 59.187445 | \n# 1000 | λ:0.0015707963267948967 | f(x): 13.963912 | Last Change: 1.773283\n# 2000 | λ:0.0007853981633974483 | f(x): 13.947124 | Last Change: 0.011678\n# 3000 | λ:0.0005235987755982988 | f(x): 13.941538 | Last Change: 0.003907\n# 4000 | λ:0.00039269908169872416 | f(x): 13.938748 | Last Change: 0.001957\n# 5000 | λ:0.0003141592653589793 | f(x): 13.937075 | Last Change: 0.001175\nThe algorithm reached its maximal number of iterations (5000).","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can see that the cost reduces nicely. Let’s extract the result an the recorded values","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"recon = get_solver_result(o)\nrecord = get_record(o)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We get","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"scene = scatter(\n t,\n data;\n markercolor=data_color,\n markerstrokecolor=data_color,\n markersize=2,\n lab=\"original\",\n)\nscatter!(\n scene,\n t,\n s;\n markersize=2,\n markercolor=light_color,\n markerstrokecolor=light_color,\n lab=\"noisy\",\n)\nscatter!(\n scene,\n t,\n recon;\n markersize=2,\n markercolor=recon_color,\n markerstrokecolor=recon_color,\n lab=\"reconstruction\",\n)","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"(Image: )","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Which contains the usual stair casing one expects for TV regularization, but here in a “cyclic manner”","category":"page"},{"location":"examples/Total-Variation/#Outlook","page":"Total Variation","title":"Outlook","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"We can generalize the total variation also to a second order total variation. Again intuitively, while TV prefers constant areas, the operatornameTV_2 yields a cost 0 for anything linear, which on manifolds can be generalized to equidistant on a geodesic [BBSW16]. Here we can again derive proximal maps, which for the circle again have a closed form solutoin [BLSW14] but on general manifolds these have again to be approximated.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Another extension for both first and second order TV is to apply this for manifold-valued images S = (S_ij)_ij=1^mn in mathcal M^mn, where the distances in the regularizer are then used in both the first dimension i and the second dimension j in the data.","category":"page"},{"location":"examples/Total-Variation/#Technical-details","page":"Total Variation","title":"Technical details","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"This version of the example was generated with the following package versions.","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Pkg.status()","category":"page"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"Status `~/work/ManoptExamples.jl/ManoptExamples.jl/examples/Project.toml`\n [6e4b80f9] BenchmarkTools v1.5.0\n [35d6a980] ColorSchemes v3.25.0\n [5ae59095] Colors v0.12.11\n [7073ff75] IJulia v1.24.2\n [8ac3fa9e] LRUCache v1.6.1\n [d3d80556] LineSearches v7.2.0\n [af67fdf4] ManifoldDiff v0.3.10\n [1cead3c2] Manifolds v0.9.18\n [3362f125] ManifoldsBase v0.15.10\n [0fc0a36d] Manopt v0.4.63\n [5b8d5e80] ManoptExamples v0.1.7 `..`\n [51fcb6bd] NamedColors v0.2.2\n [91a5bcdd] Plots v1.40.4\n [6099a3de] PythonCall v0.9.20","category":"page"},{"location":"examples/Total-Variation/#Literature","page":"Total Variation","title":"Literature","text":"","category":"section"},{"location":"examples/Total-Variation/","page":"Total Variation","title":"Total Variation","text":"M. Bačák. Computing medians and means in Hadamard spaces. SIAM Journal on Optimization 24, 1542–1566 (2014), arXiv:1210.2145.\n\n\n\nM. Bačák, R. Bergmann, G. Steidl and A. Weinmann. A second order non-smooth variational model for restoring manifold-valued images. SIAM Journal on Scientific Computing 38, A567–A597 (2016), arXiv:1506.02409.\n\n\n\nR. Bergmann, F. Laus, G. Steidl and A. Weinmann. Second order differences of cyclic data and applications in variational denoising. SIAM Journal on Imaging Sciences 7, 2916–2953 (2014), arXiv:1405.5349.\n\n\n\nL. I. Rudin, S. Osher and E. Fatemi. Nonlinear total variation based noise removal algorithms. Physica D: Nonlinear Phenomena 60, 259–268 (1992).\n\n\n\nA. Weinmann, L. Demaret and M. Storath. Total variation regularization for manifold-valued data. SIAM Journal on Imaging Sciences 7, 2226–2257 (2014).\n\n\n\n","category":"page"},{"location":"examples/Rosenbrock/#The-Rosenbrock-Function","page":"Rosenbrock","title":"The Rosenbrock Function","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Ronny Bergmann 2023-01-03","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"After loading the necessary packages","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"using Manifolds, Manopt, ManoptExamples\nusing Plots","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We fix the parameters for the 📖 Rosenbrock (where the wikipedia page has a slightly different parameter naming).","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"a = 100.0\nb = 1.0\np0 = [1/10, 2/10]","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which is defined on mathbb R^2, so we need","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"M = ℝ^2","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Euclidean(2; field=ℝ)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and can then generate both the cost and the gradient","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f = ManoptExamples.RosenbrockCost(M; a=a, b=b)\ngrad_f = ManoptExamples.RosenbrockGradient!!(M; a=a, b=b)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"ManoptExamples.RosenbrockGradient!!{Float64}(100.0, 1.0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"For comparison, we look at the initial cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, p0)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"4.42","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And to illustrate, we run two small solvers with their default settings as a comparison.","category":"page"},{"location":"examples/Rosenbrock/#Gradient-Descent","page":"Rosenbrock","title":"Gradient Descent","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We start with the gradient descent solver.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"Since we need the state anyways to access the record, we also get from the return_state=true a short summary of the solver run.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_state = gradient_descent(M, f, grad_f, p0; record = [:Iteration, :Cost], return_state=true)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"From the summary we see, that the gradient is not yet small enough, but we hit the 200 iterations (default) iteration limit. Collecting the cost recording and printing the final cost","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"gd_x = get_record(gd_state, :Iteration, :Iteration)\ngd_y = get_record(gd_state, :Iteration, :Cost)\nf(M, get_solver_result(gd_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.10562873187751265","category":"page"},{"location":"examples/Rosenbrock/#Quasi-Newton","page":"Rosenbrock","title":"Quasi Newton","text":"","category":"section"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"We can improve this using the quasi Newton algorithm","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_state = quasi_Newton(M, f, grad_f, p0;\n record = [:Iteration, :Cost], return_state=true\n)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"# Solver state for `Manopt.jl`s Quasi Newton Method\nAfter 26 iterations\n\n## Parameters\n* direction update: limited memory InverseBFGS (size 2), projections, and ParallelTransport() as vector transport.\n* retraction method: ExponentialRetraction()\n* vector transport method: ParallelTransport()\n\n## Stepsize\nWolfePowellLinesearch(DefaultManifold(), 0.0001, 0.999) with keyword arguments\n * retraction_method = ExponentialRetraction()\n * vector_transport_method = ParallelTransport()\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 1000: not reached\n |grad f| < 1.0e-6: reached\nOverall: reached\nThis indicates convergence: Yes\n\n## Record\n(Iteration = RecordGroup([RecordIteration(), RecordCost()]),)","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"And we see it stops far earlier, after 45 Iterations. We again collect the recorded values","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"qn_x = get_record(qn_state, :Iteration, :Iteration)\nqn_y = get_record(qn_state, :Iteration, :Cost)\nf(M, get_solver_result(qn_state))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"1.4404666436813376e-18","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"and see that the final value is close to the one of the minimizer","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"f(M, ManoptExamples.minimizer(f))","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"0.0","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"which we also see if we plot the recorded cost.","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"fig = plot(gd_x, gd_y; linewidth=1, label=\"Gradient Descent\");\nplot!(fig, qn_x, qn_y; linewidth=1, label=\"Quasi Newton\")","category":"page"},{"location":"examples/Rosenbrock/","page":"Rosenbrock","title":"Rosenbrock","text":"(Image: Figure 1: The result of the robust PCA vs. SVD)","category":"page"},{"location":"examples/Riemannian-mean/#The-Riemannian-Center-of-Mass-(mean)","page":"Riemannian Mean","title":"The Riemannian Center of Mass (mean)","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Ronny Bergmann 2023-07-02","category":"page"},{"location":"examples/Riemannian-mean/#Preliminary-Notes","page":"Riemannian Mean","title":"Preliminary Notes","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Each of the example objectives or problems stated in this package should be accompanied by a Quarto notebook that illustrates their usage, like this one.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For this first example, the objective is a very common one, for example also used in the Get started: optimize! tutorial of Manopt.jl.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"The second goal of this tutorial is to also illustrate how this package provides these examples, namely in both an easy-to-use and a performant way.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"There are two recommended ways to activate a reproducible environment. For most cases the recommended environment is the one in examples/. If you are programming a new, relatively short example, consider using the packages main environment, which is the same as having ManoptExamples.jl in development mode. this requires that your example does not have any (additional) dependencies beyond the ones ManoptExamples.jl has anyways.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"For registered versions of ManoptExamples.jl use the environment of examples/ and – under development – add ManoptExamples.jl in development mode from the parent folder. This should be changed after a new example is within a registered version to just use the examples/ environment again.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/Riemannian-mean/#Loading-packages-and-defining-data","page":"Riemannian Mean","title":"Loading packages and defining data","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Loading the necessary packages and defining a data set on a manifold","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"using ManoptExamples, Manopt, Manifolds, ManifoldDiff, Random\nRandom.seed!(42)\nM = Sphere(2)\nn = 100\nσ = π / 8\np = 1 / sqrt(2) * [1.0, 0.0, 1.0]\ndata = [exp(M, p, σ * rand(M; vector_at=p)) for i in 1:n];","category":"page"},{"location":"examples/Riemannian-mean/#Variant-1:-Using-the-functions","page":"Riemannian Mean","title":"Variant 1: Using the functions","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"We can define both the cost and gradient, RiemannianMeanCost and RiemannianMeanGradient!!, respectively. For their mathematical derivation and further explanations, we again refer to Get started: optimize!.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"f = ManoptExamples.RiemannianMeanCost(data)\ngrad_f = ManoptExamples.RiemannianMeanGradient!!(M, data)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Then we can for example directly call a gradient descent as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"x1 = gradient_descent(M, f, grad_f, first(data))","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/#Variant-2:-Using-the-objective","page":"Riemannian Mean","title":"Variant 2: Using the objective","text":"","category":"section"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"A shorter way to directly obtain the Manifold objective including these two functions. Here, we want to specify that the objective can do in-place-evaluations using the evaluation=-keyword. The objective can be obtained calling Riemannian_mean_objective as","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmo = ManoptExamples.Riemannian_mean_objective(\n M, data,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"Together with a manifold, this forms a Manopt Problem, which would usually enable to switch manifolds between solver runs. Here we could for example switch to using Euclidean(3) instead for the same data the objective is build upon.","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"rmp = DefaultManoptProblem(M, rmo)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"This enables us to for example solve the task with different, gradient based, solvers. The first is the same as above, just not using the high-level interface","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s1 = GradientDescentState(M, copy(M, first(data)))\nsolve!(rmp, s1)\nx2 = get_solver_result(s1)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868392794567202\n 0.006531600696673591\n 0.7267799821044285","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"but we can easily use a conjugate gradient instead","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"s2 = ConjugateGradientDescentState(\n M,\n copy(M, first(data)),\n StopAfterIteration(100),\n ArmijoLinesearch(M),\n FletcherReevesCoefficient(),\n)\nsolve!(rmp, s2)\nx3 = get_solver_result(s2)","category":"page"},{"location":"examples/Riemannian-mean/","page":"Riemannian Mean","title":"Riemannian Mean","text":"3-element Vector{Float64}:\n 0.6868393613136017\n 0.006531541407458413\n 0.7267799052788726","category":"page"},{"location":"examples/RayleighQuotient/#The-Rayleigh-Quotient","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Ronny Bergmann 2024-03-09","category":"page"},{"location":"examples/RayleighQuotient/#Introduction","page":"The Rayleigh Quotient","title":"Introduction","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This example reproduces a few conceptual ideas of Optimization on Manifolds that are used throughout [Bou23] using the Rayleigh quotient and explores several different ways to use the algorithms from Manopt.jl.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For a symmetric matrix A in mathbb R^ntimes n we consider the 📖 Rayleigh Quotient","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"operatorname*argmin_x in mathbb R^n backslash 0\nfracx^mathrmTAxlVert x rVert^2","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"On the sphere we can omit the denominator and obtain","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f(p) = p^mathrmTApqquad p 𝕊^n-1","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"which by itself we can again continue in the embedding as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"tilde f(x) = x^mathrmTAxqquad x in mathbb R^n","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"This cost has the nice feature that at the minimizer p^*inmathbb S^n-1 the function falue f(p^*) is the smalles eigenvalue of A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"For the embedded function tilde f the gradient and Hessian can be computed with classical methods as","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\ntilde f(x) = 2Ax qquad x ℝ^n\n\n^2tilde f(x)V = 2AV qquad x V ℝ^n\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Similarly, cf. Examples 3.62 and 5.27 of [Bou23], the Riemannian gradient and Hessian on the manifold mathcal M = mathbb S^n-1 are given by","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"beginalign*\noperatornamegrad f(p) = 2Ap - 2(p^mathrmTAp)*pqquad p 𝕊^n-1\n\noperatornameHess f(p)X = 2AX - 2(p^mathrmTAX)p - 2(p^mathrmTAp)Xqquad p 𝕊^n-1 X in T_p𝕊^n-1\nendalign*","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first generate an example martrx A.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using Pkg;\ncd(@__DIR__)\nPkg.activate(\".\"); # use the example environment,","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"using LRUCache, BenchmarkTools, LinearAlgebra, Manifolds, ManoptExamples, Manopt, Random\nRandom.seed!(42)\nn = 500\nA = Symmetric(randn(n, n) / n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And the manifolds","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"M = Sphere(n-1)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Sphere(499, ℝ)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"E = get_embedding(M)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean(500; field=ℝ)","category":"page"},{"location":"examples/RayleighQuotient/#Setup-the-corresponding-functions","page":"The Rayleigh Quotient","title":"Setup the corresponding functions","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Since RayleighQuotientCost, RayleighQuotientGrad!!, and RayleighQuotientHess!! are themselves manifold agnostic we only need to initialize them once. Agnostic here means that they would compute f is called with M as their first argument and tilde f if called with E.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We instantiate","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"f = ManoptExamples.RayleighQuotientCost(A)\ngrad_f = ManoptExamples.RayleighQuotientGrad!!(A)\nHess_f = ManoptExamples.RayleighQuotientHess!!(A)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"the suffix !! also indicates that these functions both work as allocating and in-place variants. Given a starting point and some memory","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"p0 = [1.0, zeros(n-1)...]\nX = zero_vector(M, p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"we can both call","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Y = grad_f(M, p0) # Allocates memory\ngrad_f(M, X, p0) # Computes in place of X and returns the result in X.\nnorm(M, p0, X-Y)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"0.0","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Now we can use a few different variants of solvers to approaach this and this tutorial will walk you through a few of them.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"First of all let’s construct the actual result – since Rayleigh quotient minimization is not necessarily the best way to compute the smallest Eigenvalue. We can also compute","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"λ = min(eigvals(A)...)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"-0.08967721009388108","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-on-gradient-information","page":"The Rayleigh Quotient","title":"A Solver based on gradient information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s first just use first-order information and since we are just starting, maybe we only derived the Euclidean gradient nabla tilde f. We can “tell” the solver, that the provided function and the gradient are defined as the Euclidean variants in the embedding. internally, Manopt.jl then issues the conversion for Euclidean gradients to the corresponding Riemannian one, cf. e.g. this tutorial section or Section 3.8 or more precisely Example 3.62 in [Bou23].","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"But instead of diving into all the tecnical details, we can just specify objective_type=:Euclidean to trigger the conversion. We start with a simple gradient descent","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"s = gradient_descent(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n return_state=true,\n)\nq1 = get_solver_result(s)\ns","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 50 f(x): -0.088415|grad f(p)|:0.004530500043902619\n# 100 f(x): -0.089097|grad f(p)|:0.004589417101266096\n# 150 f(x): -0.089530|grad f(p)|:0.0026028331895358247\n# 200 f(x): -0.089650|grad f(p)|:0.0012359084298719039\n\n# Solver state for `Manopt.jl`s Gradient Descent\nAfter 200 iterations\n\n## Parameters\n* retraction method: ExponentialRetraction()\n\n## Stepsize\nArmijoLinesearch() with keyword parameters\n * initial_stepsize = 1.0\n * retraction_method = ExponentialRetraction()\n * contraction_factor = 0.95\n * sufficient_decrease = 0.1\n\n## Stopping criterion\n\nStop When _one_ of the following are fulfilled:\n Max Iteration 200: reached\n |grad f| < 1.0e-8: not reached\nOverall: reached\nThis indicates convergence: No\n\n## Debug\n :Iteration = [(:Iteration, \"# %-6d\"), (:Cost, \"f(x): %f\"), (:GradientNorm, \"|grad f(p)|:%s\"), \"\\n\", 50]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From the final cost we can already see that q1 is an eigenvector to the smallest eigenvalue we obtaines above.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"And we can compare this to running with the Riemannian gradient, since the RayleighQuotientGrad!! returns this one as well, when just called with the sphere as first Argument, we just have to remove the objective_type.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q2 = gradient_descent(M, f, grad_f, p0;\n debug = [:Iteration, :Cost, :GradientNorm, 50, \"\\n\"],\n)\n#Test that both are the same\nisapprox(M, q1,q2)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 50 f(x): -0.088415|grad f(p)|:0.004530500043902567\n# 100 f(x): -0.089097|grad f(p)|:0.004589417101266063\n# 150 f(x): -0.089530|grad f(p)|:0.002602833189535808\n# 200 f(x): -0.089650|grad f(p)|:0.0012359084298719097\n\ntrue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We can also benchmark both","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0; objective_type=:Euclidean)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 23 samples with 1 evaluation.\n Range (min … max): 217.668 ms … 268.332 ms ┊ GC (min … max): 3.21% … 3.98%\n Time (median): 219.032 ms ┊ GC (median): 3.24%\n Time (mean ± σ): 222.029 ms ± 10.351 ms ┊ GC (mean ± σ): 3.33% ± 0.26%\n\n █ \n ▆█▆▃▁▃▁▃▁▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃ ▁\n 218 ms Histogram: frequency by time 268 ms <\n\n Memory estimate: 1.13 GiB, allocs estimate: 3613.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark gradient_descent($M, $f, $grad_f, $p0)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 149 samples with 1 evaluation.\n Range (min … max): 31.006 ms … 163.769 ms ┊ GC (min … max): 0.00% … 79.63%\n Time (median): 31.330 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 33.701 ms ± 11.067 ms ┊ GC (mean ± σ): 3.40% ± 7.06%\n\n █▃ ▂ ▁ ▃ \n ██▄█▇██▆▄▁▄▄▁▇▁▁▆▁▄▆█▇▁▁▄▁▄▄▁▁▁▁▁▁▁▁▁▄▁▁▁▄▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▁▁▄ ▄\n 31 ms Histogram: log(frequency) by time 47 ms <\n\n Memory estimate: 11.38 MiB, allocs estimate: 3006.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"From these results we see, that the conversion from the Euclidean to the Riemannian gradient does require a small amount of effort and hence reduces the performance slighly. Still, if the Euclidean Gradient is easier to compute or already available, this is in terms of coding the faster way. Finally this is a tradeoff between derivation and implementation efforts for the Riemannian gradient and a slight performance reduction when using the Euclidean one.","category":"page"},{"location":"examples/RayleighQuotient/#A-Solver-based-(also)-on-(approximate)-Hessian-information","page":"The Rayleigh Quotient","title":"A Solver based (also) on (approximate) Hessian information","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To also involve the Hessian, we consider the trust regions solver with three cases:","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Euclidean, approximating the Hessian\nEuclidean, providing the Hessian\nRiemannian, providing the Hessian but also using in-place evaluations.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q3 = trust_regions(M, f, grad_f, p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.088106|grad f(p)|:0.01903913659588686\n# 20 f(x): -0.089023|grad f(p)|:0.007792334296299116\n# 30 f(x): -0.089501|grad f(p)|:0.008034300330026467\n# 40 f(x): -0.089842|grad f(p)|:0.008125526728200166\n# 50 f(x): -0.089890|grad f(p)|:0.0031244752821335416\n# 60 f(x): -0.089925|grad f(p)|:0.0029682862637714163\n# 70 f(x): -0.089962|grad f(p)|:0.002811722437216778\n# 80 f(x): -0.089997|grad f(p)|:0.0026658493010157363\n# 90 f(x): -0.090032|grad f(p)|:0.0025418974797659266\n# 100 f(x): -0.090067|grad f(p)|:0.0024485809550738955\n# 110 f(x): -0.090108|grad f(p)|:0.0023894008071780747\n# 120 f(x): -0.090155|grad f(p)|:0.002362317662908117\n# 130 f(x): -0.090208|grad f(p)|:0.0023611301647631484\n# 140 f(x): -0.090262|grad f(p)|:0.00237797866404072\n# 150 f(x): -0.090314|grad f(p)|:0.002405563029627607\n# 160 f(x): -0.090362|grad f(p)|:0.002438250821406204\n# 170 f(x): -0.090404|grad f(p)|:0.002472221074327323\n# 180 f(x): -0.090441|grad f(p)|:0.0025051377726827166\n# 190 f(x): -0.090472|grad f(p)|:0.002535721310831389\n# 200 f(x): -0.090498|grad f(p)|:0.0025633813700434637\n# 210 f(x): -0.090513|grad f(p)|:0.0025832821804127513\n# 220 f(x): -0.090513|grad f(p)|:0.0025832821804127513\n# 230 f(x): -0.090513|grad f(p)|:0.0025832821792817493\n# 240 f(x): -0.090513|grad f(p)|:0.0025832821770197098\n# 250 f(x): -0.090513|grad f(p)|:0.0025832821747576924\n# 260 f(x): -0.090513|grad f(p)|:0.002583282172495683\n# 270 f(x): -0.090513|grad f(p)|:0.0025832821702336567\n# 280 f(x): -0.090513|grad f(p)|:0.002583282167971658\n# 290 f(x): -0.090513|grad f(p)|:0.002583282165709656\n# 300 f(x): -0.090513|grad f(p)|:0.002583282163447637\n# 310 f(x): -0.090513|grad f(p)|:0.0025832821611855928\n# 320 f(x): -0.090513|grad f(p)|:0.0025832821589235814\n# 330 f(x): -0.090513|grad f(p)|:0.002583282156661572\n# 340 f(x): -0.090513|grad f(p)|:0.0025832821543995727\n# 350 f(x): -0.090513|grad f(p)|:0.002583282152137569\n# 360 f(x): -0.090513|grad f(p)|:0.0025832821498755487\n# 370 f(x): -0.090513|grad f(p)|:0.0025832821476135036\n# 380 f(x): -0.090513|grad f(p)|:0.0025832821453515035\n# 390 f(x): -0.090513|grad f(p)|:0.0025832821430894675\n# 400 f(x): -0.090513|grad f(p)|:0.0025832821408274405\n# 410 f(x): -0.090513|grad f(p)|:0.002583282138565445\n# 420 f(x): -0.090513|grad f(p)|:0.002583282136303441\n# 430 f(x): -0.090513|grad f(p)|:0.00258328213404143\n# 440 f(x): -0.090513|grad f(p)|:0.002583282131779385\n# 450 f(x): -0.090513|grad f(p)|:0.0025832821295174104\n# 460 f(x): -0.090513|grad f(p)|:0.002583282127255372\n# 470 f(x): -0.090513|grad f(p)|:0.002583282124993372\n# 480 f(x): -0.090513|grad f(p)|:0.0025832821227313313\n# 490 f(x): -0.090513|grad f(p)|:0.0025832821204693065\n# 500 f(x): -0.090513|grad f(p)|:0.002583282118207321\n# 510 f(x): -0.090513|grad f(p)|:0.0025832821159453034\n# 520 f(x): -0.090513|grad f(p)|:0.0025832821136832665\n# 530 f(x): -0.090513|grad f(p)|:0.0025832821114212673\n# 540 f(x): -0.090513|grad f(p)|:0.002583282109159243\n# 550 f(x): -0.090513|grad f(p)|:0.002583282106897217\n# 560 f(x): -0.090513|grad f(p)|:0.002583282104635213\n# 570 f(x): -0.090513|grad f(p)|:0.0025832821023731955\n# 580 f(x): -0.090513|grad f(p)|:0.0025832821001112094\n# 590 f(x): -0.090513|grad f(p)|:0.002583282097849167\n# 600 f(x): -0.090513|grad f(p)|:0.0025832820955871503\n# 610 f(x): -0.090513|grad f(p)|:0.0025832820933251325\n# 620 f(x): -0.090513|grad f(p)|:0.002583282091063122\n# 630 f(x): -0.090513|grad f(p)|:0.0025832820888010873\n# 640 f(x): -0.090513|grad f(p)|:0.0025832820865390785\n# 650 f(x): -0.090513|grad f(p)|:0.0025832820842770442\n# 660 f(x): -0.090513|grad f(p)|:0.0025832820820150576\n# 670 f(x): -0.090513|grad f(p)|:0.0025832820797530767\n# 680 f(x): -0.090513|grad f(p)|:0.0025832820774910523\n# 690 f(x): -0.090513|grad f(p)|:0.0025832820752290362\n# 700 f(x): -0.090513|grad f(p)|:0.002583282072966992\n# 710 f(x): -0.090513|grad f(p)|:0.002583282070704973\n# 720 f(x): -0.090513|grad f(p)|:0.0025832820684429532\n# 730 f(x): -0.090513|grad f(p)|:0.002583282066180946\n# 740 f(x): -0.090513|grad f(p)|:0.0025832820639189306\n# 750 f(x): -0.090513|grad f(p)|:0.0025832820616569214\n# 760 f(x): -0.090513|grad f(p)|:0.00258328205939488\n# 770 f(x): -0.090513|grad f(p)|:0.002583282057132884\n# 780 f(x): -0.090513|grad f(p)|:0.0025832820548708406\n# 790 f(x): -0.090513|grad f(p)|:0.002583282052608873\n# 800 f(x): -0.090513|grad f(p)|:0.002583282050346837\n# 810 f(x): -0.090513|grad f(p)|:0.0025832820480848214\n# 820 f(x): -0.090513|grad f(p)|:0.0025832820458228205\n# 830 f(x): -0.090513|grad f(p)|:0.0025832820435608087\n# 840 f(x): -0.090513|grad f(p)|:0.0025832820412987944\n# 850 f(x): -0.090513|grad f(p)|:0.0025832820390367726\n# 860 f(x): -0.090513|grad f(p)|:0.002583282036774768\n# 870 f(x): -0.090513|grad f(p)|:0.002583282034512706\n# 880 f(x): -0.090513|grad f(p)|:0.002583282032250709\n# 890 f(x): -0.090513|grad f(p)|:0.0025832820299886896\n# 900 f(x): -0.090513|grad f(p)|:0.002583282027726701\n# 910 f(x): -0.090513|grad f(p)|:0.002583282025464682\n# 920 f(x): -0.090513|grad f(p)|:0.0025832820232026517\n# 930 f(x): -0.090513|grad f(p)|:0.002583282020940619\n# 940 f(x): -0.090513|grad f(p)|:0.0025832820186786334\n# 950 f(x): -0.090513|grad f(p)|:0.002583282016416595\n# 960 f(x): -0.090513|grad f(p)|:0.0025832820141545986\n# 970 f(x): -0.090513|grad f(p)|:0.0025832820118925717\n# 980 f(x): -0.090513|grad f(p)|:0.0025832820096305525\n# 990 f(x): -0.090513|grad f(p)|:0.002583282007368543\n# 1000 f(x): -0.090513|grad f(p)|:0.0025832820051065217","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"To provide the Hessian in the high-level interface we need to prodive it as an anonymous function, since any struct is considered to (eventually) be the also optional starting point. For space reasons, let’s also shorten the debug print to only iterations 7 and 14.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q4 = trust_regions(M, f, grad_f, (E, p, X) -> Hess_f(E, p, X), p0; objective_type=:Euclidean,\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.089673|grad f(p)|:0.0033633987039373655","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"q5 = trust_regions(M, f, grad_f, (M, Y, p, X) -> Hess_f(M, Y, p, X), p0;\n evaluation=InplaceEvaluation(),\n debug = [:Iteration, :Cost, :GradientNorm, 10, \"\\n\"],\n);","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Initial f(x): -0.000727\n# 10 f(x): -0.089673|grad f(p)|:0.00336339870393737","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Let’s also here compare them in benchmarks. Let’s here compare all variants in their (more performant) in-place versions.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $p0;\n objective_type=:Euclidean,\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 10 samples with 1 evaluation.\n Range (min … max): 488.560 ms … 542.951 ms ┊ GC (min … max): 3.26% … 3.55%\n Time (median): 498.677 ms ┊ GC (median): 3.22%\n Time (mean ± σ): 503.851 ms ± 17.951 ms ┊ GC (mean ± σ): 3.27% ± 0.11%\n\n █ ▁ ▁▁ ▁▁▁ ▁ ▁ \n █▁█▁██▁▁▁▁▁▁▁▁▁▁▁███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁\n 489 ms Histogram: frequency by time 543 ms <\n\n Memory estimate: 1.97 GiB, allocs estimate: 40408.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((E, Y, p, X) -> Hess_f(E, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n objective_type=:Euclidean\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 294 samples with 1 evaluation.\n Range (min … max): 12.991 ms … 148.108 ms ┊ GC (min … max): 0.00% … 87.36%\n Time (median): 15.369 ms ┊ GC (median): 3.17%\n Time (mean ± σ): 17.014 ms ± 8.238 ms ┊ GC (mean ± σ): 7.16% ± 7.03%\n\n ▁ █ ▂ \n ▆▁▁▇▅█▃▆█▇▅█▄▁▆▃▂▂▁▁▂▅▂▃▅▂▁▃▃▄▂▃▅▃▁▁▁▁▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▃▁▂▃ ▃\n 13 ms Histogram: frequency by time 28.6 ms <\n\n Memory estimate: 37.43 MiB, allocs estimate: 2920.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"@benchmark trust_regions($M, $f, $grad_f, $((M, Y, p, X) -> Hess_f(M, Y, p, X)), $p0;\n evaluation=InplaceEvaluation(),\n)","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"BenchmarkTools.Trial: 506 samples with 1 evaluation.\n Range (min … max): 8.717 ms … 152.718 ms ┊ GC (min … max): 0.00% … 90.61%\n Time (median): 8.884 ms ┊ GC (median): 0.00%\n Time (mean ± σ): 9.881 ms ± 6.537 ms ┊ GC (mean ± σ): 4.94% ± 5.90%\n\n ▆█▂ ▂▃ ▁ \n ███▄▁▁▆▆██▇▄▆██▆▇▄▅▇▄▄▁▁▆▄▇▄▆▁▅▅▆▁▅▅▄▁▁▄▅▅▁▆▇▇▇▄▄▄▄▁▁▁▁▁▁▄▄ ▇\n 8.72 ms Histogram: log(frequency) by time 14.7 ms <\n\n Memory estimate: 10.77 MiB, allocs estimate: 2899.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We see that Hessian approximation is quite costly, and Gradient and Hessian conversion somewhat costly; still, they also might serve as a good starting point, before deciding to delve into computing Riemannian gradients and Hessians.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Of course all 5 runs obtained solutions close by; one might consider the gradient based runs to not have fully converged.","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q1, q) for q ∈ [q2,q3] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 4.471485799821605e-15\n 0.048047538209352994","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[distance(M, q3, q) for q ∈ [q4,q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"2-element Vector{Float64}:\n 0.08269488012454579\n 0.08269488012454579","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"Which we can also see in the final cost, comparing it to the Eigenvalue","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"[f(M, q) - λ for q ∈ [q1, q2, q3, q4, q5] ]","category":"page"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"5-element Vector{Float64}:\n 2.76900562450888e-5\n 2.769005624428389e-5\n -0.000836208332542443\n 3.191891195797325e-16\n 3.191891195797325e-16","category":"page"},{"location":"examples/RayleighQuotient/#Summary","page":"The Rayleigh Quotient","title":"Summary","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"We illustrated several possibilities to call solvers, with both Euclidean gradient and Hessian and Riemannian gradient and Hessian, allocating and in-place function. While the performance is better for the Riemannian case, the Euclidean one is a worthy alternative, when those are easier to compute.","category":"page"},{"location":"examples/RayleighQuotient/#Literature","page":"The Rayleigh Quotient","title":"Literature","text":"","category":"section"},{"location":"examples/RayleighQuotient/","page":"The Rayleigh Quotient","title":"The Rayleigh Quotient","text":"N. Boumal. An Introduction to Optimization on Smooth Manifolds. First Edition (Cambridge University Press, 2023).\n\n\n\n","category":"page"},{"location":"helpers/error_measures/#Error-measures","page":"Error measures","title":"Error measures","text":"","category":"section"},{"location":"helpers/error_measures/","page":"Error measures","title":"Error measures","text":"Modules = [ManoptExamples]\nPages = [\"ErrorMeasures.jl\"]\nOrder = [:type, :function]\nPrivate = true","category":"page"},{"location":"helpers/error_measures/#ManoptExamples.mean_average_error-Tuple{ManifoldsBase.AbstractManifold, Any, Any}","page":"Error measures","title":"ManoptExamples.mean_average_error","text":"mean_average_error(M,x,y)\n\nCompute the (mean) squared error between the two points x and y on the PowerManifold manifold M.\n\n\n\n\n\n","category":"method"},{"location":"helpers/error_measures/#ManoptExamples.mean_squared_error-Union{Tuple{mT}, Tuple{mT, Any, Any}} where mT<:ManifoldsBase.AbstractManifold","page":"Error measures","title":"ManoptExamples.mean_squared_error","text":"mean_squared_error(M, p, q)\n\nCompute the (mean) squared error between the two points p and q on the (power) manifold M.\n\n\n\n\n\n","category":"method"},{"location":"#Welcome-to-ManoptExample.jl","page":"Home","title":"Welcome to ManoptExample.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"ManoptExamples.ManoptExamples","category":"page"},{"location":"#ManoptExamples.ManoptExamples","page":"Home","title":"ManoptExamples.ManoptExamples","text":"🏔️⛷️ ManoptExamples.jl – A collection of research and tutorial example problems for Manopt.jl\n\n📚 Documentation: juliamanifolds.github.io/ManoptExamples.jl\n📦 Repository: github.com/JuliaManifolds/ManoptExamples.jl\n💬 Discussions: github.com/JuliaManifolds/ManoptExamples.jl/discussions\n🎯 Issues: github.com/JuliaManifolds/ManoptExamples.jl/issues\n\n\n\n\n\n","category":"module"},{"location":"","page":"Home","title":"Home","text":"This package provides a set of example tasks for Manopt.jl based on either generic manifolds from the ManifoldsBase.jl interface or specific manifolds from Manifolds.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Each example usually consists of","category":"page"},{"location":"","page":"Home","title":"Home","text":"a cost function and additional objects, like the gradient or proximal maps, see objectives\nan example explaining how to use these, see examples","category":"page"},{"location":"","page":"Home","title":"Home","text":"Helping functions that are used in one or more examples can be found in the section of functions in the menu.","category":"page"}] +} diff --git a/v0.1.8/siteinfo.js b/v0.1.8/siteinfo.js new file mode 100644 index 0000000..547a867 --- /dev/null +++ b/v0.1.8/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.1.8"; diff --git a/versions.js b/versions.js new file mode 100644 index 0000000..3fcdf59 --- /dev/null +++ b/versions.js @@ -0,0 +1,7 @@ +var DOC_VERSIONS = [ + "stable", + "v0.1", + "dev", +]; +var DOCUMENTER_NEWEST = "v0.1.8"; +var DOCUMENTER_STABLE = "stable";